从 2017-2019 年开始,NLP 模型发生了翻天覆地的变化,这种全监督范式发挥的作用越来越小。具体而言,研究重点开始转向预训练、微调范式。在这一范式下,一个具有固定架构的模型通过预训练作为语言模型(LM),用来预测观测到的文本数据的概率。由于训练 LM 所需的原始文本数据需要足够丰富,因此,这些 LM 都是在比较大的数据集上训练完成。之后,通过引入额外的参数,并使用特定任务的目标函数对模型进行微调,将预训练 LM 适应于不同的下游任务。在这种范式下,研究重点转向了目标工程,设计在预训练和微调阶段使用的训练目标(损失函数)。
当前我们正处于第二次巨变中,「预训练、微调」过程被称为「预训练、prompt 和预测」的过程所取代。在这种范式中,不是通过目标工程使预训练的语言模型(LM)适应下游任务,而是重新形式化(Reformulate)下游任务,使其看起来更像是在文本 prompt 的帮助下在原始 LM 训练期间解决的任务。通过这种方式,选择适当的 prompt,该方法可以操纵模型的行为,以便预训练的 LM 本身可以用于预测所需的输出,有时甚至无需任何额外的特定任务训练。这种方法的优点是给定一组合适的 prompt,以完全无监督的方式训练的单个 LM 就能够用于解决大量任务。然而该方法也存在一个问题——这种方法引入了 prompt 挖掘工程的必要性,即需要找出最合适的 prompt 来让 LM 解决面临的任务。
该综述研究试图通过提供 prompting 方法的概述和形式化定义,以及使用这些 prompt 的预训练语言模型的概述,来梳理这一迅速发展领域的当前知识状态。然后该论文对 prompt 方法进行了深入的讨论,包括 prompt 工程、answer 工程等基础和多 prompt 学习方法、prompt 相关的训练方法等更高级的概念。
然后,该研究列出了已有的基于 prompt 学习方法的多种应用,并探讨了不同应用场景中如何选择合适的训练方法。最后,该研究尝试在研究生态系统中定位 prompt 方法的当前状态,并与其他研究领域建立联系。此外,该研究提出一些可能适合进一步研究的挑战性问题,并针对当前研究趋势进行了分析。
02
prompting 的正确描述
在传统的用于 NLP 任务的监督学习系统中,输入 x 通常是文本数据,并基于模型 P(y|x; θ) 预测输出 y。但是,监督学习面临的一个主要问题是,即为了训练模型 P(y|x; θ),必须要有用于训练任务的监督数据,但找到这种适用数据是比较困难的。
在 NLP 中,基于 Prompt 的学习方法试图通过学习 LM 来规避这一问题,该 LM 对文本 x 本身的概率 P(x; θ) 进行建模并使用该概率来预测 y,从而减少或消除了训练模型对大型监督数据集的需求。
本节中研究者对最基本的 Prompt 形式进行了数学描述,其中包含许多有关 Prompt 的工作,并且可以扩展到其他内容。具体来说,基础 Prompt 分三步预测得分最高的 ^y,即 prompt 添加、answer 搜索和 answer 映射。
Prompt 的形式
Prompt 主要有两种主要类型:
填充文本字符串空白的完形填空(Cloze)prompt,和
用于延续字符串前缀的前缀 (Prefix) prompt。
选择哪一个取决于任务和用于解决任务的模型。一般来说,对于有关生成的任务或使用标准自回归 LM 解决的任务,前缀 prompt 往往更有帮助,因为它们与模型从左到右的性质刚好吻合。对于使用掩码 (Mask) LM 解决的任务(比如,BERT),完形填空 prompt 则非常合适,因为它们与预训练任务的形式非常匹配。全文本重建模型则可以与完形填空 prompt 或前缀 prompt 一起使用。最后,对于一些涉及多个输入的任务,例如文本对分类,prompt 模板必须包含至少两个输入的空间。