Promt 提示词工程发展史的简单梳理
Promt 提示词工程发展史的简单梳理
Promt 提示词工程发展史的简单梳理
一、概述
1、prompt的含义
prompt顾名思义就是“提示”的意思,应该有人玩过你画我猜这个游戏吧,对方根据一个词语画一幅画,我们来猜他画的是什么,因为有太多灵魂画手了,画风清奇,或者你们没有心有灵犀,根本就不好猜啊!这时候屏幕上会出现一些提示词比如3个字,水果,那岂不是好猜一点了嘛,毕竟3个字的水果也不多呀。看到了吧,这就是prompt的魅力,让我们心有灵犀一点通!

摘要
本文介绍了一种新颖的自然语言处理模式,称为“基于提示的学习”(prompt-based learning)。
- 与常规的监督学习不同,传统方法训练模型接收输入 x x x,并预测输出 y y y为 P ( y ∣ x ) P(y \mid x) P(y∣x)。
- 基于提示的学习是直接对文本概率进行建模的语言模型。为了利用这些模型执行预测任务,通过使用模板将原始输入 x x x转换为包含若干未填充槽的文本字符串提示 x ′ x' x′,然后利用语言模型的概率来填充这些未填充的信息,从而获得最终的字符串 x ^ \hat{x} x^,并从中导出最终的输出 y y y。
该框架之所以强大且具有吸引力,原因包括:
- 它支持在大量原始文本上对语言模型进行预训练;
- 通过定义新的提示函数,该模型能够执行小样本(few-shot)甚至零样本(zero-shot)学习,以适应标记数据稀缺或全新的场景。
3. NLP的几次重大变化
3.1 范式一:非神经网络时代的完全监督学习(特征工程)
完全监督学习指的是任务特定模型仅在目标任务的输入-输出示例数据集上进行训练,这种方法在许多机器学习任务中,包括自然语言处理(NLP)中,长期以来都发挥着核心作用。
由于完全监督的数据集不足以学习高质量的模型,早期的NLP模型严重依赖于特征工程。NLP研究人员或工程师利用其领域知识从原始数据中定义和提取显著特征,并为模型提供适当的归纳偏差,以便从这些有限的数据中学习。
3.2 范式二:基于神经网络的完全监督学习(架构工程)
随着NLP神经网络模型的出现,在对模型本身进行训练的同时,学习了显著的特征,因此重点转移到了架构工程。其中,通过设计有助于学习此类特征的合适网络架构来提供感应偏差。
3.3 范式三:预训练,精调范式(目标工程)
然而,从2017-2019年,NLP模型的学习发生了巨大变化,这种完全监督的范式现在发挥着越来越小的作用。具体而言,标准转向了预训练和微调范式。在此范式中,具有固定体系结构的模型被预先训练为语言模型(LM),预测观察到的文本数据的概率。
由于训练LMs所需的原始文本数据非常丰富,因此可以在大型数据集上训练这些LMs,学习建模语言的健壮通用特性。然后,通过引入额外的参数并使用特定于任务的目标函数对其进行微调,使上述预先训练的LM适应不同的下游任务。在这一范式中,重点主要转向目标工程,设计训练前和微调阶段使用的训练目标。例如,Zhang等人(2020a)表明,引入从文档中预测显著句子的损失函数将为文本摘要提供更好的预训练模型。
值得注意的是,预先训练的LM的主体通常经过微调,以使其更适合解决下游任务。
3.4 范式四:预训练,提示,预测范式(Prompt工程)
截至2021年撰写该论文时,我们正处于第二次重大变革的中间,“pre-train, fine-tune”程序被我们称为“pre-train, prompt, and predict”的程序所取代。在这种范式中:
- 不是通过目标工程使预先训练的LMs适应下游任务;
- 而是在文本提示的帮助下重新制定下游任务,使其看起来更像原始LM训练期间解决的任务;
例如:
- 当识别社交媒体帖子的情绪时,“我今天没赶上公共汽车。”,我们可以继续提示“我感觉到_”,并要求LM用一个带感情的词来填补空白。
- 或者,如果我们选择提示“英语:我今天没赶上公共汽车。法语:_”,LM可能可以用法语翻译来填补空白。
通过这种方式,通过选择适当的提示,我们可以操纵模型行为,以便预先训练的LM本身可以用于预测所需的输出,有时甚至不需要任何额外的特定任务训练。
- 这种方法的优点是,在给出一套适当提示的情况下,以完全无监督的方式训练的单个LM可用于解决大量任务。
- 然而,有一个陷阱:这种方法引入了即时工程的必要性,即找到最合适的提示,以允许LM解决手头的任务。
表1:NLP中的四种范式。“Task Relation”列显示了语言模型(LM)和其他NLP任务(CLS:分类、标记:序列标记、GEN:文本生成)之间的关系。虚线表示可以通过共享预训练模型的参数来连接不同的任务。“LM→Task”表示使LMs(目标)适应下游任务,而“Task”→LM”表示将下游任务调整到LMs。

二、对提示(Prompting)的正式描述
1. NLP中的监督学习
在传统的NLP监督学习系统中,获取输入 x x x,通常是文本,并基于模型 P ( y ∣ x ; θ ) P(y \mid x; \theta) P(y∣x;θ)预测输出 y y y。 y y y可以是标签、文本或其他各种输出。为了学习该模型的参数 θ \theta θ,使用包含输入和输出对的数据集,并训练一个模型来预测该条件概率。例如:
- 首先,文本分类采用输入文本 x x x,并从固定标签集 Y \mathcal{Y} Y,预测标签 y y y。举个例子,情感分析输入 x x x="我喜欢这部电影。"并预测标签 y = + + y=++ y=++(标签集 y = { + + 、 + 、 ∼ 、 − 、 − − } y=\{++、+、\sim、-、--\} y={++、+、∼、−、−−})。
- 其次,条件文本生成采用输入 x x x并生成另一个文本 y y y。机器翻译就是一个例子,其中输入是一种语言的文本,例如芬兰语 x x x="Hyv~a huomenta"输出为英语 y = y= y=“Good morning”。
2. 提示(Prompting)
监督学习的主要问题是,为了训练模型 P ( y ∣ x ; θ ) P(y \mid x; \theta) P(y∣x;θ),有必要为任务提供监督数据,而对于许多任务,这些数据是无法大量找到的。
NLP基于提示(Prompt)的学习方法试图通过学习建模文本 x x x自身概率 P ( x ; θ ) P(x; \theta) P(x;θ)的LM,并使用该概率预测 y y y,从而避免或减少对大型有监督数据集的需求,从而绕过这一问题。
在本节中,论文对最基本的prompting形式进行了数学描述,其中包括许多关于prompting的工作,还可以扩展到其他工作。具体而言,提示(prompting)在三个步骤中预测得分最高的 y ^ \hat{y} y^。
2.1 添加提示(Prompting)
在此步骤中,应用提示函数 f prompt ( ⋅ ) f_{\text{prompt}}(\cdot) fprompt(⋅)将输入文本 x x x修改为提示 x ′ = f prompt ( x ) x'=f_{\text{prompt}}(x) x′=fprompt(x)。包括两个步骤:
- 应用一个模板,这是一个文本字符串,有两个槽:一个输入槽[X]用于输入 X X X,另一个答案槽[Z]用于中间生成的答案文本 Z Z Z,该答案文本 Z Z Z稍后将映射到 y y y。
- 用输入文本 x x x填充槽[X]。
在情感分析中, x x x=“我喜欢这部电影。”,模板的形式可能是"[X]总体而言,这是一部[Z]电影"。然后, x ′ x' x′会变成“我喜欢这部电影。总的来说,这是一部[Z]电影。”给出了前面的示例。
在机器翻译的情况下,模板可以采用“Finnish: [X] English: [Z]”等形式,其中输入和答案的文本与指示语言的标题连接在一起。
表3有更多示例。

值得注意的是:
- 上面的提示(prompt)将在提示的中间或末尾为 z z z填充一个空槽。在下面的文本中,将第一种类型的提示称为完形填空提示(cloze prompt),而第二种类型的提示称为前缀提示(prefix prompt),其中输入文本完全位于 z z z之前。
- 在许多情况下,这些模板词不一定由自然语言标记组成;它们可以是虚拟词(例如,由数字ID表示),稍后会嵌入到连续空间中,一些提示方法甚至会直接生成连续向量。
- [X]槽的数量和[Z]槽的数量可以根据手头任务的需要灵活更改。
2.2 答案搜索
接下来,搜索得分最高的文本 z ^ \hat{z} z^,以最大化LM的得分。
我们首先将 Z Z Z定义为 z z z的一组允许值。对于生成型任务, Z \mathcal{Z} Z可以是整个语言的范围,或者在分类的情况下, Z \mathcal{Z} Z可以是语言中单词的一小部分,例如定义 Z = { \mathcal{Z}=\{ Z={“优秀”、“好”、“好”、“坏”、“可怕” } \} },以表示 Y = { + + 、 + 、 ∼ 、 − 、 − − } \mathcal{Y}=\{++、+、\sim、-、--\} Y={++、+、∼、−、−−}中的每个类。
表2:提示(prompting)方法的术语和符号

然后,定义一个函数 f fill ( x ′ , z ) f_{\text{fill}}(x', z) ffill(x′,z),用可能的答案 z z z填充提示 x ′ x' x′中的位置[Z]。我们将调用经过此过程的任何提示(prompt)作为填充提示(prompt)。特别是,如果提示中填写的是真实答案,将其称为已回答提示(answered prompt)(表2显示了一个示例)。最后,我们通过使用预先训练的LM P ( ⋅ ; θ ) P(\cdot; \theta) P(⋅;θ)计算相应填充提示的概率来搜索潜在答案集 z z z。
z ^ = search z ∈ Z P ( f fill ( x ′ , z ) ; θ ) \hat{z} = \text{search}_{z \in \mathcal{Z}} P(f_{\text{fill}}(x', z); \theta) z^=searchz∈ZP(ffill(x′,z);θ)
此搜索函数可以是搜索得分最高的输出的argmax搜索,也可以是根据LM的概率分布随机生成输出的采样。
2.3 答案映射
最后,想从得分最高的答案 z ^ \hat{z} z^到得分最高的输出 y ^ \hat{y} y^。在某些情况下,这很简单,因为答案本身就是输出(如在语言生成任务中,如翻译),但在其他情况下,多个答案可能会导致相同的输出。例如,可以使用多个不同的情感词(例如“优秀”、“神话般”、“美妙”)来表示单个类别(例如“+”),在这种情况下,有必要在搜索的答案和输出值之间进行映射。
3. 提示(Prompting)的设计注意事项
现在,我们已经有了基本的数学公式,我们将阐述一些基本的设计考虑因素,这些考虑因素将进入提示(prompting)方法,我们将在以下部分中详细阐述:
图1:提示(prompting)方法的类型

3.1 预训练模型选择
预训练模型选择:有多种预训练LMs可用于计算 P ( x ; θ ) P(x; \theta) P(x;θ)。在图1 §3中,介绍了预先训练的LMs,特别是对于解释其在提示(prompting)方法中的效用非常重要的维度。
3.2 提示设计(Prompt Engineering)
提示设计(Prompt Engineering):如果提示(prompt)指定了任务,那么选择合适的提示不仅对准确性有很大影响,而且对模型首先执行的任务也有很大影响。在图1 §4中,讨论了选择应使用哪个提示作为 f prompt ( x ) f_{\text{prompt}}(x) fprompt(x)的方法。
3.3 回答设计
回答设计:根据任务的不同,我们可能希望设计不同的 Z \mathcal{Z} Z,可能还有映射功能。在图1 §5中,讨论了不同的方法。
3.4 扩展范式
扩展范式:如上所述,上述方程式仅代表了为实现这种prompting而提出的各种底层框架中最简单的一种。在图1 §6中,论文讨论了扩展这一基本范式的方法,以进一步改进结果或适用性。
3.5 基于提示(prompt)的训练策略
基于提示(prompt)的训练策略:也有训练参数的方法,可以是提示、LM或两者兼有。在图1 §7中,论文总结了不同的策略,并详细介绍了它们的相对优势。
三、预训练的语言模型
鉴于预训练LMs在预训练和微调范式中对NLP产生的巨大影响。论文将从主要训练目标、文本噪声类型、辅助训练目标、注意力掩码、典型架构和首选应用场景等方面对其进行详细介绍。
1. 训练目标
预训练LM的主要训练目标几乎总是由预测文本 x x x概率的某种目标组成。
标准语言模型 – SLM 的目标正是这样做的,训练模型以优化训练语料库中文本的概率 P ( x ) P(x) P(x)。在这些情况下,文本通常以自回归的方式进行预测,一次一个地预测序列中的标记。这通常是从左到右进行的(如下所述),但也可以按其他顺序进行。
标准LM目标的一个流行替代方案是去噪目标,该目标将一些去噪函数 x ~ = f noise ( x ) \tilde{x} = f_{\text{noise}}(x) x~=fnoise(x)应用于输入句子,然后在给出带噪文本 P ( x ∣ x ~ ) P(x \mid \tilde{x}) P(x∣x~)的情况下,尝试预测原始输入句子。这些目标有两种常见的风格:
- 受损文本重建 – CTR 这些目标通过仅计算输入句子中有噪声部分的损失,将处理后的文本恢复到其未受损状态。
- 全文重构 – FTR 这些目标通过计算整个输入文本的损失来重构文本,无论输入文本是否有噪声。
预训练的LMs的主要训练目标在确定其对特定提示任务的适用性方面起着重要作用。例如:
- 从左到右的自回归LMs可能特别适合前缀提示(prefix prompts),
- 而重建目标可能更适合完形填空提示(cloze prompts)。
此外,使用标准LM和FTR目标训练的模型可能更适合文本生成任务,而其他任务(如分类)可以使用使用任何这些目标训练的模型来制定。
2、噪声类型
表4:不同噪声操作的详细示例

在基于重建的训练目标中,用于获取带噪文本 x ~ \tilde{x} x~的特定类型的损坏会影响学习算法的效果。此外,可以通过控制噪声类型来整合先验知识,例如,噪声可以集中在句子的实体上,这允许我们学习对实体具有特别高预测性能的预训练模型。论文介绍几种类型的增加噪声方式,并在表4中给出详细示例。
- 掩码(Masking):文本将在不同的级别上掩码遮罩,用一个特殊的token,如[MASK]替换一个token或多个tokens片段。值得注意的是,掩码可以是来自某些分布的随机掩码,也可以是专门设计用于引入先验知识的掩码,例如上述掩码实体的示例,以鼓励模型擅长预测实体。
- 替换(Replacement):替换与掩码相似,不同之处在于token或multi-token span不是用[MASK]替换,而是用另一个token或信息片段。
- 删除(Deletion):token或multi-token片段将从文本中删除,而无需添加[MASK]或任何其他token。此操作通常与FTR loss一起使用。
- 排列(Permutation):首先将文本分为不同的片段(tokens、次句子片段或句子),然后将这些片段排列成新的文本。
3. 表示的方向性
在理解预训练LMs及其差异时,应考虑的最后一个重要因素是表示计算的方向性。通常,有两种广泛使用的方法来计算此类表示:
-
从左到右(Left-to-Right),每个单词的表示都是根据单词本身和句子中之前的所有单词计算的。例如,如果我们有一个句子“这是一部好电影”,那么“好”一词的表示将根据前面的单词进行计算。在计算标准LM目标或计算FTR目标的输出端时,这种因式分解尤其广泛使用。
-
双向(Bidirectional),基于句子中的所有单词(包括当前单词左侧的单词)计算每个单词的表示形式。在上面的例子中,“好”会受到句子中所有单词的影响,甚至下面的“电影”。
除了上述两个最常见的方向外,还可以将这两种策略混合在一个模型中,或以随机排列的顺序对表示进行调节,尽管这些策略的使用不太广泛。值得注意的是,当在神经模型中实施这些策略时,这种调节通常通过注意力掩码来实现,它遮罩了注意力模型中的值,例如流行的Transformer架构(Vaswani et al., 2017)。图2显示了此类注意掩码的一些示例。
图2:三种流行的注意力掩码模式,其中下标 t t t表示第 t t t个时间步。 ( i , j ) (i, j) (i,j)处的阴影框表示允许注意力机制在输出时间步骤 j j j关注输入元素 i i i。白色框表示不允许注意力机制关注相应的 i i i和 j j j组合。

4. 典型的预训练方法
这里介绍了四种流行的预训练方法,它们来自目标、噪声函数和方向性的不同组合。
下面对其进行了描述,并在图3和表5中进行了总结。
图3:预训练LMs的典型范例

表5:预训练LMs的典型架构。x和y分别表示要编码和解码的文本。SLM:标准语言模型。CTR:损坏的文本重建。FTR:全文重建。†:编码器解码器体系结构通常只对解码器应用目标函数。

4.1 从左到右的语言模型
从左到右LMs(L2R LMs)是一种自回归LM,预测即将出现的单词,或为单词序列 x = x 1 , ⋯ , x n x = x_1, \cdots, x_n x=x1,⋯,xn分配概率 P ( x ) P(x) P(x)。通常使用从左到右的链式规则来分解概率: P ( x ) = P ( x 1 ) × ⋯ P ( x n ∣ x 1 ⋯ x n − 1 ) P(x) = P(x_1) \times \cdots P(x_n \mid x_1 \cdots x_{n-1}) P(x)=P(x1)×⋯P(xn∣x1⋯xn−1)。从左到右的LMs包括GPT-3和GPT-Neo等。
4.2 掩码语言模型
虽然自回归语言模型为文本的概率建模提供了一个强大的工具,但它们也有缺点,例如要求从左到右计算表示。当重点转移到为下游任务(如分类)生成最佳表示时,许多其他选项成为可能,并且通常更可取。在表征学习中广泛使用的一种流行的双向目标函数是掩码语言模型(MLM;Devlin et al. (2019)),该模型旨在根据包围的上下文预测掩码文本片段。例如, P ( x i ∣ x 1 , ⋯ , x i − 1 , x i + 1 , ⋯ , x n ) P(x_i \mid x_1, \cdots, x_{i-1}, x_{i+1}, \cdots, x_n) P(xi∣x1,⋯,xi−1,xi+1,⋯,xn)表示给定周围上下文的单词 x i x_i xi的概率。
使用MLM的代表性预训练模型包括:BERT(Devlin等人,2019)、ERNIE(Zhang等人,2019;Sun等人,2019b)和许多变体。
在提示方法中,MLM通常最适合于自然语言理解或分析任务(例如,文本分类、自然语言推理和抽取式问答)。这些任务通常相对容易被重新表述为完形填空问题,这与传统的训练目标是一致的。此外,在探索将prompt与微调相结合的方法时,MLMs是一种经过预训练的选择模型。
4.3 前缀和编码解码器
对于条件文本生成任务,如翻译和摘要,其中输入文本 x = x 1 , ⋯ , x n x = x_1, \cdots, x_n x=x1,⋯,xn是给定的,目标是生成目标文本 y y y,我们需要一个预训练的模型,该模型既能对输入文本进行编码,又能生成输出文本。为此,有两种流行的体系结构共享一个共同的线程:(1) 使用带完全连接掩码的编码器首先对源 x x x进行编码,然后(2)对目标 y y y进行自回归解码(从左到右)。
-
前缀语言模型,前缀LM是一个从左到右的LM,以前缀序列 α \alpha α为条件对 y y y进行解码,该序列由相同的模型参数编码,但具有完全连接的掩码。值得注意的是,为了鼓励前缀LM学习更好的输入表示,除了 y y y上的标准条件语言建模目标外,通常在 x x x上应用损坏的文本重建目标。
-
编码器-解码器,编码器-解码器模型是一种使用从左到右LM解码的模型,条件 y y y是文本 x x x的单独编码器具有完全连接的掩码;编码器和解码器的参数不共享。与前缀LM类似,可以对输入 α \alpha α应用不同类型的噪声。
UniLM 1-2 (Dong et al., 2019; Bao et al., 2020) 和 ERNIE-M (Ouyang et al., 2020) 中使用了前缀LMs,而编码器-解码器模型广泛用于预训练模型,如T5 (Raffel et al., 2020)、 BART (Lewis et al., 2020a)、 MASS (Song et al., 2019) 及其变体。
带有前缀LMs和编码器-解码器范例的预训练模型可以自然地用于文本生成任务,使用输入文本进行prompting (Dou等人, 2021) 或不进行prompting (Yuan等人, 2021a; Liu和Liu, 2021)。
然而,最近的研究表明,其他非生成任务,如信息提取 (Cui et al., 2021)、问答 (Khashabi et al., 2020) 和文本生成评估 (Yuan et al., 2021b),可以通过提供适当的提示来重新表述生成问题。
因此,prompting方法
- 拓宽了这些面向生成的预训练模型的适用性。例如,像BART这样的预训练模型在NER中使用较少,而prompting方法使BART适用,
- 打破了不同任务之间统一建模的困难 (Khashabi et al., 2020)。
来源
本文是对Promt论文综述的部分翻译:
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)