Prompting: 更好地将语言模型应用到NLP任务
作者简介:高天宇,普林斯顿大学博士,导师陈丹琦。本科就读于清华大学计算机系,本科期间即在AI顶会上发表四篇论文(两篇AAAI、两篇EMNLP),获得2019年清华大学本科生特等奖学金。
从BERT(Devlin等人, 2019)开始,在下游任务中微调预训练语言模型 (LM)已成为 NLP 领域的通用做法。然而,拥有 175B 参数的 GPT-3 模型(Brown等人, 2020)带来了一种将 LM 用于下游任务的新方法:通过使用自然语言提示信息(prompt)和任务示例(demonstration)作为context,GPT-3只需几个样本即可处理很多任务,而不需更新底层模型中的参数(正如文章标题“Language Models are Few-Shot Learners”所示)。GPT-3 庞大的模型规模是其成功的重要因素,而prompt和demonstration的概念也让我们对如何更好地使用语言模型有了新的认识。
那么什么是prompt?prompt是插入到输入样本中的一段文本,因此可以将原始任务转换为(masked)language modeling问题。例如,假设我们要对影评“No reason to watch”进行情感分类,我们可以在句子中附加一个prompt“It was”,得到“No reason to watch. It was”。这样就可以很自然地认为,LM 会有更高的概率判断为“terrible”而不是“great”。
GPT-3 发布后,涌现了很多与prompt相关的论文,其中很多都讨论了中等规模预训练模型的prompt-based learning,例如BERT(BERT-base 有 110M 参数,比最大的 GPT-3 小 1000 倍)。在这篇博文中,我将概述最近的prompt-based方法以及我对prompting的看法。在文章最后,将介绍我们的 ACL'21 论文,“Making Pre-trained Language Models Better Few-shot Learners”。
论文地址:https://arxiv.org/pdf/2012.15723.pdf
代码地址:https://github.com/princeton-nlp/lm-bff
为什么我们需要Prompt
预训练、标准微调和基于prompt的微调,以情感分类任务为例 (Gao等人, 2021).
在标准的“pre-training和fine-tuning”范式中,预训练阶段和下游任务之间的gap可能很大:它们训练目标不同。对于下游任务,我们通常需要引入新的参数——例如,对于 BERT 大小的模型和二分类任务,需要额外的一组 1,024 x 2 的参数。而prompting使得下游任务可以采用与预训练目标相同的格式,并且不需要新的参数,如上图所示。对于分类任务,我们只需要设计一个template(“It was”)以及预期的text response(我们称之为label words,例如,图中的正标签词“great”和负标签词“terrible”)。通过缩小两个阶段之间的差距,在特定任务上部署预训练模型就变得容易多了,尤其是对于小样本(few-shot)的情况——当你只有十几个训练样本来完成一项新任务时,很难有效地fine-tune预训练模型和新的task-specific 的参数,但prompting使得这个过程变得顺畅很多。Scao 和 Rush (2021)的研究表明一个prompt 可能值 100 个常规数据点,说明prompts可以带来样本效率的巨大提升。
对prompt的研究有两种不同的方向:受 PET 论文的启发(Schick and Schütze,2021a,b),基于prompt的fine-tuning(关键点是仍然进一步优化参数)被认为是对小语言模型来说更好的few-shot learner途径(“小”指的是拥有数百万而不是数十亿的参数,如 BERT 或 RoBERTa);对于像 175B GPT-3 和 11B T5 这样的超大型模型(Raffel等人, 2020),微调它们比较困难(只是猜测,没试过)而且成本很高,因此我们希望固定它们的参数,通过不同的prompt(离散的或soft的,将在后面讨论)将它们应用到不同任务上。
Discrete Prompts
在预训练模型中使用prompt的工作可以追溯到 GPT-1/2(Radford等人, 2018 , 2019),作者表明,通过设计适当的prompt,LM 可以在从情感分类到阅读理解等零样本任务上都取得不错的效果。后来,Petroni等人 (2019); Davison等人(2019); Jiang等人(2020); Talmor等人(2020)探索了利用prompt从 LM中挖掘事实或常识知识。而GPT-3固定了模型参数并应用了prompt,之后基于prompt的方法被进一步引入到较小的 LM中(Schick 和 Schütze, 2021a, b; 我们的工作LM-BFF, Gao等人, 2021)。它们与 GPT-3 的不同之处在于它们对完整模型进行了微调,并采用双向掩码 LM 而不是单向 LM。最近的几篇论文延续了这条路线,通过调整目标函数(Tam等人, 2021)或以统一任务形式来改进,例如在问答(Zhong等人, 2021)或文本蕴涵(Wang等人, 2021)任务中。在所有这些模型中,prompt都是自然语言形式,由词汇表中离散的token组成。大多数工作都需要人工设计的prompt——prompt engineering非常重要,因为小的扰动就可能会显着影响模型的性能,而设计完美的prompt需要对 LM 内部机制的理解以及反复的试验。
和人工设计的prompt相反,我们也可以生成或优化prompt:Guo等人(2021)表明一种soft Q-learning方法对于promt generation效果很好;AutoPrompt(Shin等人, 2020)建议采用一种基于梯度的搜索(该想法来自Wallace等人, 2019,旨在搜索通用的对抗性触发器,使模型生成一个特定的预测)来找出特定任务的最佳prompt。AutoPrompt的设置的不同之处在于它固定了模型:它假设所有内容都在预训练模型中编码好,我们需要的只是将它们“prompt”出来;另一个原因是 AutoPrompt 还被用于 LAMA(Petroni等人, 2019),这是一项knowledge probing任务,要求不触及模型参数。以下是一个用于情感分类的 AutoPrompt 示例。
AutoPrompt 图解(Shin等人, 2020)
搜索到的模板显著提高了 LAMA 的性能;它们还在使用完整数据集的情感分类和自然语言推理任务中取得了很高的准确率(不过仍然低于微调的结果)。如果看一下搜索出来的离散(但不再是自然语言形式)prompt,可以找到对一些“trigger tokens”的解释,但其他许多只是特例。目前尚不清楚自动prompt是否真的能帮助LM回忆内部“知识”,还是只是另一种优化方式,是从预训练模型中的“彩票”中挑选“中奖彩票”(对于彩票假设,参见 Frankle和Carbin, 2019)。
Soft Prompts:Prompt里真的需要离散的词吗
既然 AutoPrompt 已经对prompt进行了基于梯度的搜索,为什么不从离散tokens转向连续的“soft prompt”呢?例如,Zhong等人(2021)以及 Qin和Eisner(2021)提出将“soft prompt”用于knowledge probing任务(LAMA 等),相对于离散prompt取得了相当大的提升。这个想法非常简单——只需在输入序列中放入一些随机向量(与词汇表中的特定word embedding无关)并进行调整,同时固定预训练模型的其他部分。
除了probing任务之外,还有一些其他的使用soft prompt的工作:Li和Liang(2021)将这个想法扩展到生成任务,并表明它在仅调整 0.1% 的参数的情况下就能与微调性能相当。Han等人(2021)将soft prompt与人工模板相结合,在关系抽取方面取得了极佳的性能。迄今为止,我所看到的关于soft prompt的最全面的研究来自Lester等人(2021):他们在 T5 上应用了soft prompt,并表明只需调整prompt(仅占总参数的一小部分),T5 在 NLU 任务上就可以取得与对整个模型进行微调相当的性能。我之所以喜欢这篇论文,还因为它进行了广泛的消融实验,并给出了得到好soft prompt的几个关键经验选择,包括用word embedding初始化、足够数量的soft prompt token和对齐的预训练目标。除了参数效率,Lester 等人(2021)还证明soft prompt比完整模型微调具有更好的可迁移性。
我们回顾一下soft prompt的idea:它效果非常好,并且在不能(probing任务)或不准备(模型太大或想要适用于所有任务的通用模型)接触模型参数时特别有效。微调soft prompt与基于prompt的微调区别很大,它允许优化整个模型,更重要的是,它比标准微调能更好地处理小样本情况。与人工prompt不同,AutoPrompt 在小样本情况下效果不佳,而且据我所知,没有soft-prompt论文说它们实现了很好的小样本性能(尽管Liu 等人(2021)获得了较为满意的小样本结果,他们是从离散的人工prompt和微调整个模型开始做的)。此外,正如Lester等人(2021)所证明的,除非使用超过100 亿参数的预训练模型,soft prompt永远无法达到与完全微调SuperGLUE相同的性能!如何进一步推动soft prompt在小样本情况和较小的语言模型中更有效地工作,是我认为值得研究的地方。
GPT-3 (蓝) vs 全模型微调 (橙) vs soft-prompt微调(绿). 详见Lester等人(2021).
校准语言模型
prompting很赞,但它也会从预训练语料库带来bias。例如,在零样本情感分类设置中,给定“N/A”作为输入,GPT-3 倾向于预测为“positive”而不是“negative”,而本应该分配50/50的概率给这两个相反的标签(赵等人,2021 )。另一个问题是同一对象的不同表示(例如,“computer”和“PC”)可能会竞争概率质量,导致任务标签上的分布不理想(Holtzman 等,2021)。赵等人(2021)和Holtzman 等人(2021)给出的解决方案是校准(calibration):对带偏token进行补偿,把他们校准为无偏状态。
介绍 LM-BFF
最后介绍一下我们ACL'21的论文,“ Making Pre-trained Language Models Better Few-shot Learners ”,缩写为 LM-BFF(better few-shot fine-tuning of language models,或者是language models' best friends forever)。LM-BFF 是一套简单的技术组合,用于仅在少量训练样本上对预训练的 LM 进行微调,包括:
基于prompt的微调,以及自动生成prompt的新方法;
一种动态地、有选择地在上下文中引入demonstration 的方法。
我们在严格的小样本设置(如上文所述)中评估 LM-BFF,实验表明 LM-BFF 的效果显著优于标准微调(在 SNLI 上提升30%,平均提升 11%)。代码见本文开头处。
基于Prompt的微调
上文已经讨论过什么是基于prompt的微调——用模板(templates)将任务制定为一个 (masked) language modeling 问题,并将每个类的预期输出设置为标签词( label words)。我们设计了以下模板和标签词。
实验中使用的人工prompt(模板 + 标签词)。<S1> 和 <S2> 代表输入的句子。
当然,我们的方法也有局限性。准确率还有很大的提升空间,就像标准的微调一样,LM-BFF 受到小样本训练中variance的影响比较大。虽然自动prompt的性能与人工prompt比相当甚至更好,但它仍然需要一些人工设计(自动模板设计始于人工标签词,自动标签词设计始于人工模板)。最后,基于prompt的微调本身偏好某些任务:(1) 可以作为“填空”的问题,(2) 输入相对较短,以及 (3) 不包含很多输出类。这些都是未来工作中可以考虑的问题。
这篇论文于 2020 年底发布,从那时起,关于few-shot或prompting领域出现了许多激动人心的进展。尽管如此,LM-BFF 在自动prompt生成方面和在微调中引入demonstration的研究是unique的。与最近的soft-prompt方法相比,LM-BFF(以及其他基于自然语言prompt的方法)在较小的语言模型和few-shot场景中具有巨大的优势。希望我们的工作能够激发在这个方向上的进一步探索。
总体来说,这篇文章讨论了很多关于自然语言prompt、soft-prompt和in-context learning的最新进展,并介绍了我们的 LM-BFF 论文。我相信prompting会是未来几年比较有希望的研究方向。在更大的场景下,基于prompt的方法是关于如何更好地从自监督学习(预训练)中挖掘知识(关于事实、推理、理解情感等)的,在这个方向上的研究可以更好地挖掘语言模型的潜力,让他们成为越来越强大的learner。
References
1. Devlin et al. 2019. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.
2. Brown et al. 2020. Language Models are Few-Shot Learners.
3. Gao et al. 2020. Making Pre-trained Language Models Better Few-shot Learners.
4. Scao and Rush. How Many Data Points is a Prompt Worth?
5. Schick and Schütze. 2021. Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference.
6. Schick and Schütze. 2021. It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners.
7. Raffel et al. 2020. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.
8. Radford et al. Improving Language Understanding by Generative Pre-Training.
9. Radford et al. Language Models are Unsupervised Multitask Learners.
10. Petroni et al. 2019. Language Models as Knowledge Bases?
11. Davison et al. 2019. Commonsense Knowledge Mining from Pretrained Models.
12. Jiang et al. 2020. How Can We Know What Language Models Know?
13. Talmor et al. 2020. oLMpics -- On what Language Model Pre-training Captures.
14. Tam et al. 2021. Improving and Simplifying Pattern Exploiting Training.
15. Zhong et al. Meta-tuning Language Models to Answer Prompts Better.
16. Wang et al. 2021. Entailment as Few-Shot Learner.
17. Shin et al. 2020. AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts.
18. Wallace et al. 2019. Universal Adversarial Triggers for Attacking and Analyzing NLP.
19. Frankle and Carbin. 2019. The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks.
20. Zhong et al. 2021. Factual Probing Is [MASK]: Learning vs. Learning to Recall.
21. Qin and Eisner. 2021. Learning How to Ask: Querying LMs with Mixtures of Soft Prompts.
22. Li and Liang. 2021. Prefix-Tuning: Optimizing Continuous Prompts for Generation.
23. Han et al. 2021. PTR: Prompt Tuning with Rules for Text Classification.
24. Lester et al. 2021. The Power of Scale for Parameter-Efficient Prompt Tuning.
25. Liu et al. 2021. GPT Understands, Too.
26. Liu et al. 2021. What Makes Good In-Context Examples for GPT-3?
27. Lu et al. 2021. Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity.
28. Zhao et al. 2021. Calibrate Before Use: Improving Few-Shot Performance of Language Models.
29. Holtzman et al. Surface Form Competition: Why the Highest Probability Answer Isn’t Always Right.
30. Dodge et al. 2020. Fine-Tuning Pretrained Language Models: Weight Initializations, Data Orders, and Early Stopping.
31. Zhang et al. 2020. Revisiting Few-sample BERT Fine-tuning.
32. Perez et al. 2021. True Few-Shot Learning with Language Models.
33. Liu et al. 2019. RoBERTa: A Robustly Optimized BERT Pretraining Approach.
34. Reimers et al. 2019. Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks.
Acknowledgments
Thanks Danqi Chen and Adam Fisch for proofreading the article and their helpful comments!