SELF-INSTRUCT Aligning Language Models with Self-Generated Instructions

摘要

通过模型自己生成指令、输入输出,然后在使用它们对原始模型进行微调之前,过滤掉无效或相似的样本。

SELF-INSTRUCT:一个通过利用预训练语言模型自身生成内容来提升其指令遵循能力的框架。

整理了一组专家编写的用于新颖任务的指令,并通过人工评估表明,使用 SELF-INSTRUCT 对 GPT3 进行调优,相比使用现有的公共指令数据集,性能有大幅提升,与 InstructGPT001 仅存在 5% 的绝对差距。

指令调优模型:用 指令-输入-输出 做监督学习的微调模型

Intro

指令遵循模型成功的两大支柱:模型本身(强大的预训练语言模型)和高质量的训练数据(人工编写的指令数据)

问题:

  1. 成本高昂
  2. 多样性有限,人写的一般只会包含常见的NLP任务如翻译、总结

SELF-INSTRUCT:

QQ截图20250524160501.png

  • 在第一阶段,模型被提示(prompted)生成新任务的指令。利用现有的指令集合来创建覆盖范围更广的指令,这些指令定义了(通常是新颖的)任务。
  • 第二阶段,判断指令对应的任务是否为分类任务
  • 第三阶段,如果是分类任务类型则先生成输出再生成输入否则先生成输入后生成输出
  • 第四阶段,过滤掉重复和无用的

经过循环自举,self-instruct机制生成了种类非常丰富的instruction:

QQ截图20250525210345.png

基于这些生成的数据,我们通过对 GPT3(即用于生成指令数据的同一个模型)进行微调,构建了 GPT3SELF-INST 模型。结果表明,GPT3SELF-INST 以显著优势(+33.1%)超越了原始的 GPT3 模型,并且几乎与 InstructGPT001 的性能持平。

贡献包括:

(1) 我们引入了 SELF-INSTRUCT,一种以最少人工标注数据诱导(提升)指令遵循能力的方法;

(2) 我们通过广泛的指令调优实验证明了其有效性;

(3) 我们发布了一个包含 52,000 条指令的大型合成数据集,以及一组用于构建和评估未来指令遵循模型的人工编写的新颖任务。

method

Defining Instruction Data

生成的指令数据包含一个指令集合 I_t,其中每个 I_t 都以自然语言定义了一个任务 t,每个任务t包含≥1个输入输出实例。

由于很多时候指令和输出不存在明显界限,比如一个写作任务既可以表示为:“写一篇关于校园安全的文章”,也可以表示为:“写一篇关于以下主题的文章”,并将“校园安全”作为实例输入。

为了提升模型鲁棒性,允许无输入的指令

Automatic Instruction Data Generation

数据生成流水线包含四个步骤:1) 生成任务指令,2) 判断指令是否代表一个分类任务,3) 使用输入优先或输出优先的方法生成实例,以及 4) 过滤低质量数据。

  • **在第一步,**SELF-INSTRUCT 以自举(bootstrapping)方式,从一小组人工编写的种子指令中生成新的指令我们用 175 个任务来初始化任务池(每个任务包含 1 条指令和 1 个实例)在每一步中,我们从这个任务池中抽取 8 条任务指令作为上下文示例这 8 条指令中,有 6 条来自人工编写的任务,有 2 条来自之前步骤中模型生成的任务,以促进多样性。

QQ截图20250525223631.png

  • 分类任务识别:以少样本(few-shot)方式提示语言模型来判断这一点,使用了来自种子任务的 12 条分类指令和 19 条非分类指令。

image-20250525223933360

  • Instance Generation:当使用来自其他任务的“指令-输入-输出”上下文示例进行提示时,预训练语言模型在很大程度上能够做到根据指令理解目标任务是什么,找出需要哪些额外的输入字段并生成它们,最后通过生成输出来完成任务。

    • input-first:先生成输入再生成输出的策略。这种方法可能会生成偏向于某个特定标签的输入,特别是对于分类任务(例如,对于语法错误检测任务,它通常会生成语法正确的输入)QQ截图20250525224544.png
    • Output-first Approach:首先生成可能的类别标签,然后根据每个类别标签生成输入QQ截图20250525224600.png
  • Filtering and Postprocessing:为了鼓励多样性,一条新的指令只有当其与任何现有指令的 ROUGE-L 相似度小于 0.7 时才会被添加到任务池中。还排除了那些包含某些特定关键词(例如 image、picture、graph)的指令,因为这些指令通常无法由语言模型处理。在为每条指令生成新的实例时,我们会过滤掉完全相同的实例,或者输入相同但输出不同的实例。无效的生成内容会根据启发式方法进行识别和过滤(例如,指令过长或过短,实例输出是输入的重复)。

Finetuning the LM to Follow Instructions

我们将指令和实例输入连接起来作为提示(prompt),并以标准的监督学习方式训练模型生成实例输出。为了使模型对不同格式具有鲁棒性,我们使用多个模板将指令和实例输入编码在一起。例如,指令可以带或不带前缀“Task:”,输入可以带或不带前缀“Input:”,“Output:”可以加或不加在提示的末尾,并且中间可以放置不同数量的换行符等

SELF-INSTRUCT Data from GPT3

接下来对GPT3生成的instruct数据集做分析

statistics

QQ截图20250525225656.png

Diversity

使用 Berkeley 神经网络解析器提取最接近根节点的动词及其第一个直接名词宾语

QQ截图20250526111947.png

QQ截图20250526112017.png

QQ截图20250526112022.png

Experimental Results

GPT3SELF-INST: finetuning GPT3 on its own instruction data

使用多种模板来连接指令和输入,并训练模型生成输出

这种微调是通过 OpenAI 微调 API 完成的

对模型进行了 2 个epochs的训练

Baselines

  • Off-the-shelf LMs :T5-LM 、 GPT3

  • Publicly available instruction-tuned models: **T0 :**Hugging Face 团队开发的指令调优模型,基于 T5 架构,通过在多个自然语言任务的指令数据上进行微调而得到。Tk-INSTRUCT (Wang et al., 2022): 另一个指令调优模型,通常指 SUPERNI (SUPER-NATURALINSTRUCTIONS) 数据集上训练的模型,旨在提升模型在各种任务上的泛化能力。

  • Instruction-tuned GPT3 models: InstructGPT

为了将 SELF-INSTRUCT 训练与使用其他公开可用的指令调优数据进行比较,我们进一步使用来自PROMPTSOURCE 和 SUPERNI 的数据对 GPT3 模型进行了微调,这些数据曾用于训练 T0 和 Tk-INSTRUCT 模型。

T0 training and SUPERNI training

Experiment 1: Zero-Shot Generalization on SUPERNI benchmark

零样本(zero-shot)的方式,评估模型在典型自然语言处理(NLP)任务上遵循指令的能力。

使用 SUPERNI (Wang 等,2022) 的评估集

使用确定性生成模式(温度设置为 0,不进行核采样),并且没有使用特定的停止序列。

QQ截图20250526115208.png

  1. SELF-INSTRUCT 能够大幅提升 GPT3 的性能(+33.1%)

  2. 几乎与 InstructGPT001 的性能持平。

  3. 即使在已有大量标注指令数据的情况下,它也能进一步提升性能

原始的 GPT3 模型基本上完全无法遵循人类指令。经人工分析,我们发现它通常生成不相关且重复的文本,并且不知道何时停止生成

与其他未专门针对 SUPERNI 进行训练的模型相比,GPT3SELF-INST 取得了比 T0 模型或在 T0 训练集上微调的 GPT3 模型更好的性能,而 T0 训练集付出了巨大的人工标注努力。

值得注意的是,GPT3SELF-INST 还几乎与 InstructGPT001 的性能持平,而 InstructGPT001 是使用私人用户数据和人工标注标签进行训练的。

Experiment 2: Generalization to User-oriented Instructions on Novel Tasks

尽管 SUPERNI 在收集现有 NLP 任务方面很全面,但这些 NLP 任务大多是为研究目的而提出,并且倾向于分类任务。

为了更好地评估指令遵循模型的实际价值,部分作者策划了一组受面向用户应用启发的新指令。

首先集思广益,思考大型语言模型可能有用处的各种领域(例如,电子邮件撰写、社交媒体、生产力工具、娱乐、编程),然后针对每个领域精心设计指令以及一个输入-输出实例(同样,输入是可选的)。

目标是使这些任务的风格和格式多样化(例如,指令可能长或短;输入/输出可能采取列表、表格、代码、公式等形式)。

建了 252 条指令,每条指令包含 1 个实例。

相信它可以作为测试平台,用于评估基于指令的模型如何处理多样化和不熟悉的指令。

为了获得更忠实的评估,我们请指令的作者来判断模型的预测

实施了一个四级评分系统,用于对模型输出的质量进行分类:

  • RATING-A:响应有效且令人满意。
  • RATING-B:响应可接受,但存在轻微错误或不完美之处。
  • RATING-C:响应相关且回应了指令,但内容存在重大错误。
  • RATING-D:响应不相关或完全无效

QQ截图20250526134410.png

Effect of Data Size and Quality

更多这种生成的数据能否带来更好的指令遵循能力呢?

通过从生成的数据集中抽取不同数量的指令子集,用这些子集微调 GPT3,并评估由此得到的模型在 252 个面向用户的指令集上的表现,从而对生成数据的规模进行了分析

QQ截图20250526134745.png

随着数据规模的增长,性能持续提升。然而,这种提升在达到 16,000 条指令后几乎趋于平稳。

有趣的是,当在 SUPERNI 上进行评估时,我们发现模型的性能提升在数百条指令左右就更早地趋于平稳。

这可能是由于新生成的数据与 SUPERNI 中典型的 NLP 任务有所不同,这表明未来的研究可能受益于结合使用不同的指令数据,以在各种类型的任务上获得更好的性能。

另一个提高模型性能的方向是利用我们生成的数据并获得更好的监督信号(减少噪声)。通过使用 InstructGPT003(当时可用的最佳通用模型),根据指令和输入重新生成我们所有实例的输出字段,从而探索了这一想法

这可以被视为使用我们的数据对 InstructGPT003 进行的一种知识蒸馏。

由此得到的模型比使用原始数据训练的对应模型性能高出 10%,这表明未来在利用我们的生成流水线获取初始数据,然后通过人类专家或从更优模型进行知识蒸馏来提高数据质量方面,有很大的研究空间。

Instruction-following LMs.

一系列工作已经发现证据表明,如果原始语言模型(LM)通过标注的“指令性”数据进行调优——这些数据集包含基于人工标注的语言指令命令及其预期结果——它们可以有效地遵循通用语言指令

“指令性”数据的规模和多样性与所得模型对未见任务的泛化能力之间存在直接关联

InstructGPT (Ouyang 等,2022) 在构建更通用目的的语言模型方面与我们的目标相似,并且在遵循多样化用户指令方面展示了卓越的性能。然而,作为一个商业系统,它们的构建过程仍然相当不透明。特别是,由于透明度有限以及他们在研究中使用的私人用户数据,数据在其中所扮演的角色仍未得到充分研究。

Language models for data generation and augmentation

SELF-INSTRUCT 的一个独特动机是自举(bootstrap)新的任务定义,这些任务以前可能从未被自然语言处理(NLP)从业者定义过(尽管对真实用户来说可能仍然很重要)

Instruction generation

一系列近期工作(Zhou 等,2022b;Ye 等,2022;Singh 等,2022;Honovich 等,2022b)在给定少量示例的情况下生成任务的指令。尽管 SELF-INSTRUCT 也涉及指令生成,但我们案例中的一个主要区别在于它是任务无关的;我们从头开始生成新的任务(指令连同实例)。

Model self-training

典型的自训练框架(He 等,2019;Xie 等,2020;Du 等,2021;Amini 等,2022;Huang 等,2022)使用训练好的模型为未标注数据分配标签,然后利用这些新标注的数据来改进模型。尽管 SELF-INSTRUCT 与自训练文献有相似之处,但大多数自训练方法都假设一个特定的目标任务以及其下的未标注示例;相比之下,SELF-INSTRUCT 则从头开始生成各种各样的任务。

Knowledge distillation.

SELF-INSTRUCT 也可以被视为一种“知识蒸馏”的形式,但它与此方向的不同之处在于:(1) 蒸馏的来源和目标是相同的,即模型的知识被蒸馏到它自身;(2) 蒸馏的内容是以指令任务的形式存在的(即定义任务的指令,以及实例化该任务的一组示例)。

Bootstrapping with limited resources

SELF-INSTRUCT 本身就是“有限资源下自举”的一个典型例子。它从少量人工编写的种子指令(有限资源)**开始,利用 **GPT3 模型自身的生成能力**,通过**迭代过程(自举)**,来生成大规模、多样化的指令数据**,最终用于微调模型,使其更好地遵循指令。

Multi-modal instruction-following

SELF-INSTRUCT 作为一种通用的数据扩展方法,也有潜力在multi-modal learning发挥作用,我们将其留待未来的工作。

Limitations

Tail phenomena (长尾现象): 在许多现实世界分布中,少数高频事件构成“头部”,而大量低频事件构成“长尾”。在语言模型中,这通常指模型在处理高频词汇和常见语言模式时表现良好,但在处理低频词汇、不常见表达或特定领域(即“长尾”)时性能下降。

类似地,在本文的背景下,如果 SELF-INSTRUCT 的大部分收益偏向于在预训练语料库中出现频率更高的任务或指令,那将不足为奇。

因此,这种方法在面对不常见和富有创造性的指令时可能会表现出脆弱性。

对于更大的模型,指令调优的收益更高(Wei 等,2022)。这可能会给那些没有大型计算资源的人造成使用障碍

强化语言模型偏见。 作者关注的一个问题是这种迭代算法可能带来的意外后果,例如问题性社会偏见(关于性别、种族等的刻板印象或污蔑言论)的放大。

该算法难以生成平衡的标签,这反映了模型先前的偏见。

Pre-train, Prompt, and Predict A Systematic Survey of Prompting Methods in Natural Language Processing

传统的监督学习采用直接输入与直接输出结果的方式来完成任务。但是基于prompt的学习能够只改变prompt模板就能得到从预测生成的文本中分离出来的结果。这种方式明显更具有通用性,前提是有一个巨大的预训练模型和好的prompt templete。本篇论文介绍了从选择预训练模型到如何组织prompt到微调策略

两个巨大改变

第一阶段:纯监督学习:主要依靠特征工程,依靠工程师手工找特征,然后用最大熵回归之类的传统机器学习模型来训练

第二阶段:神经网络的阶段:此时神经网络可以自动找到特征,故而重点变成如何架构一个好的神经网络模型以更好地学习更多的特征

transformer提出之后转向:预训练+微调

LM:语言模型是一种能够计算出任何给定文本片段(观察到的文本数据)作为一个自然、合理的语言序列出现的概率的系统。

此时重心转向目标工程,具体就是深入思考在特定阶段(预训练或微调)希望模型学习到什么样的能力,根据这个期望,设计或组合能够有效引导模型学习这些能力的训练任务和相应的数学表达(即损失函数)

到了2021,大家已经不再面对各种特定的任务做微调生成一个新模型,而是用一个大型的pre-train的模型加prompt 做few-shot learning.此时重心来到了prompt engine找到最好的prompt

正式的prompt描述

image-20250510154247587.png

  • cloze prompt:z在prompt中间

  • prefix prompt:z在prompt最后面

可以用虚拟词替代自然语言prompt

答案搜索阶段,我们把所有可能的z都填入,通过LM预测概率

QQ截图20250510161448.png

答案映射阶段,我们把很多的输出映射为同一结果

下文会谈论的:

QQ截图20250510161611.png

预训练模型

trainning objectives

标准LM:从左到右的自回归模型,逐个词元预测

去噪目标:

  1. CTR(Corrupted Text Reconstruction):只要求重建损坏的部分,loss不计入其余token
  2. FTR(Full Text Reconstruction):要求重建全文,loss计入所有token

从左到右的自回归模型更适用于prefix prompt,而重建目标的模型更适用于cloze prompt

不同的加噪方式会对模型能力有不同的影响

QQ截图20250510164608.png

masking:可以随机,也可以只mask某类词汇以增强模型的某种先验知识

representation direction

  • 从左到右
  • 双向

通常实现方式都是attention masking

QQ截图20250510165231.png

QQ截图20250510165353.png

L2R LMs:

  • decoder-only的泛化性能更好ICML 22What language model architecture and pretraining objective works best for zero-shot generalization?. 在最大5B参数量、170B token数据量的规模下做了一些列实验,发现用next token prediction预训练的decoder-only模型在各种下游任务上zero-shot泛化性能最好;另外,许多工作表明decoder-only模型的few-shot(也就是上下文学习,in-context learning)泛化能力更强
  • 预训练的难度更低
  • 并没有一个明确的研究表明decoder-only一定更好

masked language models:

  • encoder-only在分类这样的下游任务上表现更好

prefix LMs&encoer-decoder:

  • 兼顾理解和生成能力

  • 由于这两种不适应非生成任务,故而使用prompt可以把非生成任务转化为生成任务

prompt engineering

prompt shape:

  1. cloze prompt
  2. prefix prompt

离散prompt:实际的,人类可读的prompt

D1提示挖掘:

  1. 给定一组训练数据,包含输入x和输出y
  2. 在大型语料库中搜索包含x和y的字符串
  3. 找出x与y之间的中间词语或者句子成分中的语法关系
  4. 那些存在频率很高的中间词或者语法关系就可以作为模板
  5. 如:[x]中间词+中间语法关系[y]

D2提示改写:

  1. 获得种子prompt(人工手写或者挖掘)
  2. 通过不同方式将其改写成多个prompt如:来回翻译、同义词替换、专门的神经网络重写
  3. 选择那个能在目标任务上获得最高训练准确率的prompt

D3基于梯度的搜索:

  1. 方法会一步步地、迭代地尝试不同的词元组合来构成提示。在每一步,它会评估当前词元选择的好坏,并尝试替换或添加能够使模型输出更接近期望目标的词元。

D4提示生成:

  1. 将x与y中间填充空,让一个模型来填充这些空

D5提示评分:

  1. 获取候选模板库
  2. 将x与y填入模板
  3. 使用LM对填入后的句子做概率预测

连续prompt

  • 让prompt不一定是自然语言,而是训练出来的能够更好适应下游任务的向量

  • 让模版有自己的可调参数,而不用调整预训练模型本身的参数,更加灵活

C1:前缀微调

前缀在每一层的K和Q都直接由前缀矩阵的参数直接生成而不是依赖原模型的矩阵参数

QQ截图20250510212332.png

Lester et al. (2021) 的方法与此类似,他们也是在输入序列前添加特殊标记(tokens)来构成一个模板,并直接调整这些特殊标记的嵌入(embeddings)。与 Li 和 Liang 的方法相比,这种方法引入的参数更少,因为它不会在每个网络层内引入额外的可调参数,而仅仅是调整输入层特殊标记的嵌入。

Tsimpoukelli et al. (2021) 训练了一个视觉编码器,该编码器将图像编码成一个嵌入序列,这个序列可以作为提示(prompt)来引导一个冻结的自回归语言模型生成相应的图像描述。他们证明了由此产生的模型可以在视觉-语言任务(如视觉问答)上实现少样本学习(few-shot learning)。

C2:使用离散提示初始化的调优

具体方法

  • 这类方法不从零开始学习连续提示,而是利用已经通过离散提示搜索方法创建或发现的提示来初始化连续提示的搜索过程。这样做的好处是,离散提示(通常由人类可读的词语构成)可以为连续提示的优化提供一个更好的起点。

C3:硬提示-软提示混合调优

这类方法不完全依赖于可学习的软提示模板,而是在一个固定的“硬提示”模板(通常由真实词汇构成)中插入一些可调整的嵌入(软提示)。

answer engineering

Answer Shape

主要是粒度区分:

  • Tokens
  • Span:几个token长度–cloze prompt
  • Sentence:–prefix prompt

根据任务选择shape:分类任务选择token或者span,多选项问题回答用sentence

Answer Space

  • 无约束空间:包含所有的tokens,生成的就是答案

  • 受约束空间:分类任务、实体识别任务、多项选择

分离答案搜索

1. 答案改写 (Answer Paraphrasing)

  • 核心思想: 从一个初始的答案集合(可能是人工设定的)出发,通过“改写”(paraphrasing)技术(比如来回翻译)来扩展这个集合,使其能够覆盖更多语言模型可能输出的、表达相同含义的答案形式。

2. 先剪枝后搜索 (Prune-then-Search)

  • 核心思想: 这类方法通常分两步进行。首先,创建一个初始的、经过“剪枝”的答案空间 Z′(选择频率高的词元或者使用LM生成),这个空间包含一些貌似合理的候选答案词,数量相对较少。然后,再在这个缩小的空间内运行一个更精细的搜索算法(最大似然、逻辑分类器),以挑选出最终的答案词(或答案词集合)。

3. 标签分解 (Label Decomposition)

  • 核心思想: 特别是在处理复杂标签(如关系抽取任务中的关系标签)时,将标签本身分解为其构成词,并将这些构成词的集合作为模型需要生成的答案。

多提示学习方法

提示集成 (Prompt ensembling) 是指在推理时针对一个输入使用多个提示 (prompts) 来进行预测的过程。

(1) 可以 利用不同 prompt 的互补优势 (leverage the complementary advantages of different prompts)。因为不同的 prompt 可能在处理某些类型的输入或捕捉某些信息时表现更好,集成起来可以取长补短。

(2) 可以 降低 prompt engineering 的成本 (alleviate the cost of prompt engineering)。因为要找到表现最好的那 一个 prompt 是非常困难且耗时的,通过集成多个 prompt,就不用非得找到那个“完美”的 prompt。

(3) 可以 稳定在下游任务上的表现 (stabilize performance on downstream tasks)。集成方法通常能让结果更稳健,不容易受到某个特定 prompt 不稳定的影响。

QQ截图20250511104402.png

均匀平均 (Uniform averaging)

当使用多个提示时,组合预测结果最直观的方法是对来自不同提示的概率取平均值

QQ截图20250511104603.png

Weighted averaging (加权平均)

为每个prompt分配权重,这个权重往往是事先通过prompt在训练集上的准确率来预先设定,Qin 和 Eisner (2021) 还引入了一种 依赖于数据 (data-dependent) 的加权策略。在这种策略下,在确定不同 prompt 的权重时,也会考虑输入数据与该 prompt 的相关性或输入数据出现在该 prompt 中的概率。

Majority voting (多数投票)

多数投票的基本思想是:每个 prompt 都对输入进行分类,给出一个预测类别,最后统计哪个类别被预测的次数最多(获得“多数票”),就将该类别作为最终的预测结果。

Knowledge distillation (知识蒸馏)

一组深度学习模型的集成(ensemble,即多个模型组合起来)通常可以提升性能。而这种更优越的性能可以通过 知识蒸馏 (knowledge distillation) 的方法转移或“蒸馏”到一个 单一的模型 (single model) 中。

首先用多个 prompt 各自对应的模型组成一个**“教师”集成模型,用它来给无标签数据打标签,**然后训练一个“学生”单一模型去学习这个带标签的数据集,从而把集成模型的知识学到单个模型里。

Prompt ensembling for text generation (用于文本生成的提示词集成)

一种简单的集成方法是使用标准的文本生成技术(比如贪婪搜索、束搜索等),但在生成答案序列中的 下一个词 (next word) (zt) 时,是基于所有 prompt 预测的下一个词概率的 集成(平均)概率 (ensembled probability) 来决定。

Schick 和 Schütze (2020) 的做法是为每一个 prompt fprompt,i(x) 单独训练了一个模型 (separate model)(很可能是对一个基础语言模型进行了微调)。他们首先使用 每个单独训练好的模型分别进行文本生成 (decode generations using each model),得到各自生成的完整文本序列。然后,他们通过平均 所有模型对某个生成的文本序列的生成概率 (averaging their generation probability across all models) 来对每一个生成的文本序列进行评分。简单来说,不是在生成过程中每一步都平均概率,而是先各自生成完整文本,再对生成的文本根据所有模型的概率进行打分,最后选择分数最高的文本。

Prompt Augmentation (提示词增强)

QQ截图20250511104402.png

演示学习 (demonstration learning)

你不再只是简单地给一个 prompt :“中国的首都是[Z]。” 而是可以在前面加上几个示例,比如:“英国的首都是伦敦。日本的首都是东京。中国的首都是[Z]。” 这样就通过前面的示例向模型展示了回答这类问题的模式。

(1) 示例选择 (Sample Selection): 如何从可能的示例中,选择出最有效、最有帮助的那些?

(2) 示例排序 (Sample Ordering): 选定的示例应该按照什么顺序排列?以及它们应该放在实际 prompt 的前面还是后面,如何组织?

Sample Selection (示例选择)

在 few-shot(少量示例)的场景下,所使用的示例的选择对于模型性能影响非常大。表现可能从在某些任务上接近当前最优水平 (near state-of-the-art accuracy) 到接近随机猜测 (near random guess) 不等。

**Gao 等人 (2021) 和 Liu 等人 (2021a) 使用了 **句子 embedding (sentence embeddings)来选择示例。具体方法是,在句子 embedding 空间中,选择那些与需要模型处理的 输入 (input) 比较接近(距离近)的示例作为演示。这个思路是希望通过选择与当前任务输入在语义或结构上相似的示例来提高效果。

为了衡量预训练语言模型基于指令执行新任务的 泛化能力 (generalization capability),Mishra 等人 (2021) 在示例中同时提供了 正面示例 (positive samples)反面示例 (negative samples)。反面示例的作用是强调模型应该 避免做的事情 (highlight things to avoid) 或常见的错误类型。

Sample Ordering (示例排序)

Lu et al. 发现,表现不佳的提示词顺序往往会导致模型预测分布严重不平衡,因此,他们假设具有较高全局熵的排列可能表现更好,因为它减轻了模型对特定标签的固有偏差。

对于每一个待评估的提示词排列顺序,Lu et al. 将其作为上下文输入到语言模型中,然后让模型对人工开发集中的每个示例进行预测。模型对于每个示例都会输出一个关于所有可能标签的概率分布。基于这些预测的概率分布,他们计算。熵在这里作为衡量模型对预测结果不确定性预测分布均衡性的指标。

Kumar 和 Talukdar (2021) 采取的方法是,他们 搜索 (search) 一个好的训练示例排列顺序作为增强 prompt。此外,他们还学习了一个特殊的 分隔符 token (separator token) 放在每个示例 prompt 之间,以期进一步提升模型性能

Prompt Composition (提示词组合)

QQ截图20250511104402.png

对于那些可以基于更基础的 子任务 (subtasks) 进行组合的 可组合任务 (composable tasks),我们也可以进行 提示词组合 (prompt composition)。这种方法是使用多个 子 prompt (sub-prompts),每个子 prompt 对应一个子任务,然后基于这些子 prompt 来定义一个 组合 prompt (composite prompt)

关系抽取任务 (relation extraction task) 中(这个任务的目标是抽取两个实体之间的关系),我们可以将这个任务分解成几个子任务,包括识别实体的特征 (identifying the characteristics of entities) 和对实体之间的关系进行分类 (classifying the relationships between entities)。

Prompt Decomposition (提示词分解)

QQ截图20250511104402.png

对于需要对同一个样本进行 多次预测 (multiple predictions) 的任务(例如 序列标注 (sequence labeling),像命名实体识别或词性标注),直接针对整个输入文本 x 定义一个完整的、包含所有预测目标的 prompt 是很有挑战性的。

解决这个问题的一个直观方法是,将这个完整的 prompt 分解成不同的 子 prompt (sub-prompts),然后 分别回答 (answer separately) 每一个子 prompt。

通过 命名实体识别 (named entity recognition - NER) 任务的例子来说明这个想法。NER 任务的目标是识别输入句子中的所有命名实体。

在 NER 这个例子中,首先会将输入的句子分解成多个 文本片段(span)。然后,可以针对 每一个片段 创建一个 prompt,让模型预测该片段的 实体类型 (entity type)(类型包括人名、地名等,也包括“不是实体”的类别)。

Training Strategies for Prompting Methods (提示词方法的训练策略)

零样本设置 (zero-shot setting):对于当前关心的这个具体任务来说,没有使用任何训练数据。

数据学习 (full-data learning),使用相对大量(reasonably large number)的训练样本来训练模型;

少样本学习 (few-shot learning),只使用非常少量的(very small number)样本来训练模型;

像 Prompt Engineering 这种方法,虽然不训练模型,但常常用任务数据来设计/验证 prompt,这让它在严格意义上并非“纯粹”的零样本。

Parameter Update Methods (参数更新方法)

QQ截图20250511123704.png

Promptless Fine-tuning (无提示词微调)

在这种策略下,给定一个特定任务的数据集,预训练语言模型(LM)的 所有参数 (all parameters) 或者 部分参数 (some parameters) 会根据下游任务训练样本产生的梯度进行更新(也就是训练)。

这是一种简单、强大且被广泛使用的方法,但是,它可能在 小型数据集 (small datasets) 上出现 过拟合 (overfit) 或者学习不稳定 (not learn stably) 的情况

模型还容易发生 灾难性遗忘 (catastrophic forgetting)。灾难性遗忘是指语言模型在微调后,丢失了它在微调之前(即预训练阶段)所具备的一些能力

Tuning-free Prompting (无微调提示词)

不改变 (without changing) 预训练语言模型的任何参数,仅仅依靠提供的 prompt 来进行预测。

这种方法可以 选择性地 (optionally) 结合使用第 6.2 节介绍的 提示词增强 (prompt augmentation),即在 prompt 中加入一些带答案的示例来增强输入。这种“无微调提示词”与“提示词增强”相结合的方式,也通常被称为 上下文学习 (in-context learning)(引用了 Brown 等人 2020 年的研究,GPT-3 的能力展示就属于这种

由于 prompt 是唯一指定任务要求的方式,因此需要大量的 人工设计/工程 (heavy engineering) 来精心构造 prompt,才能达到较高的准确率。且上下文学习在示例多时推理慢

Fixed-LM Prompt Tuning (固定语言模型的提示词调优)

仅更新 (updates only) 这些 prompt 的参数 (prompts’ parameters)。它利用从下游训练样本中获取的 监督信号 (supervision signal) 进行训练,同时保持 整个预训练语言模型 (entire pre-trained LM) 的参数 完全不变 (unchanged)

适用于少样本场景 (suitable in few-shot scenarios),在数据量较少时也能取得不错的效果。

通常情况下,它的准确率要 优于 (superior accuracy to) 无微调提示词(因为它毕竟进行了一些训练)。

缺点:

  • 不适用于零样本场景 (Not applicable in zero-shot scenarios),因为它需要训练数据来更新 prompt 参数。
  • 尽管在少样本场景下有效,但在数据量非常大 (large-data settings) 的情况下,由于只训练了很少一部分参数,其 表示能力 (representation power) 可能会受到限制(相比于训练整个大模型)。
  • 仍然需要通过选择 超参数 (hyperparameters)(用于训练 prompt 参数)或初始的 种子 prompt (seed prompts) 来进行一定的 prompt engineering。
  • 训练得到的 prompt 参数(例如一些向量)通常 不可被人直接解释或操纵 (not human-interpretable or manipulable),不像文本 prompt 那样直观。

Fixed-prompt LM Tuning (固定提示词的语言模型调优)

调优(训练)语言模型的参数 (tunes the parameters of the LM),这一点与标准的预训练加微调范式是一样的。但它额外地使用了参数 固定不变的 prompt (prompts with fixed parameters) 来指定模型的行为。

优点 (Advantages):

  • 使用 prompt 或答案工程可以更完整地指定任务,从而使得学习过程更加 高效 (efficient learning),特别是在少样本场景下表现突出。

缺点 (Disadvantages):

  • 仍然需要进行 prompt 或答案工程 (Prompt or answer engineering are still required),尽管可能不像完全不训练模型的“无微调提示词”那样需要大量设计。

  • 在一个下游任务上通过这种方法微调过的语言模型,可能 不适用于 (may not be effective on) 另一个不同的下游任务(因为它在微调过程中已经偏向了特定的任务,泛化性不如固定模型的 Prompting 方法)。

Prompt+LM Tuning (提示词 + 语言模型调优)

与 prompt 相关的新增参数 (prompt-relevant parameters)(比如软 prompt 的参数)。这些参数可以与预训练模型的 全部或者部分参数 (all or some of the parameters) 一起进行 联合微调(训练)(fine-tuned together)

优点 (Advantages):

  • 这是所有方法中 表达能力最强 (most expressive method) 的一种,因为它同时训练了模型的许多参数和 prompt 相关的参数,具有最大的灵活性。
  • 可能最适合在 高数据量 (high-data settings) 的情况下使用,能够充分利用大量数据。

缺点 (Disadvantages):

  • 需要训练和存储模型的 所有参数 (all parameters)(或者大部分参数),这通常意味着需要更多的计算资源和存储空间。
  • 小型数据集 (small datasets) 上进行训练时,由于参数量大,可能容易发生 过拟合 (May overfit)

Applications (应用)

Knowledge Probing (知识探测)

Factual Probing (事实性探测)

量化预训练语言模型内部的表示(representations)中包含了多少 事实性知识 (factual knowledge)。预训练模型的参数通常是 固定不变 (fixed) 的。通过将原始输入转换成第 2.2 节定义的 完形填空式 prompt (cloze prompt) 来检索知识

Linguistic Probing (语言学探测)

除了事实性知识,大规模的预训练也使得语言模型能够处理各种 语言学现象 (linguistic phenomena),比如类比、否定、对语义角色的敏感性、语义相似度、俚语(或行话)理解、以及对稀有词语的理解等。

Classification-based Tasks (基于分类的任务)

Text Classification (文本分类)

现有的大多数工作都是在 少样本设置 (few-shot setting) 下,探索使用 “固定提示词的语言模型调优”策略 (§7.2.4 中定义的方法) 来进行文本分类的有效性。这意味着他们使用固定的 prompt 模板,并微调语言模型的部分或全部参数

Natural Language Inference (NLI) (自然语言推理)

自然语言推理(NLI)任务的目标是预测给定两个句子之间的关系(例如,一个句子是否蕴含另一个句子 entailment)。

在 prompt engineering 方面,研究人员主要关注于在 少样本学习设置 (few-shot learning setting) 下进行 模板搜索 (template search),并且 prompt 中待预测的槽位 [Z] 的 答案空间 (answer space)(即可能填充的词语)通常是从词汇表中 手动预先选择 (manually pre-selected) 出来,并与最终的类别标签(蕴含、矛盾、中立等)进行映射。

Information Extraction (信息抽取)

Relation Extraction (关系抽取)

关系抽取任务是预测句子中两个实体之间关系的任务。

(1) 标签空间更大 (The larger label space): 关系抽取的类别数量通常比二分类任务多很多(例如,关系抽取有 80 种关系,而二分类情感分析只有 2 种情感),这使得 答案工程 (answer engineering) 更困难(需要将模型预测的词语映射到更多的关系标签)。

(2) 输入文本中不同词的重要性不同: 在关系抽取中,输入句子中的不同词语重要性可能不同(例如,提到实体的词语更有可能与关系相关),但在分类任务中使用的原始 prompt 模板往往平等对待句子中的每个词,难以轻易反映这种差异。

自适应的答案选择方法 (adaptive answer selection method) 来解决问题 (1),并针对问题 (2) 构建了 面向任务的 prompt 模板 (task-oriented prompt template construction)。在后者中,他们使用特殊的标记(例如 [E])在模板中高亮实体提及的位置,以此来区分不同词语的重要性。

Semantic Parsing (语义解析)

语义解析任务是给定一个自然语言输入,生成其对应的结构化意义表示(比如将其转换为某种程序语言或逻辑形式)

“Reasoning” in NLP (自然语言处理中的“推理”)

Commonsense Reasoning (常识推理)

一些常见的常识推理任务包括解决 Winograd Schemas(由 Levesque 等人提出的一种句子对),这类任务要求模型识别上下文中一个歧义代词(如 it, he, she)的先行词(它指代的是谁);或者是在给定多个选项的情况下完成一个句子。

对于前者(Winograd Schemas),一个例子是:“奖杯放不进棕色的手提箱,因为它太大了。” 模型需要推理出“it”指的是奖杯还是手提箱

通过在原句子中将“it”替换成可能的先行词(如“奖杯”和“手提箱”),并计算不同选项(替换后的句子)的概率,预训练语言模型可以通过选择概率最高的那个选项来取得相当不错的效果(引用了 Trinh 和 Le 的研究)

对于后者(给定选项完成句子),一个例子是:“埃莉诺提出给她的访客煮些咖啡。然后她意识到她没有干净的 [Z]。” 备选答案是“杯子 (cup)”、“碗 (bowl)”和“勺子 (spoon)”。

对于这类任务,我们同样可以计算每个备选词语(填充到 [Z] 位置后)的生成概率,并选择概率最高的那个作为答案(引用了 Ettinger 的研究)。这同样是利用模型预测概率的 Prompting 方式。

Mathematical Reasoning (数学推理)

在预训练语言模型的背景下,研究人员发现,当数字位数较少时,预训练的 embedding 和语言模型可以执行简单的加法和减法等运算,但当数字变大时就会失败(列出了一些相关研究)

Reynolds 和 McDonell (2021) 探索了更复杂的数学推理问题(例如,如果 f(x) = x * x,那么 f(f(3)) 是多少?)。他们通过将问题的推理过程 序列化 (serializing reasoning)(一步一步地展开推理过程,比如先计算 f(3),再计算 f(f(3))),从而提高了语言模型在这类问题上的性能。这暗示了通过将推理步骤融入到 prompt 的结构或内容中来引导模型进行链式思考。

Question Answering (问答)

问答任务有多种不同的格式,比如:

  • 抽取式问答 (extractive QA): 答案直接从上下文文档中抽取(例如 SQuAD 数据集)。
  • 多项选择问答 (multiple-choice QA): 模型需要从几个备选答案中选择一个(例如 RACE 数据集)。
  • 自由生成式问答 (free-form QA): 模型可以生成任意的文本字符串作为回答(例如 NarrativeQA 数据集)。

使用语言模型(并且结合 Prompting 方法)来解决问答问题的一个好处是,可以将不同格式的 QA 任务在 同一个统一的框架 (same framework) 下解决。

但也有研究发现,直接依赖模型预测的概率来判断 QA 答案的正确性可能不太可靠。

Text Generation (文本生成)

Prompting 方法可以很容易地应用于这些任务,通常是结合使用 前缀式 prompt (prefix prompts)自回归预训练语言模型 (autoregressive pre-trained LMs)

Schick 和 Schütze (2020) 探索了在少样本文本摘要任务中使用第 7.2.4 节描述的 固定提示词的语言模型调优 (fixed-prompt LM tuning) 方法,他们使用了手动设计的模板并微调语言模型。

Li 和 Liang (2021) 在少样本设置下的文本摘要和数据到文本生成(data-to-text generation,即将结构化数据转换为自然语言文本)任务中,研究了第 7.2.3 节描述的 固定语言模型的提示词调优 (fixed-LM prompt tuning) 方法。他们的方法是在输入前面加上一些 可学习的前缀 token (learnable prefix tokens)(即软 prompt 的一种),同时保持预训练模型的参数固定不变。

Dou 等人 (2021) 在文本摘要任务中探索了第 7.2.5 节描述的 提示词 + 语言模型调优 (prompt+LM tuning) 策略。他们使用了 可学习的前缀 prompt (learnable prefix prompts),并通过不同类型的引导信号进行初始化,然后这些可学习的 prompt 参数可以与预训练语言模型的参数一起进行更新(联合训练)。

Automatic Evaluation of Text Generation (文本生成的自动评估)

Yuan 等人 (2021b) 的研究表明,prompt learning(基于 prompt 的学习方法)可以用于对生成的文本进行 自动评估 (automated evaluation)。这意味着他们不用传统评估指标(如 BLEU),而是利用 Prompting 的方式让模型自己来评估生成文本的质量

他们通过实验发现,在使用预训练模型进行(机器翻译)评估时,仅仅在被评估的翻译文本中加入一个简单的短语“such as”(例如将原文、机器翻译结果以及“such as”一起作为 prompt 的一部分输入模型),就能在德语-英语机器翻译(MT)的评估中,显著提高评估结果与人工判断结果的 相关性 (correlation)

Multi-modal Learning (多模态学习)

Tsimpoukelli 等人 (2021) 将 prompt learning 的应用从纯文本的自然语言处理领域,转移到了 多模态设置 (multi-modal setting),具体是结合了 视觉 (vision)语言 (language)

他们采用了前面第 7.2.3 节讨论的 固定语言模型的提示词调优策略 (fixed-LM prompt tuning strategy),并结合了 提示词增强 (prompt augmentation) 技术。

具体来说,他们将每一张图像表示为一个 连续的 embedding 序列 (sequence of continuous embeddings)。然后,他们使用一个参数 固定(frozen) 的预训练语言模型,将这个图像 embedding 序列作为 前缀 (prefix) 输入给模型,让模型去生成文本,比如 图像描述 (image captions)