SELF-INSTRUCT:使用自生成指令对齐语言模型

摘要

大型"指令微调"语言模型(即针对指令响应进行微调的模型)在零样本泛化到新任务方面展现出了显著的能力。然而,这类模型严重依赖于人类编写的指令数据,而这些数据通常在数量、多样性和创造性方面都较为有限,从而阻碍了微调模型的泛化能力。我们提出了 SELF-INSTRUCT 框架,用于通过语言模型自身生成内容来提升其对指令的响应能力。我们的流程从语言模型中生成指令、输入和输出样本,然后过滤掉无效或过于相似的内容,再用这些数据对原始模型进行微调。将该方法应用于原始 GPT3 后,我们在 SUPER-NATURALINSTRUCTIONS 上取得了 33% 的绝对提升,达到了与 InstructGPT001 相当的性能,而后者是使用私有用户数据和人工注释训练得到的。为了进一步评估,我们构建了一组由专家撰写的新任务指令,并通过人工评估表明,使用 SELF-INSTRUCT 微调的 GPT3 在性能上远超使用现有公开指令数据集的结果,仅比 InstructGPT001 落后 5% 的绝对差距。SELF-INSTRUCT 提供了一种几乎不依赖人工注释的方法,用于将预训练语言模型对齐至指令任务,同时我们公开了大规模的合成数据集以促进未来在指令微调方向的研究。

1 引言

近期自然语言处理(NLP)领域在构建能够理解自然语言指令的模型方面取得了大量进展(Mishra et al., 2022; Wei et al., 2022; Sanh et al., 2022; Wang et al., 2022; Ouyang et al., 2022; Chung et al., 2022 等)。

这一进展主要依赖于两个关键组成部分:大型预训练语言模型(LM)和人类编写的指令数据(例如 PROMPTSOURCE(Bach et al., 2022)和 SUPERNATURALINSTRUCTIONS(Wang et al., 2022,以下简称 SUPERNI))。然而,收集此类指令数据成本较高,且通常缺乏多样性,因为大多数人类编写的内容集中在常见的 NLP 任务上,难以涵盖任务类型和描述方式的真正多样性。若要持续提升指令微调模型的质量与覆盖范围,就必须探索监督指令微调过程的替代方法。

在本研究中,我们提出了 SELF-INSTRUCT,这是一种半自动化流程,用于利用模型自身生成的指令信号对预训练语言模型(LM)进行指令微调。整体流程是一个迭代的自举算法(见图2),其初始阶段从一个规模有限(例如我们实验中为175条)的人工编写任务集合出发,用于引导整个生成过程。在第一阶段,模型会被提示生成新的任务指令。这一步通过现有的指令集合,生成更广覆盖范围的指令,用以定义(通常是新的)任务。对于新生成的指令集合,该框架还会为其创建对应的输入-输出示例,以供后续监督指令微调使用。最后,我们采用多种启发式规则自动过滤掉低质量或重复的指令,在此基础上将剩余有效任务加入任务池中。该过程可以重复进行多轮,直到获得一个规模较大的任务集合。

为了对 SELF-INSTRUCT 进行实证评估,我们在 GPT3(Brown et al., 2020)这一原始语言模型(§3)上运行该框架。经过若干轮迭代的 SELF-INSTRUCT 过程后,我们获得了大约 52K 条指令 ,以及约 82K 条输入和目标输出实例 。我们观察到,最终得到的数据涵盖了丰富多样且具有创造性的任务类型,部分示例见图1。这些生成任务明显偏离了典型 NLP 任务的分布,与最初种子任务的重合度也非常小(§3.2)。在此基础数据上,我们通过微调 GPT3(即用于生成这些指令数据的同一模型)构建了 GPT3SELF-INST。我们将 GPT3SELF-INST 与多个其他模型进行了比较评估,任务覆盖包括 SUPERNI(Wang et al., 2022)中的典型 NLP 任务,以及一组用于评估模型指令理解能力的新指令集合(§4)。实验结果表明,GPT3SELF-INST 相比 GPT3(原始模型)性能提升显著(+33.1%),并接近 InstructGPT001 的表现。此外,我们在人类评估中新构建的任务指令集上也发现,GPT3SELF-INST 展示出了广泛的指令理解能力,超越了基于其他公开指令数据集训练的模型,距离 InstructGPT001 仅有 5% 的绝对差距。

总之,我们的贡献包括

(1) 提出了一种几乎不依赖人工标注数据的指令学习方法 SELF-INSTRUCT;

(2) 通过大规模指令微调实验验证了其有效性;

(3) 公开了一个包含 52K 条指令的大规模合成数据集以及一组人工编写的新颖任务,用于构建和评估未来的指令响应模型。

2 方法

对于人类而言,标注大规模的instruction数据是具有挑战性的,因为这需要:1)具有创造力,能够提出新颖的任务;2)具备专业知识,能够编写每个任务的解决方案。在本节中,我们详细介绍SELF-INSTRUCT的流程,即利用一个vanilla预训练语言模型自身生成任务,对生成的数据进行筛选,然后使用这些数据进行instruction tuning,从而使语言模型更好地遵循指令。该流程如图2所示。

2.1 指令数据的定义

我们希望生成的指令数据包含一组指令 I t {I_t} It,每个指令以自然语言定义一个任务 t t t。任务 t t t 具有 n t ≥ 1 n_t \geq 1 nt≥1 个输入-输出实例 ( X t , i , Y t , i ) i = 1 n t {(X_{t,i}, Y_{t,i})}_{i=1}^{n_t} (Xt,i,Yt,i)i=1nt。给定任务指令和对应输入,模型 M M M 应该能够输出对应结果:

M ( I t , X t , i )    =    Y t , i M ( I _ { t } , X _ { t , i } ) \; = \; Y _ { t , i } M(It,Xt,i)=Yt,i, 对于 i ∈ { 1 , ... , n t } i \in \{ 1 , \dots , n _ { t } \} i∈{1,...,nt} ,需要注意的是,在许多情况下,指令与实例输入之间的界限并不严格。例如,"写一篇关于校园安全的文章"可以是一个完整的有效指令,我们期望模型直接对其做出响应;也可以表述为"写一篇关于以下主题的文章"作为指令,"校园安全"作为实例输入。为了鼓励数据格式的多样性,我们允许包含不需要额外输入(即 X X X 为空)的指令。

2.2 自动指令数据生成

我们的数据生成流程包括四个步骤:

1)生成任务指令,

2)判断该指令是否表示分类任务,

3)使用输入优先或输出优先的方法生成实例,

4)过滤低质量数据。

指令生成

第一步,SELF-INSTRUCT以自举方式从一小组种子人工撰写的指令中生成新的指令。我们初始化任务池时包含175个任务(每个任务1个指令和1个实例)1。在每一步中,我们从任务池中采样8个任务指令作为in-context示例,其中6个来自人工撰写的任务,2个来自之前模型生成的任务,以促进多样性。提示模板见表5。

分类任务识别

由于我们对分类任务和非分类任务采取不同的实例生成方法,因此下一步是判断生成的指令是否是一个分类任务。我们使用few-shot的方式提示语言模型进行判断,使用种子任务中的12个分类指令和19个非分类指令进行提示。提示模板见表6。

实例生成

给定指令及其任务类型后,我们为每个指令独立生成实例。这一过程具有挑战性,因为模型需要理解目标任务、推断所需的输入字段并生成它们,最后完成该任务的输出。我们发现,预训练语言模型在提供instruction-input-output的in-context示例后,能够在很大程度上完成此任务。一种自然的方式是输入优先(Input-first)方法,即我们先让模型根据指令生成输入字段,然后生成对应输出。这种生成顺序类似于模型对输入指令作出响应的方式,只是此处有来自其他任务的in-context示例。提示模板见表7。

然而,我们发现该方法在分类任务中会生成对某一类别偏向的输入(例如,对于语法错误检测任务,往往生成语法正确的句子)。因此,我们提出了输出优先(Output-first)方法用于分类任务,首先生成可能的类别标签,再基于每个类别标签生成输入。提示模板见表8。我们对上一步中识别出的分类任务采用输出优先方法,对其他非分类任务采用输入优先方法。

筛选与后处理

为了鼓励多样性,只有当新指令与现有任何指令的ROUGE-L相似度低于0.7时,才将其加入任务池。我们还排除包含特定关键词(例如image, picture, graph)的指令,因为这些通常无法被语言模型处理。在为每个指令生成新实例时,我们会过滤掉完全重复的实例,或者具有相同输入但输出不同的实例。我们还通过启发式方法识别并过滤无效生成(例如:指令过长或过短,实例输出是输入的重复等)。

2.3 指令微调语言模型

在构建了大规模的指令数据后,我们用这些数据对原始语言模型进行微调(即SELF-INSTRUCT)。具体做法是将指令与实例输入拼接为提示(prompt),训练模型在监督学习框架下生成对应的实例输出。为了增强模型对不同格式的鲁棒性,我们使用多种模板来编码指令与实例输入。例如,指令前可以加上"Task:",输入前可以加上"Input:",结尾可以加上"Output:",中间可以使用不同数量的换行符等。

3 SELF-INSTRUCT Data from GPT3

在本节中,我们将所提出的生成指令数据的方法应用于 GPT3,作为一个案例研究。我们使用通过 OpenAI API 访问的最大规模的 GPT3 模型(即 "davinci" 引擎)来进行实验。6 查询时所用的参数详见附录 A.2。下面我们将介绍生成数据的基本概况。

3.1 统计信息

表 1 展示了所生成数据的基本统计信息。经过过滤后,我们共生成了超过 52K 条指令,以及对应的超过 82K 条实例。

3.2 多样性

为了研究生成的指令属于哪些类型以及它们的多样性,我们分析了生成指令中的动词-名词结构。我们使用 Berkeley Neural Parser⁷(Kitaev 和 Klein, 2018;Kitaev 等,2019)对指令进行句法分析,并提取最接近句子根部的动词及其第一个直接宾语名词。在 52,445 条指令中,有 26,559 条包含这种结构;其余指令通常包含更复杂的从句(例如,"判断这条推文是否包含政治内容。")或以疑问句形式表述(例如,"以下哪些陈述是正确的?")。我们在图 3 中绘制了最常见的 20 个根动词及其前 4 个直接宾语名词的统计,这些动词结构占据了整个数据集的 14%。总体来看,这些指令在意图和文本格式上表现出相当多样化的特征。

我们进一步研究了生成指令与用于提示生成的种子指令之间的差异。对于每条生成指令,我们计算其与 175 条种子指令中任意一条的最高 ROUGE-L 相似度,并在图 4 中绘制了这些相似度分布。结果显示,系统生成了大量新的指令,它们与原始种子指令重叠较少。此外,我们在图 5 中展示了生成指令的长度、实例输入的长度和实例输出的长度分布,以进一步体现其多样性。

3.3 质量

目前我们已展示了生成数据的数量与多样性,但其质量仍需验证。为此,我们随机抽取了 200 条指令,并从每条指令中随机选择 1 个实例。我们请一位专家标注者(本文作者之一)评估每个实例是否合理,包括其指令、实例输入与实例输出是否匹配。表 2 中的评估结果表明,大多数生成指令都是有意义的,而实例中虽然存在一定噪声,但仍处于可接受范围内。

我们还发现,即使某些生成内容存在错误,它们在格式上通常是正确的,或至少部分正确,仍可作为训练模型遵循指令的有用信号。我们在表 10 和表 11 中分别列出了若干优质示例与劣质示例。


4 实验结果

我们进行了实验,以评估并比较模型在不同指令微调设置下的性能。本节首先介绍我们的模型和对比基线,随后呈现实验结果。

4.1 G P T 3 S E L F − I N S T GPT3_{SELF-INST} GPT3SELF−INST:在自身指令数据上微调 GPT3

基于生成的指令数据,我们使用 GPT3 模型本身(即 "davinci" 引擎)进行指令微调。如第 §2.3 节所述,我们使用不同的模板将指令与输入拼接,并训练模型生成对应的输出。该微调通过 OpenAI 的微调 API⁸ 完成。我们采用默认超参数,但将 prompt loss weight 设为 0,并将模型训练 2 个 epoch。更多微调细节可参见附录 A.3。最终得到的模型我们称为 G P T 3 S E L F − I N S T GPT3_{SELF-INST} GPT3SELF−INST。

4.2 基线模型

预训练语言模型

我们评估了 T5-LM(Lester et al., 2021;Raffel et al., 2020)和 GPT3(Brown et al., 2020)这两个未经过任何指令微调的语言模型。它们作为"vanilla"语言模型基线,用以衡量预训练模型在无微调条件下对指令的自然理解能力。

公开的指令微调模型

T0 和 T𝑘-INSTRUCT 是分别由 Sanh et al. (2022) 与 Wang et al. (2022) 提出的两个指令微调模型,已被验证能较好地完成多种 NLP 指令任务。这两种模型均在 T5(Raffel et al., 2020)检查点的基础上微调而成,并已公开可用。在实验中,我们使用它们的最大版本,即拥有 11B 参数的模型。

温馨提示:

阅读全文请访问"AI深语解构 " SELF-INSTRUCT:使用自生成指令对齐语言模型

相关推荐
Jay Kay1 小时前
TensorFlow源码深度阅读指南
人工智能·python·tensorflow
FF-Studio1 小时前
【硬核数学 · LLM篇】3.1 Transformer之心:自注意力机制的线性代数解构《从零构建机器学习、深度学习到LLM的数学认知》
人工智能·pytorch·深度学习·线性代数·机器学习·数学建模·transformer
会的全对٩(ˊᗜˋ*)و1 小时前
【数据挖掘】数据挖掘综合案例—银行精准营销
人工智能·经验分享·python·数据挖掘
云渚钓月梦未杳1 小时前
深度学习03 人工神经网络ANN
人工智能·深度学习
在美的苦命程序员1 小时前
中文语境下的视频生成革命:百度 MuseSteamer 的“产品级落地”启示录
人工智能·百度
kngines1 小时前
【字节跳动】数据挖掘面试题0007:Kmeans原理,何时停止迭代
人工智能·数据挖掘·kmeans
Kali_071 小时前
使用 Mathematical_Expression 从零开始实现数学题目的作答小游戏【可复制代码】
java·人工智能·免费
贾全1 小时前
第十章:HIL-SERL 真实机器人训练实战
人工智能·深度学习·算法·机器学习·机器人
每日摸鱼大王2 小时前
互联网摸鱼日报(2025-07-01)
人工智能
GIS小天2 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年7月4日第128弹
人工智能·算法·机器学习·彩票