SELF-INSTRUCT Aligning Language Models with Self-Generated Instructions
摘要
通过模型自己生成指令、输入输出,然后在使用它们对原始模型进行微调之前,过滤掉无效或相似的样本。
SELF-INSTRUCT:一个通过利用预训练语言模型自身生成内容来提升其指令遵循能力的框架。
整理了一组专家编写的用于新颖任务的指令,并通过人工评估表明,使用 SELF-INSTRUCT 对 GPT3 进行调优,相比使用现有的公共指令数据集,性能有大幅提升,与 InstructGPT001 仅存在 5% 的绝对差距。
指令调优模型:用 指令-输入-输出 做监督学习的微调模型
Intro
指令遵循模型成功的两大支柱:模型本身(强大的预训练语言模型)和高质量的训练数据(人工编写的指令数据)
问题:
- 成本高昂
- 多样性有限,人写的一般只会包含常见的NLP任务如翻译、总结
SELF-INSTRUCT:
- 在第一阶段,模型被提示(prompted)生成新任务的指令。利用现有的指令集合来创建覆盖范围更广的指令,这些指令定义了(通常是新颖的)任务。
- 第二阶段,判断指令对应的任务是否为分类任务
- 第三阶段,如果是分类任务类型则先生成输出再生成输入否则先生成输入后生成输出
- 第四阶段,过滤掉重复和无用的
经过循环自举,self-instruct机制生成了种类非常丰富的instruction:
基于这些生成的数据,我们通过对 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 条来自之前步骤中模型生成的任务,以促进多样性。
- 分类任务识别:以少样本(few-shot)方式提示语言模型来判断这一点,使用了来自种子任务的 12 条分类指令和 19 条非分类指令。
Instance Generation:当使用来自其他任务的“指令-输入-输出”上下文示例进行提示时,预训练语言模型在很大程度上能够做到根据指令理解目标任务是什么,找出需要哪些额外的输入字段并生成它们,最后通过生成输出来完成任务。
- input-first:先生成输入再生成输出的策略。这种方法可能会生成偏向于某个特定标签的输入,特别是对于分类任务(例如,对于语法错误检测任务,它通常会生成语法正确的输入)。
- Output-first Approach:首先生成可能的类别标签,然后根据每个类别标签生成输入
- input-first:先生成输入再生成输出的策略。这种方法可能会生成偏向于某个特定标签的输入,特别是对于分类任务(例如,对于语法错误检测任务,它通常会生成语法正确的输入)。
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
Diversity
使用 Berkeley 神经网络解析器提取最接近根节点的动词及其第一个直接名词宾语
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,不进行核采样),并且没有使用特定的停止序列。
SELF-INSTRUCT 能够大幅提升 GPT3 的性能(+33.1%)
几乎与 InstructGPT001 的性能持平。
即使在已有大量标注指令数据的情况下,它也能进一步提升性能
原始的 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:响应不相关或完全无效
Effect of Data Size and Quality
更多这种生成的数据能否带来更好的指令遵循能力呢?
通过从生成的数据集中抽取不同数量的指令子集,用这些子集微调 GPT3,并评估由此得到的模型在 252 个面向用户的指令集上的表现,从而对生成数据的规模进行了分析
随着数据规模的增长,性能持续提升。然而,这种提升在达到 16,000 条指令后几乎趋于平稳。
有趣的是,当在 SUPERNI 上进行评估时,我们发现模型的性能提升在数百条指令左右就更早地趋于平稳。
这可能是由于新生成的数据与 SUPERNI 中典型的 NLP 任务有所不同,这表明未来的研究可能受益于结合使用不同的指令数据,以在各种类型的任务上获得更好的性能。
另一个提高模型性能的方向是利用我们生成的数据并获得更好的监督信号(减少噪声)。通过使用 InstructGPT003(当时可用的最佳通用模型),根据指令和输入重新生成我们所有实例的输出字段,从而探索了这一想法
这可以被视为使用我们的数据对 InstructGPT003 进行的一种知识蒸馏。
由此得到的模型比使用原始数据训练的对应模型性能高出 10%,这表明未来在利用我们的生成流水线获取初始数据,然后通过人类专家或从更优模型进行知识蒸馏来提高数据质量方面,有很大的研究空间。
Related Work
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)。这可能会给那些没有大型计算资源的人造成使用障碍
强化语言模型偏见。 作者关注的一个问题是这种迭代算法可能带来的意外后果,例如问题性社会偏见(关于性别、种族等的刻板印象或污蔑言论)的放大。
该算法难以生成平衡的标签,这反映了模型先前的偏见。
SELF-INSTRUCT Aligning Language Models with Self-Generated Instructions