23年5月来自华盛顿大学等多家学校和研究机构的论文“Self-Instruct: Aligning Language Models with Self-Generated Instructions“。
大型“指令调优”语言模型(即经过微调以响应指令)已经表现出将零样本推广到新任务的非凡能力。 然而,它们严重依赖于人类编写的指令数据,而这些数据通常在数量、多样性和创造力方面受到限制,因此阻碍了调优模型的通用性。
SELF-INSTRUCT,一个通过引导自己的生成来提高预训练语言模型指令跟从能力的框架。 其流水线从生成指令、输入和输出语言模型的样本、过滤掉无效或相似的样本、到最后微调原始模型。 应用于普通 GPT3,证明在SUPER-NATURALINSTRUCTIONS上比原始模型有 33% 的绝对改进,与使用私人用户数据和人工注释进行训练的 InstructGPT00的性能相当。
为了进一步评估,为新任务策划了一组专家编写的指令,并通过人工评估表明,使用 SELF-INSTRUCT 调整 GPT3 的性能大幅优于现有公共指令数据集,仅与 InstructGPT001 相比有 5% 的绝对差距。 SELF-INSTRUCT 提供了一种几乎无需标注的方法,用于将预训练语言模型与指令对齐,并且发布了大型综合数据集以促进未来指令调优的研究。
如图是SELF- INSTRUCT高级概述。 该过程从一个小的任务种子集作为任务池开始。 从任务池中抽取随机任务,用于提示现成的语言模型生成新指令和相应实例,然后过滤低质量或相似的生成结果,然后添加回初始任务存储库。 所得数据可用于稍后对语言模型本身进行指令调优,以更好地跟从指令。 图中所示的任务由GPT3生成。
数据生成流程包括四个步骤:1)生成任务指令,2)确定指令是否代表分类任务,3)使用输入优先或输出优先的方法生成实例,4)过滤低质量数据。
指令生成。第一步,SELF-INSTRUCT 以引导方式从一小组种子人工编写的指令中生成新指令。用 175 个任务(每个任务 1 个指令和 1 个实例)启动任务池。对于每一步,从这个池中抽取 8 个任务指令作为上下文示例。在这 8 条指令中,6 条来自人工编写的任务,2 条来自前几步中模型生成的任务,以促进多样性。提示模板如表所示。
分类任务识别。因为需要两种不同的分类和非分类任务方法,所以需要确定生成的指令是否代表分类任务。用来自种子任务的 12 条分类指令和 19 条非分类指令,以少样本方式提示 LM 来确定这一点。提示模板如表所示。
实例生成。给定指令及其任务类型,为每个指令独立生成实例。这很有挑战性,因为它要求模型根据指令了解目标任务是什么,找出需要哪些额外的输入字段并生成它们,最后通过生成输出来完成任务。在用来自其他任务的指令-输入-输出上下文示例提示时,预训练的 LM 可以在很大程度上实现这一点。一种自然的方法是输入优先方法,可以要求 LM 首先根据指令提出输入字段,然后生成相应的输出。这种生成顺序类似于使用模型响应指令和输入的方式,但这里使用的是来自其他任务的上下文示例。提示模板如表所示。
然而,这种方法可能会生成偏向于一个标签的输入,尤其是对于分类任务(例如,对于语法错误检测,它通常会生成语法输入)。因此提出一种用于分类任务的输出优先方法,首先生成可能的类标签,然后在每个类标签上对输入生成进行条件化。提示模板如表所示。将输出优先方法应用于前一步确定的分类任务,将输入优先方法应用于其余非分类任务。
过滤和后处理。为了鼓励多样性,只有当新指令与任何现有指令的 ROUGE-L 相似度小于 0.7 时,才会将其添加到任务池中。还排除包含某些特定关键字(例如,图像、图片、图)的指令,这些关键字通常无法被 LM 处理。在为每个指令生成新实例时,会过滤掉完全相同的实例或具有相同输入但不同输出的实例。根据启发式方法识别和过滤无效生成(例如,指令太长或太短,实例输出是输入的重复)。