Press "Enter" to skip to content

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).

In-context learning: 一种新的meta-learning方式

本文开头将 GPT-3 的成功归于两个设计:prompt和demonstration(或in-context learning),接下来讲in-context learning。由于 GPT-3 的参数没有针对下游任务进行微调,因此它必须以另一种方式“学习”新任务——通过上下文(context)。
GPT-3 通过上下文中的demonstration“学习”新任务(Brown等人, 2020).

如上图所示,GPT-3 简单地将训练集中的一些随机样本与实际查询(query,在本示例中为“cheese ⇒”)连接起来,而且由于预训练模型已经学会了从上下文中捕获模式,并且Transformers 的 self-attention 使这些实例之间可以逐token进行比较,in-context learning的效果出奇地好。GPT-3 论文将其归为“(meta-learning)”,认为在阅读大量无监督文本后,语言模型可以“培养广泛的技能和模式识别的能力”。作者认为在预训练期间“有时会在单个序列中嵌入重复的子任务”,类似于in-context learning的范式。后续工作进一步完善了使用demonstration的方式:Gao等人(2021)Liu 等人(2021)认为不应该随机抽取一些样本,采用和查询近似的demonstration可以显着提高性能;Lu等人(2021)表明,即使是demonstration的顺序也很重要,并提出了一种确定“最佳”顺序的方法。

虽然in-context learning只有在不能微调模型时才是“必要”的,并且当训练样例数量增加时很难泛化(因为模型的输入长度有限),研究如何更好地使用demonstration(即如何进一步压缩 LM 学到的“元知识”)以及哪些预训练目标和数据可以提高in-context 能力,可能会进一步帮助我们了解预训练模型的内部工作机制。

校准语言模型

 

prompting很赞,但它也会从预训练语料库带来bias。例如,在零样本情感分类设置中,给定“N/A”作为输入,GPT-3 倾向于预测为“positive”而不是“negative”,而本应该分配50/50的概率给这两个相反的标签(赵等人,2021 )。另一个问题是同一对象的不同表示(例如,“computer”和“PC”)可能会竞争概率质量,导致任务标签上的分布不理想(Holtzman 等,2021)。赵等人(2021)和Holtzman 等人(2021)给出的解决方案是校准(calibration):对带偏token进行补偿,把他们校准为无偏状态。

什幺是真正的few-shot setting?

关于few-shot的设置本身有很多争议:众所周知,对小数据集的微调可能有很大的不稳定性(Dodge 等人,2020 ;Zhang 等人,2021 ),并且数据不同的分割可能会急剧影响性能。以前的工作采用了不同的设置,但要考虑到小样本巨大的variance,需要多次采样进行小样本数据划分,以及用不同种子进行多次试验,来提供一个严格可信的小样本评估(这就是我们在工作中所做的)。另一个经常被忽视的问题是,我们不能在few-shot的情况下假定有一个大的验证集。为了解决这个问题,Schick 和 Schütze(2021)不使用验证集并采用固定的超参数(类似于“shooting in the dark”,可能会产生一些不直观的结果)。在我们的工作中,我们采样了和训练集一样大的数据作为few-shot验证集,这样我们可以调超参,同时保证“few-shot”。

在最近的一篇论文中,Perez等人(2021)认为先前的工作通过或多或少地采用了许多保留样本用于超参选择、模型开发或prompt设计,所以高估了 LM 的小样本性能。因此,他们提倡“真正的小样本学习”设置。这和我们的观点一致,即只能假定有很少的验证集样本。然而,在现实世界中,很难实现“真正的小样本学习”,因为需要足够数量的保留样本来验证模型至少在一两个任务上是有效的。因此只要模型的设计可以很好地泛化到其他的小样本任务(真正的小样本),它就是一个很好的小样本模型。在我们的工作中,我们将 SST-2 和 SNLI 用于pilot experiment,实验表明我们的方法可以很好地推广到其他 13 个 NLU 任务。

介绍 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 进行微调,包括:

 

基于p rompt 的微调 ,以及 自动生成prompt 的新方法;

 

一种 动态地、有选择地 在上下文中引入 demonstration   的方法。

 

我们在严格的小样本设置(如上文所述)中评估 LM-BFF,实验表明 LM-BFF 的效果显着优于标准微调(在 SNLI 上提升 30% ,平均提升 11%)。代码见本文开头处。

 

基于Prompt的微调

 

上文已经讨论过什幺是基于 prompt 的微调—— 用模板(templates)将 任务制定为一个  (masked) language modeling  问题,并将每个类的预期输出设 置为标签词( label words)。我们 设计了以下模板和标签词。

 

实验中使用的人工 prompt (模板 + 标签词)。<S1> 和 <S2> 代表输入的句子。

 

然而,人工制作好的 prompt 可能比较tricky,需要领域知识,而且结果可能不直观。在下表中,我们展示了小样本模型对 prompt 中的小扰动的敏感度。

 

不同模板和标签词的影响。采用 RoBERTa-large (  Liu et al., 2019  ) ,每个类 16 个训练/验证样本。

 

我们观察到,如果模板是固定的,标签词与“ semantic classes ”匹配得越好,结果就越好。例如,对于 SST-2, great/terrible > good/bad > cat/dog > dot/cat > terrible/good (虽然不清楚为什幺 RoBERTa 认为:cat: 比:dog:更积极)。从 SNLI 中,可以看到如果我们将 [MASK] 放在末尾,或交换两个句子,可能会导致性能下降 10% 以上。这促使我们去寻找一种比人工 prompt 更好的方式——自动 prompt 搜索。

 

自动Prompt搜索

 

我们将自动prompt搜索分为两部分——自动标签词 搜索 和模板 搜索 。

 

对于自动标签词搜索,我们的目标是找到一组可以最大化验证集上性能的标签词, 给定一个人工模板 ,一种简单的方法是暴力搜索所有单词组合。但这样不太可行,因为搜索空间是类数量的指数级别,并且该方法容易导致伪相关和过拟合。我们的做法是,首先为每个类
构建一个候选词集
:用
表示类
的所有训练样本,给定模板和
, 我们找到能最大化的  [MASK] 处的 LM 概率的 top-k个词 。然后我们枚举
的所有单词组合,并找到最大化 训练集上 的零样本准确率的 top-n 组合。最后,我们对所有 n 个组合进行微调,并根据验证集上的表现对它们重排序( rerank )。我们发现剪枝空间中的暴力搜索和微调重排序对于提升最终性能都很有帮助。

 

 

我们的模板生成方法

 

对于自动模板搜索,目标是相似的:在 给定人工标签词的情况下 ,找到使验证集上准确率最高的模板。我们 使用 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搜索结果

 

引入Demonstration

 

前文已经介绍了 GPT-3 如何在上下文中使用demonstration:从训练集中随机抽样并以任意顺序连接它们,这样其实在很多方面都会有问题:预训练的 LM 的输入长度是有限的,尤其是对于较小的(通常是512)来说;如果样本以随机顺序连接,则很难得到有意义的pattern;与输入实例相差太大的 demonstration 可能会没有帮助,甚至会引起混淆。因此,我们提出了一种 动态地、有选择地 方式来引入demonstration:

 

在训练和推理期间,我们从训练集中为每个类随机抽取一个样本并将它们连接起来(本文中图一给出了一个示例)。对于推理,我们对抽取多组demonstration,并在最后对结果进行集成。

 

我们只采样与输入密切相关的demonstration。例如,如果输入是电影评论,就对电影评论进行采样,而不是餐厅评论。我们采用 SBERT ( Reimers and Gurevych, 2019 ) 对句子进行编码,计算输入与训练集中所有样本之间的余弦相似度,然后仅从前 50% 的样本中进行采样。

 

实验结果

 

我们的主要结果(RoBERTa-large;每类有 16 个训练样本;结果(标准差)是在五个split的平均)。“GPT-3” in-context learning :使用 GPT-3 的 demonstration ,但仍采用固定的 RoBERTa-large 模型。 FT: fine-tuning; man: manual; auto: automatic templates

 

上表显示了我们的主要实验结果。主要结论如下:

 

即使在零样本情况下,使用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 。

 

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. 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!

 

原文地址:https://gaotianyu.xyz/prompting

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注