持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
导语
本文对应原论文的第4章的部分内容。
4 Prompt工程
Prompt 工程是创建 prompt函数 ,使该函数可在下游任务上获得最好表现的过程。在此前的许多工作中,这涉及到 prompt 模板工程,其中人类工程师或算法需要为模型预期执行的每个任务搜索最佳模板。如下图所示,首先要考虑 prompt 的形式,然后决定是采用手动还是自动的方式来创建所需形式的 prompt。
4.1 Prompt形式
Prompt 主要有两种主要类型:完形填空(Cloze)prompt,和前缀 (Prefix) prompt。实际应用时,选择哪一个取决于任务和用于解决任务的模型。一般来说:
- 对于生成任务或使用标准自回归 LM 解决的任务,前缀 prompt 往往更有帮助,因为它们与模型从左到右的性质刚好吻合。
- 对于使用掩码 (Mask) LM 解决的任务(比如,BERT),完形填空 prompt 则非常合适,因为它们与预训练任务的形式非常匹配。
- 全文本重建模型则可以与完形填空 prompt 或前缀 prompt 一起使用。
- 最后,对于一些涉及多个输入的任务,例如文本对分类,prompt 模板必须包含至少两个输入的空间。
4.2 手工模板工程
创建 prompt 最自然的方式也许是基于手工创建比较直观的模板。例如, LAMA 数据集提供了手工创建的完形填空模板来探索 LM 中的知识。Brown 等在 2020 年创建了手工制作的前缀 prompt 来处理各种各样的任务,包括问答、翻译和常识推理的探索任务。Schick 等在文本分类和条件文本生成任务的少样本学习设置中使用预定义的模板。
4.3 自动学习模板
虽然手工制作模板的策略很直观,并且确实可以在一定程度上准确地解决各种任务,但这种方法也存在一些问题:
- 创建和对这些 prompt 进行实验需要大量的时间和经验,特别是对于一些复杂的任务,例如语义解析;
- 即使是经验丰富的prompt 设计者可能也无法手工发现最佳的 prompt。
为了解决这些问题,很多研究提出了一些自动化模板设计过程的新方法。特别地,自动化搜索的 prompt 可以进一步被分为离散 prompt(其中 prompt 是一个实际的文本字符串)和连续 prompt(其中 prompt 直接在底层 LM 的嵌入空间中进行描述。
4.3.1 离散的Prompt
致力于发现离散提示(又称硬提示)自动搜索在离散空间中描述的模板,通常与自然语言短语相对应。我们详细介绍了为此提出的几种方法:
D1 Prompt Mining 给定一组训练输入x和输出y的情况下自动查找模板,该方法从大型文本语料库(例如Wikipedia)中抓取包含x和y的字符串,并查找中间的单词或输入和输出之间的依赖路径。频繁的中间词或依赖路径可以作为模板,如“[X] middle words [Z]”。
D2: Prompt Paraphrasing 基于同义释义的方法采用现有的种子提示(例如手动构造或挖掘),并将其释义为一组其他候选提示,然后选择在目标任务中实现最高训练精度的提示。这种释义可以通过多种方式完成,包括将提示语双向翻译成另一种语言,然后再返回,使用同义词词典中的短语替换,或使用专门优化的神经提示重写器,在输入x输入到提示模板后进行释义,允许为每个单独的输入生成不同的释义。
D3: Gradient-based Search Wallace等人(2019a)对实际标记应用了基于梯度的搜索,以找到可以触发底层预训练LM以生成所需目标预测的短序列。这种搜索以迭代的方式完成,逐步遍历提示中的标记。
D4: Prompt Generation 可以将prompt的生成视为文本生成任务,并使用标准的自然语言生成模型来执行该任务。
D5: Prompt Scoring 略
总结
本文总结了一些Prompt工程中的常见术语和方法,主要的一个经验就是在什么样的场景下使用哪种prompt是高效的,这点可与参考4.1部分,接着,又总结了一些手工或机器自动生成的prompt模板的方法,希望对您有所帮助。