作者简介:高天宇,普林斯顿大学博士,导师陈丹琦。本科就读于清华大学计算机系,本科期间即在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
在标准的“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)。
既然 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在小样本情况和较小的语言模型中更有效地工作,是我认为值得研究的地方。
校准语言模型
prompting很赞,但它也会从预训练语料库带来bias。例如,在零样本情感分类设置中,给定“N/A”作为输入,GPT-3 倾向于预测为“positive”而不是“negative”,而本应该分配50/50的概率给这两个相反的标签(赵等人,2021 )。另一个问题是同一对象的不同表示(例如,“computer”和“PC”)可能会竞争概率质量,导致任务标签上的分布不理想(Holtzman 等,2021)。赵等人(2021)和Holtzman 等人(2021)给出的解决方案是校准(calibration):对带偏token进行补偿,把他们校准为无偏状态。
最后介绍一下我们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的微调——用模板(templates)将任务制定为一个 (masked) language modeling 问题,并将每个类的预期输出设置为标签词( label words)。我们设计了以下模板和标签词。
然而,人工制作好的prompt可能比较tricky,需要领域知识,而且结果可能不直观。在下表中,我们展示了小样本模型对prompt中的小扰动的敏感度。
我们将自动prompt搜索分为两部分——自动标签词搜索和模板搜索。
对于自动标签词搜索,我们的目标是找到一组可以最大化验证集上性能的标签词,给定一个人工模板,一种简单的方法是暴力搜索所有单词组合。但这样不太可行,因为搜索空间是类数量的指数级别,并且该方法容易导致伪相关和过拟合。我们的做法是,首先为每个类
我们的模板生成方法
对于自动模板搜索,目标是相似的:在给定人工标签词的情况下,找到使验证集上准确率最高的模板。我们使用 T5 ,开箱即用,生成了许多候选模板,然后通过验证集表现对它们进行rerank。T5 是一个 seq-to-seq 模型,使用完形填空的目标进行了预训练,非常适合用来生成模板。以情感分类(上图)为例,我们将输入样本和对应的标签词连接起来,并在标签词周围插入<X>和<Y>(T5的mask tokens)。要注意,我们希望 T5 模型基于所有few-shot训练样本做条件生成,因此在每个位置,我们取所有示例的log likelihood之和(具体细节参考我们的论文)。最后,我们使用大宽度(100)的beam search来获取大量高质量的模板。
下表显示了我们的自动prompt搜索得到的一些例子。可以看到,对于自动模板搜索,大多数模板都非常适应上下文和手动标签词,尽管存在一些潜在的bias(例如,SNLI 模板中的“no”)。尽管大部分看起来很直观,标签词的结果还是包含一些奇怪的异常(例如,SNLI 中entailment类里的“Hi”)。
自动prompt搜索结果
前文已经介绍了 GPT-3 如何在上下文中使用demonstration:从训练集中随机抽样并以任意顺序连接它们,这样其实在很多方面都会有问题:预训练的 LM 的输入长度是有限的,尤其是对于较小的(通常是512)来说;如果样本以随机顺序连接,则很难得到有意义的pattern;与输入实例相差太大的demonstration可能会没有帮助,甚至会引起混淆。因此,我们提出了一种动态地、有选择地方式来引入demonstration:
在训练和推理期间,我们从训练集中为每个类随机抽取一个样本并将它们连接起来(本文中图一给出了一个示例)。对于推理,我们对抽取多组demonstration,并在最后对结果进行集成。
我们只采样与输入密切相关的demonstration。例如,如果输入是电影评论,就对电影评论进行采样,而不是餐厅评论。我们采用 SBERT ( Reimers and Gurevych, 2019 ) 对句子进行编码,计算输入与训练集中所有样本之间的余弦相似度,然后仅从前 50% 的样本中进行采样。
上表显示了我们的主要实验结果。主要结论如下:
即使在零样本情况下,使用prompt的效果也很好。而GPT-3 模式的学习并没有持续改进零样本模型的结果,这表明微调还是必要的。
无论人工还是自动,基于prompt的微调比标准微调要好得多。在许多任务上,自动模板可以比手动模板获得更好的结果。
引入demonstration进一步带来了显著的提升,这表明即使进行了微调,在上下文中添加demonstration也可以帮助few-shot任务。
我们的论文中还有很多有趣的实验,展示了自动prompt生成如何与模型集成相结合,以及不同的demonstration和自动prompt策略如何影响性能。最后,我们展示了随着训练样本增加, 标准微调和 LM-BFF 之间的对比和变化趋势。如图所示,LM-BFF 在 SST-2 等简单任务上只用 32 个训练样例性能就几乎饱和,而在 SNLI 等更难的任务上,它相比持续微调有明显的优势,直到接近 1千个训练样本时两者的表现才相近。
标准微调 vs LM-BFF随着K增加的表现 (# training examples per class).
当然,我们的方法也有局限性。准确率还有很大的提升空间,就像标准的微调一样,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。
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.
Thanks Danqi Chen and Adam Fisch for proofreading the article and their helpful comments!
联系客服