Prompt Learning: ChatGPT 也在用的 NLP 新范式
编者按:自 GPT-3 以来,大语言模型进入了新的训练范式,即“预训练模型+Promp learning”。在这一新的范式下,大语言模型呈现出惊人的 zero-shot 和 few-shot 能力,使用较少的训练数据来适应新的任务形式。最近火爆出圈的 ChatGPT 是利用这一方式。
简单理解 Prompt learning,其核心就是以特定的模板,将下游任务的数据转成自然语言形式,充分挖掘预训练模型本身的能力,以适应不同的下游任务。
本期 IDP Inspiration,我们将和大家一起深入走进 Prompt learning 技术,了解其发展进展。
以下是译文,Enjoy!
作者 | Tianyu Gao, Princeton University 编译 | 岳扬
从 BERT(Devlin et al., 2019)[1]开始,在下游应用上用 task-specific heads 对预训练语言模型(LMs)进行微调已经成为 NLP 的标准做法。然而,具有 175B 参数的 GPT-3 模型(Brown et al., 2020)[2]为下游应用带来了使用 LMs 的新方式:GPT-3 利用自然语言提示词(prompt)和任务演示(task demonstrations)作为上下文(context),只使用少量的例子就能很好地处理各种任务,并且不需要更新底层模型中的参数。GPT-3 的模型规模很大是其成功的一个重要因素,而 提示词(prompts) 和 演示(demonstrations)也给我们提供了关于如何更好地使用语言模型的新见解。
所以什么是提示词 (prompt)?
**它是插入到输入示例中的一段文字,能够将原始任务(original task)表述为语言模型问题 (language modeling problem)。**例如,假如我们要对下面这条电影评论“不值得看(No reason to watch)”进行分类,我们可以将 prompt“It was”插入到句子中,得到“No reason to watch. It was ____”。很自然的,语言模型产生“terrible(可怕)”的概率比“great(伟大)”的概率高。本文会介绍大型语言模型中 prompt 的最新进展。
在 GPT-3 发布后,出现了许多与 prompt 有关的论文,其中许多论文都讨论了基于提示词的学习(prompt-based learning)用于中等规模的预训练模型,如 BERT(BERT-base 有 110M 参数,比最大的 GPT-3 小 1000 倍)。
在这篇博文中,我将概述最近的 prompt-based 方法和我的看法。
Why Prompts?
以情感分类任务为例,对预训练、标准的微调和基于提示的微调进行了说明(from Gao et al., 2021)
在传统的“预训练和微调(fine-tuning)”模式中,预训练阶段和下游任务之间存在巨大差距。
首先是目标不同。对于下游任务,通常需要引入新的参数,例如对于一个 BERT 大型模型和一个二元分类任务,需要额外的 1,024 x 2 个参数。
另一方面,通过使用 prompt,下游任务有可能采用与预训练目标相同的格式(如上图所示),而不需要引入新的参数。对于分类任务,只需要设计一个模板(例如“It was”)和预期的文本(也称为标签词,例如图中的正面标签为“great”,负面标签为“terrible”)。缩小两个阶段之间的差距可以使在特定任务上部署预训练模型变得更加容易,特别是在只有少量新任务训练案例的情况下,有效地微调预训练模型和新任务的特定参数是很困难的。Scao 和 Rush(2021)[3]的研究表明,一个 prompt 可能抵得上 100 个常规数据点,这表明 prompt 可以带来采样效率的巨大提升。
在对 prompt 的研究中,有两种不同的范式,它们有着不同的观点。受 PET 论文(Schick and Schütze,2021a,b)[4]的启发,基于 prompt 的微调(关键点是仍然需要进一步优化参数)被认为是对小型语言模型(这里说的小型是指数百万而不是数十亿的参数,如 BERT 或 RoBERTa)实现更好的小样本学习的途径;对于超大型模型,如 175B 参数的 GPT-3 和 11B 参数的 T5(Raffel et al., 2020)[5],微调它们是困难的(这只是我的猜测,我从来没有机会这样做),而且成本很高,因此以人们期望通过不同的 prompt(无论是离散提示/discrete prompt)还是软提示/soft)来固定它们的参数并将它们应用于不同的任务。
离散提示词 Discrete prompts
使用 prompt 进行预训练模型的研究最早可以追溯到 GPT-1/2(Radford et al., 2018, 2019)[6]。这些研究表明,通过设计适当的 prompt,语言模型(LMs)可以在情感分类和阅读理解任务中实现和零样本学习一样的表现。
随后,Petroni 等人(2019)[7];Davison 等人(2019)[8];Jiang 等人(2020)[9];Talmor 等人(2020)[10]探索了如何利用 prompt 从 LMs 中挖掘事实和常识性知识(factual and commonsense knowledge)。
在 GPT-3 采用 prompt 和固定参数之后,基于 prompt 的方法被引入到较小的 LMs 中(Schick 和 Schütze,2021a,b[11];我们的工作 LM-BFF,Gao 等人,2021[12])。
这些方法与 GPT-3 的不同之处在于,它们采用了双向掩码(bidirectional masked)LMs,而不是单向(unidirectional)LMs,并对完整的模型进行微调。最近的几篇论文也沿用了这一思路,调整了任务目标(Tam 等人,2021[13])或以统一的形式制定任务,如问题回答(Zhong 等人,2021[14])或文本蕴涵(Wang 等人,2021[15])。
在所有这些模型中,prompt 都是自然语言,由离散的词汇标记组成。综合研究不同变体的结果,Logan 等人(2021)[16]表明,当采用基于 prompt 的微调方法(而不是冻结所有参数)时,模型可以获得比标准微调更好的性能(但好的提示仍然会产生明显的差异)。而只调整部分模型参数——例如,采用最近提出的 bias tuning method(Ben-Zaken 等人,2021)在 few-shot setting 中与 full model fine-tuning 相当。
大多数工作都需要人工设计的 prompt,提示工程是不简单的,因为一个小的扰动就会极大地影响模型的性能,而创建一个完美的 prompt 需要了解 LMs 的内部工作原理和不断试错。
除了人工设计的 prompt,人们还可以自动生成或优化 prompt。Guo 等人在 2021 年展示了一种 soft Q-learning 方法,在生成 prompt 时效果很好。
AutoPrompt(Shin et al., 2020)[17]提议采取基于梯度的搜索(该想法来自 Wallace et al., 2019[18],旨在搜索一个通用的对抗性触发器,使模型产生特定的预测),为特定任务找出最佳 prompt。AutoPrompt 的设置是不同的,因为它固定了模型:它假设所有的东西都被编码在预训练的模型中,我们需要的只是”prompt”出来;另一个原因是,AutoPrompt 的目标也是 LAMA(LAnguage Model Analysis)(Petroni et al., 2019[19]),这是一种知识探测任务,它被要求不触及模型参数。
下面是一个用于情感分类的 AutoPrompt 的例子:
An illustration of AutoPrompt (Shin et al., 2020)
搜索到的 templates 大大改善了 LAMA 的性能;它们在使用完整数据集的情感分类和自然语言推理任务中也取得了十分惊人的准确性(不过仍然低于微调范本)。查看搜索到的 discrete(但不再是自然语言)prompt,可以找到对一些“trigger tokens“的解释,但很多只是特殊情况。
目前还不清楚,AutoPrompt 是否真的能帮助 LMs 回忆起里面的 ”knowledge“,或者它只是优化的另一种方式,在预训练模型中从“彩票”中挑选出“中奖彩票”(关于彩票假说,见 Frankle 和 Carbin,2019[20])。
软提示/连续提示 Soft prompts
我们真的需要在 prompt 中使用离散单词吗?
既然 AutoPrompt 已经做了基于梯度的提示搜索,为什么不从 discrete tokens 转向连续的“soft prompts”?例如,Zhong 等人(2021)[21]和 Qin、Eisner(2021)[22]提出将 soft prompts 用于知识探测任务(LAMA 等),并取得了比 discrete prompts 更大的提升。这个想法非常简单:只是在输入序列中放入一些随机向量(不与词汇中的特定词嵌入相联系),并对其进行调整,而预训练模型的其他部分则固定不变。
还有一些人是将 soft prompts 部署在知识探测任务之外。Li 和 Liang(2021)[23]将这一想法扩展到了生成式任务(generation tasks),并表明它的性能提升与进行微调相当,但是只调整了 0.1%的参数。Han 等人(2021)[24]将 soft prompts 与 manual templates 结合起来,在关系抽取(关系抽取)方面取得了极佳的性能。
至今为止,我所看到的关于 soft prompts 最全面的研究来自于 Lester 等人(2021)[25]:他们在 T5 上应用了 soft prompts,并表明通过调整 prompt(只占总参数的一小部分),T5 可以在 NLU(自然语言理解)任务中取得与微调整个模型相同的性能。我很喜欢这篇论文,因为它进行了充分的 ablation study(消融实验),并展示了 soft prompts 的几个关键的经验选择,包括从词嵌入初始化,足够数量的 soft prompt tokens,以及一个 aligned pre-training objective。除了参数效率,Lester 等人(2021)[25]还证明了 soft prompts 提供了比全模型微调更好的可传递性。
让我们回顾一下 soft prompts:它的效果非常好,当你不能(探测任务)或不愿(模型太大,或你希望有一个适用于所有任务的通用模型)触摸模型的参数时,它特别有效。
调整 soft prompts 与基于 prompt 的微调有很大不同,后者允许人们优化完整的模型,更重要的是,比标准的微调更适合处理小样本案例。
与人工设计的不同,AutoPrompt 在某些情况下不能很好地工作,据我所知,没有任何 soft prompts 论文认为所有情况下它都能取得极好的性能(尽管 Liu 等人(2021)[26]通过从 discrete manual prompts 开始,对整个模型进行微调,极端情况下也出现了令人满意的结果)。
另外,正如 Lester 等人(2021)[25]所证明的,在使用超过 100 亿个参数的预训练模型之前,soft prompts 从未在 SuperGLUE 上实现与全微调相同的性能。我认为未来值得研究的是如何进一步推动 soft prompts 在极端情况和较小的语言模型中更有效地工作。
GPT-3 (blue) vs full model fine-tuning (orange) vs soft-prompt tuning (green). Credit to Lester et al. (2021).
上下文学习 In-context learning:新型的元学习
在本文的开头,我把 GPT-3 的成功归功于两个模型设计:prompts 和 demonstrations(或 in-context learning),但在这一节之前我还没有谈到 in-context learning。由于 GPT-3 的参数没有在下游任务中进行微调,它必须以另一种方式——通过 context(上下文) ”学习”新任务。
GPT-3 "learns" about new tasks through demonstrations in the context (Brown et al., 2020).
如上图所示,GPT-3 只是将一些随机训练样本与实际查询(本例中为 ”cheese⇒“)串联起来,由于预训练的模型已经学会了从上下文中捕捉 patterns,而且 Transformer 的自注意力机制允许在这些实例中逐一进 token 比较,因此上下文中的学习效果出奇地好。GPT-3 论文称其为”元学习 meta-learning”,认为在阅读大量无监督的文本后,语言模型可以“训练出多样的技能和 patterns 识别能力“。
作者假设在预训练期间有时会有重复的子任务嵌入到一个序列中,类似于上下文学习(in-context learning)的范式。后续的工作进一步完善了使用 demonstrations 的方式。Gao et al., 2021[12]; Liu et al. (2021)[27] 说,与其随机抽取一些例子,不如采取在与查询相似的语境中 demonstrations,可以大幅提高性能;Lu et al. (2021) 表明,demonstrations 的顺序也很重要,并提出了一种确定”最佳”顺序的方法。
虽然 in-context learning 只有在无法调整模型时才是必要的,并且当训练实例的数量增加时很难进行泛化(因为模型的输入长度是有限的),但研究如何更好地使用 demonstrations(即如何进一摄取 LMs 学到的”meta-knowledge”)以及哪些预训练目标和数据可以提升 in-context 能力,可能会进一步帮助我们了解预训练 LMs 的内部运行原理。
校准语言模型 Calibrating language models
Prompting 是非常有效的,但它也可能会引入来自预训练语料的偏见。例如,在零样本情感分类设置中,如果输入为“N/A”,GPT-3 可能会错误地将其认为是“正面”而不是“负面”,而实际上这两个标签应该被分配相等的概率(Zhao 等人,2021)[29]。
另外,同一个物体的不同词语描述(如“computer”和“PC”)可能会互相竞争概率分配,导致任务标签分布不理想(Holtzman 等人,2021)[30]。为了解决这些问题,Zhao 等人(2021)[29]和 Holtzman 等人(2021)[30]提出了校准(Calibrating)的解决方案,即通过为有偏差的 token 添加补偿来纠正偏差,使其变得无偏差。
什么是正确的小样本设置(few-shot setting)?
关于小样本设置(few-shot setting)本身有很多讨论:在小数据集上进行微调会出现不稳定的情况(Dodge et al., 2020[31]; Zhang et al., 2021[32]),不同的数据分割可能会对性能产生很大的影响。
以前的工作中采取了各种设置,但为了考虑到 few-shot 的巨大差异,需要对小样本数据的数据分割进行多次采样和使用不同 seeds 进行多次试验,以进行严格的小样本评估(这就是我们以前工作中的做法)。
但是有一个经常被忽视的问题是,在只有几张照片的情况下,我们不能假设一个大的 development set。为了解决这个问题,Schick 和 Schütze(2021)[33]没有采用 development set,而是采用固定的超参数(在这样一个充满变化的环境中,这类似于“在黑暗中射击”,可能会产生不直观的结果),而在我们的工作中,我们对一个与训练集相同大小的小样本 development set 进行采样,所以我们可以在保持小样本的同时调整超参数。
Perez 等人(2021 年)[34]认为,先前的工作高估了 LMs 的小样本性能,因为他们或多或少地采取了许多已有的例子来进行超参数调整、模型开发或 prompt 设计,他们提倡 “true few-shot learning” 设置。这与我们的观点是一致的,即你只能假设小样本的 dev 案例。
然而,在现实世界中,我们很难实现 ”真正的小样本学习“,因为你需要足够多的例子来验证你的模型至少在一个或两个任务上是有效的。只要设计的模型能够很好地泛化到其他的小样本任务,它就是一个好的小样本模型。在我们的工作中,我们用 SST-2 和 SNLI 进行实验,表明我们的方法可以很好地推广到其他 13 种 NLU 任务。(对于这一部分技术创新感兴趣的小伙伴,可以关注 ACL’21 paper, "Making Pre-trained Language Models Better Few-shot Learners")。
参考资料
https://arxiv.org/abs/2105.11447
https://arxiv.org/abs/2005.14165
https://arxiv.org/abs/2103.08493
https://arxiv.org/abs/2001.07676
https://arxiv.org/abs/1910.10683
https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
https://arxiv.org/abs/1909.01066
https://arxiv.org/abs/1909.00505
https://arxiv.org/abs/1911.12543
https://arxiv.org/abs/1912.13283
https://arxiv.org/abs/2001.07676
https://arxiv.org/abs/2012.15723
https://arxiv.org/abs/2103.11955
https://arxiv.org/abs/2104.04670
https://arxiv.org/abs/2104.14690
https://arxiv.org/pdf/1909.04164.pdf
https://arxiv.org/abs/2010.15980
https://arxiv.org/abs/1908.07125
https://arxiv.org/abs/1909.01066
https://arxiv.org/abs/1803.03635
https://arxiv.org/abs/2104.05240
https://arxiv.org/abs/2104.06599
https://arxiv.org/abs/2101.00190
https://arxiv.org/abs/2105.11259
https://arxiv.org/abs/2104.08691
https://arxiv.org/abs/2103.10385
https://arxiv.org/abs/2101.06804
https://arxiv.org/abs/2104.08786
https://arxiv.org/abs/2102.09690
https://arxiv.org/abs/2104.08315
https://arxiv.org/abs/2002.06305
https://arxiv.org/abs/2006.05987
https://arxiv.org/abs/2009.07118
https://arxiv.org/abs/2105.11447
本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。(原文链接:https://thegradient.pub/prompting/)
版权声明: 本文为 InfoQ 作者【Baihai IDP】的原创文章。
原文链接:【http://xie.infoq.cn/article/d5a83b066d372ec64719af73e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论