LLM论文:SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions

0 Abstract

大型“指令微调”语言模型(即微调以响应指令的模型)已经展示了在零样本情况下泛化到新任务的卓越能力。然而,它们严重依赖于人类编写的指令数据,这些数据通常在数量、多样性和创造性上都是有限的,因此限制了微调模型的通用性。

我们引入了SELF-INSTRUCT,一个通过利用它们自己的生成来提升预训练语言模型遵循指令能力的框架。我们的流程从一个语言模型生成指令、输入和输出样本,然后在使用这些样本来微调原始模型前,过滤掉无效或相似的样本。

将我们的方法应用于原始的GPT3,我们展示了在SUPER-NATURAL INSTRUCTIONS上相对于原始模型33%的绝对改进,与使用私有用户数据和人类注释训练的InstructGPT001的性能相当。为了进一步评估,我们策划了一套专家编写的指令,用于新任务,并通过人类评估显示,使用SELF-INSTRUCT微调GPT3的表现,比使用现有的公共指令数据集要好很多,仅在InstructGPT001后面留下了5%的绝对差距。

SELF-INSTRUCT提供了一种几乎无需注释的方法,以使预训练语言模型与指令对齐,并且我们发布了我们的大型合成数据集,以促进未来关于指令微调的研究。

1 Introduction

最近的自然语言处理(NLP)文献见证了在构建能够遵循自然语言指令的模型方面的巨大活动量。这些发展由两个关键组成部分推动:大型预训练语言模型(LM)和人类编写的指令数据,(e.g., PROMPTSOURCE (Bach et al., 2022) and SUPER-NATURALINSTRUCTIONS (Wang et al., 2022, SU- PERNI for short))。然而,收集这样的指令数据成本高昂,且鉴于大多数人类生成倾向于流行的NLP任务,其多样性往往有限,不能真正覆盖各种任务及其描述方式的真实多样性。继续提高指令调整模型的质量和覆盖范围,需要开发替代方法来指导指令调整过程。

在这项工作中,我们引入了SELF-INSTRUCT,一个半自动化的过程,用于使用模型本身的指令信号对预训练的LM进行指令调整。

整个过程是一个迭代的引导算法(见图2),它从一个有限的(例如,在我们的研究中是175个)手动编写的任务种子集开始,这些任务用于指导整体生成。在第一阶段,模型被提示生成新任务的指令。这一步利用现有的指令集创建更广泛覆盖的指令,这些指令定义了(通常是新的)任务。鉴于新生成的指令集,框架还为它们创建了输入输出实例,这些实例随后可用于指导指令调整。最后,使用各种启发式方法自动过滤低质量或重复的指令,然后将剩余的有效任务添加到任务池中。这个过程可以重复多次,直到达到大量的任务。

这幅图提供了SELF-INSTRUCT方法的高层次概述。整个过程从一小部分任务的种子集作为任务池开始。从任务池中随机采样任务,用来提示现成的语言模型生成新的指令和相应的实例,然后过滤掉低质量或类似的生成物,并将剩余的有效任务添加回初始任务库。所得数据可用于语言模型的指令调整,以便更好地遵循指令。图中显示的任务是由GPT-3生成的。

  1. 指令生成(Step 1: Instruction Generation)

    • 语言模型(LM)接收到任务,生成新任务的指令。例如:“给我关于这个话题的一个名人名言。”
  2. 分类任务识别(Step 2: Classification Task Identification)

    • 确定生成的任务是否有效。如果是,以输出为先(Output-first)方式生成实例;如果不是,以输入为先(Input-first)方式生成。
  3. 实例生成(Step 3: Instance Generation)

    • 根据指令生成输入和输出的实例。例如,对于“找出给定文本是支持还是反对堕胎”这一任务,生成类标签(Class Label)、输入文本(Input Text)以及该任务的输出。
  4. 过滤(Step 4: Filtering)

    • 使用各种启发式方法自动过滤掉质量低下或重复的指令,只保留高质量的任务。

“任务池(Task Pool)是一组任务的集合,可以理解为一个任务库。在SELF-INSTRUCT框架下,这个任务池包含了种子任务集,也就是在开始时人工编写的一系列任务,每个任务都配有指令和至少一个示例(实例)。

在迭代过程的第一步中,语言模型(LM)会从这个任务池中随机选取一个任务。这个选取的任务包含了已经存在的指令,LM使用这些指令作为启发,以生成新的任务指令。换句话说,LM查看任务池中的现有任务,并在此基础上创造新的任务指令,这可能会定义新的任务类型。

例如,如果任务池中有一个任务是“写一个关于诚实重要性的短文”,LM可能会在这个指令的启发下生成一个新的指令,如“给我关于这个话题的一个名人名言”。然后,LM将会根据这个新生成的指令创造相应的输入和输出实例,如指令生成阶段所示的例子。

所以,“任务池”是整个迭代过程的出发点,它提供了一组初始指令,这些指令引导LM生成新的、更多样化的任务和指令,这些新生成的任务随后又经过筛选和质量控制,可能会被添加回任务池,从而丰富了任务池的内容,使其能够在未来的迭代中继续引导新的指令生成。”

为了从实证上评估SELF-INSTRUCT,我们在GPT3(Brown等,2020年)上运行了这个框架,这是一个原版的LM(§3)。在这个模型上进行的迭代SELF-INSTRUCT过程产生了大约52k条指令,配有大约82K个实例输入和目标输出。我们观察到,所得数据提供了一系列创造性的任务,如图1中的示例所示。

这些生成的任务偏离了典型NLP任务的分布,并且与种子任务的重叠相当小(§3.2)。我们将GPT3SELF-INST与其他各种模型进行了比较,这些模型既包括在SUPERNI(Wang等,2022年)中包含的典型NLP任务,也包括为指令遵循模型的新用途创建的一套新指令(§4)。结果表明,GPT3SELF-INST比GPT3(原始模型)有很大的提升(+33.1%),几乎达到了InstructGPT001的性能。此外,我们对新创建的指令集进行的人类评估显示,GPT3SELF-INST展现了广泛的指令遵循能力,超过了在其他公开可用指令数据集上训练的模型,并且仅在InstructGPT001后面留下了5%的差距。

总结而言,我们的贡献包括:(1)我们提出了SELF-INSTRUCT,这是一种用最少的人工标注数据引入指令遵循能力的方法;(2)我们通过广泛的指令调整实验证明了其有效性;(3)我们发布了一个包含52K条指令的大型合成数据集和一套手工编写的新任务集,用于构建和评估未来的指令遵循模型。

[

  1. (2) 通过指令调整实验验证效果:​​​​​​​研究者们不仅提出了这个方法,还进行了广泛的实验来证明这种新方法的有效性。他们展示了在使用SELF-INSTRUCT方法后,模型在遵循指令方面的能力有了显著提升。这是通过将微调后的模型与原始模型以及其他基准进行比较实现的。他们的实验结果显示,使用自己生成的指令数据集进行微调的模型,在执行新任务时,性能得到了大幅改善。

  2. (3) 发布大规模合成数据集和手工编写的新任务集:

      他们创建并公开了一个大型的合成数据集,这个数据集包含了52,000条由语言模型生成的指令和任务实例。此外,他们还提供了一套手工编写的新任务,这些任务是为了进一步的研究和评估未来模型的能力而设计的。这意味着其他研究者和开发者可以使用这些资源来构建和测试自己的指令遵循模型,促进整个领域的进步。

]

2 Method

为大规模指令数据做标注对于人类来说可能具有挑战性,因为它需要1)创造性地构想出新任务,以及2)专业知识来编写每个任务的解决方案。在这里,我们详细说明了我们的SELF-INSTRUCT过程,它指的是使用原始预训练的语言模型本身生成任务的流程,过滤生成的数据,然后用这些生成的数据进行指令调整,以便让语言模型更好地遵循指令。这个流程在图2中描述了出来。

2.1 Defining Instruction Data 定义ins

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值