【论文阅读】Finetuned Language Models Are Zero-Shot Learners

前言

Abstract

本文探讨了一种提高语言模型 zero-shot 学习能力的简单方法。我们展示了,instruction tuning(指令优化)–将语言模型在通过指示描述的数据集集合上进行微调–可观地提升了在不可见任务上的 zero-shot 性能。

我们采用了一个 137B 参数的预训练语言模型,并在60多个通过自然语言指令模板语言化的NLP数据集上进行指令优化。我们在不可见任务类型上测试了这个 instruction-tuned 模型,我们称之为 FLANFLAN在很大程度上提高了其未修改对应版本的性能,并且在我们评估的25个数据集中的20个上都超过了 zero-shot 175B GPT-3FLAN甚至在 ANLI,RTE,BoolQ,AI2-ARC,OpenbookQA,StoryCloze上超过 few-shot GPT-3很多。消融研究表明,微调数据集的数量、模型规模和自然语言指令是 instruction tuning 成功的关键。

在这里插入图片描述

  • 在左边的一些语义分析,翻译等任务上进行 instruction tuning,然后拿到右边没有见过的任务类型上进行推理(zero-shot)

在这里插入图片描述

1.Introduction

大规模语言模型(GPT-3),已经被证明可以在 few-shot 学习上表现得很好,然而你,他们在 zero-shot 学习上就差得多。比如,GPT-3在阅读理解、问题回答和自然语言推理等任务上的 zero-shot 表现要比 few-shot 表现差得多。一个潜在的原因是,如果没有 few-shot 示例,模型就很难在与预训练数据格式不相似的提示中表现良好。

本文,我们提出了一个可以提高大规模语言模型 zero-shot 能力的简单方法。

  • 利用了直觉:NLP任务可以通过自然语言指令来表示
    • 就是将NLP任务用指令的形式表达,比如:”将xxx翻译成中文“,”这个影评是顶还是踩?“。这些都是指令,同时也是NLP任务

我们采用了一个有 137B 参数的预训练语言模型,并且实施 instruction tuning:使用超过60个由自然语言指令表达的NLP数据集的混合数据 finetune 模型

我们将这个结果模型称为 FLAN,就是 Finetuned Language Net

为了评估FLAN在不可见任务上的 zero-shot 性能,我们根据NLP数据集的任务类型将其分组,并保留每个组进行评估,同时在所有其他组上对FLAN进行指令调优

  • 这种设置能够保证,在 instruction tuning 的时候,没有见过任何推理时的任务。

实验结果:测评显示,FLAN大大提高了基础的137B参数模型的 zero-shot 性能。在评估的25个数据集上,FLAN 的 zero-shot 在20个数据集上都优于 175B 参数的 GPT-3 zero-shot,甚至在 ANLI, RTE, BoolQ, AI2-ARC, OpenbookQA, and StoryCloze上比 GPT-3 的 few-shot 都领先一大截。在消融学习中,我们发现,在 instruction tuning中增加任务集群(组)的数量可以提高不可见任务的性能,而且只有在足够的模型规模下,instruction tuning的好处才会显现出来。

Instruction tuning使用通过微调的监督来改善语言模型对推理时文本交互的响应,来结合 pretrain-finetuneprompting 范式的优点。

在这里插入图片描述

2.FLAN:Instruction Tuning Improves Zero-shot Learning

Instruction tuning的动机是提高语言模型对NLP指令的响应能力。其想法是,通过使用监督来教LM执行通过指令描述的任务,LM将学会遵循指令,甚至对不可见任务也会这样做。

2.1.Tasks & Templates

因为从头创建一个包含许多任务的 instruction tuning 数据集是很消耗资源的,我们将研究社区的现有数据集转换为教学格式。我们将Tensorflow数据集上公开的62个文本数据集(包括语言理解和语言生成任务)聚合为一个单一的混合。

在这里插入图片描述

  • 每一个数据集都被分类为十二个任务中的一个
  • 在同一个类中的数据集具有相同的任务类型

对每个数据集,我们都使用自然语言指令,手动创作了十个独一无二的模板来描述这个数据集的任务。

  • 十个样例的大部分都是用来描述原始任务的
  • 为了增加多样性,对于每个数据集,我们还包括多达三个“扭转任务”的模板。(eg:对于情感分类,我们包含要求生成电影评论的模板)

然后,我们在所有数据集的混合上对预训练的语言模型进行 instruction tune,每个数据集中的示例通过该数据集随机选择的指令模板进行格式化。下面展示了一些对一个自然语言推理数据集的指令模板

在这里插入图片描述

2.2.Evaluation Splits

我们对 FLANinstruction tuning 时没见过的任务上表现怎么样,因此定义什么是未见过的任务是很关键的。然而,以前的工作都通过避免相同的数据在训练时出现来定义未见任务,我们用了更传统的定义,使用了图3中的任务类别。本工作中,如果在 instruction tuning 时没有任何 D D D 属于的任务类别的数据集被观测到,我们就认为数据集 D D D 在评估时是未见的。因此,在 c c c 个任务类别上评估 zero-shot FLAN,我们需要 instruction tune c c c 个模型,其中的每个模型都保留一个不同的任务类别用于评估。

2.3.Classification with Options

给定任务的输出空间要么是一些类别中的一个(分类),要么是任意文本(生成)。由于FLAN是纯解码器语言模型的指令调优版本,它自然以自由文本的形式响应,因此对于生成任务不需要进一步修改。

对于分类任务,前面的工作使用了排序分类方法。比如,只有两个输出(“yes” or “no”)被考虑,概率大的那个被作为模型的预测。尽管这种方式在逻辑上是合理的,它其实是不完美的。因为答案的概率质量可能在说每个答案的方式中有不期望的分布(大量说"yes"的替代方式可能会降低分配给"yes"的概率质量)。??没太懂??
因此,我们包含一个options后缀,在这个后缀中,我们将token options附加到分类任务的末尾,并附带该任务的输出类别列表。这使得模型在响应分类任务时知道哪些选择是想要的。

2.4.Training Details

模型架构与预训练:我们使用的是 LaMDA-PT,一个137B 参数的,从密集的从左到右的,只有解码器的 transformer 语言模型。该模型在包含web文档(包括那些带有计算机代码的文档)、对话数据和维基百科的集合上进行预先训练,该集合被使用SentencePiece库标记为2.49T BPE token和32k词汇表。大约 10% 的预训练数据是非英语的。注意,LaMDA-PT只有语言模型预训练(LaMDA用对话进行微调了)。

指令调优过程FLAN 是 LaMDA-PT 的指令调优版本。我们的指令调优混合所有数据集,并从每个数据集中随机采样。为了平衡数据集的不同大小,我们将每个数据集的训练示例数量限制为30000个。同时,存在一些数据集,它们的训练示例数量比较少(例如,CommitmentBank只有250个),为了防止这些数据集被边缘化,本文采用示例-比例混合方案(Raffel et al., 2020),混合率最高为 3K。我们使用学习率为 3 e − 5 3e^{-5} 3e5 的Adafacotor优化器,一个batch 8192 tokens 来对所有模型进行 30k 梯度步的微调。微调时输入和目标序列的长度分别是1024和256。我们使用paking(Raffel et al., 2020)将多个训练示例组合成单个序列,使用特殊的EOS令牌将输入与目标分离。instuction tuning在 128核的TPUv3上花了大约60小时。

3.Results

我们在自然语言推理,阅读理解,closed-book QA(闭卷问答),翻译,常识推理,conference resolution(共指消解),struct-to-text(文本结构)上测试了FLAN。对于每个数据集,我们评估所有模板(每个数据集有十个模板)的平均性能,它代表给定一个典型的自然语言指令的预期性能。由于验证集有时可用于手动提示工程(Brown et al.2020),对于每个数据集,我们也使用具有最佳验证集性能的模板获得测试集性能。(就是使用了在验证集上性能最好的模板

为了进行对比,我们使用与GPT-3相同的 prompt(因为LaMDA-PT在不进行 instruction tuning的情况下不适用于自然指令),报告LaMDA-PT的 zero 和 few-shot 结果。这最直接提供了 instruction tuning到底有多大帮助。instruction tuning在大多数数据集上都大幅度提升了 LaMDA-PT。

我们也展示了 175B 参数的 GPT-3和 GLaM 64B/64E 的zero-shot表现,像他们各自的论文中报道的那样。使用最好的验证模板,zero-shot FLAN在25个数据集中的20个上都优于 zero-shotGPT-3,甚至在10个数据集上超过了 GPT-3 few-shot。使用最好的验证模板,zero-shot FLAN在19个可获得数据集的13个上都超过了 zero-shot GLAM,在其中的11个上超过了 one-shot GLAM

总的来说,我们观察到,instruction tuning 在能够自然表示为指令的任务(NLI,QA,翻译,struct-to-text)上很有效,对于直接表示为语言建模的任务(例如,常识推理和共指消解任务,格式为完成一个不完整的句子或段落)低效一些,这里指令很大程度上是多余的。

在自然语言推理,阅读理解,闭卷QA,翻译的结果如下图所示

在这里插入图片描述

  • Natural language inference(NLI)在五个NLI数据集上,模型需要决定在给定前提的情况下,假设是否正确。FLAN 超过所有的 baseline 一大段。为什么 GPT-3 在NLI 上表现得不好的一个可能原因是:NLI样本不太可能自然地出现在一个无监督的训练集中,因此被笨拙地表示为一个连续的句子。对FLAN来说,我们表示NLI为一个更自然的问题“Does mean taht ?”,导致更高的性能
  • Reading comprehension.在阅读理解方面,模型被要求回答关于所提供的文章的问题时,FLAN优于MultiRC(Khashabi et al.,2018)和OBQA (Mihaylov et al.,2018)的 baseline。在BoolQ上(Clark et al,2019a), FLAN的性能大大优于GPT-3,尽管LaMDA-PT已经在BoolQ上实现了高性能
  • Closed-book QA.对闭卷问答,要求模型在没有特定的包含答案信息的情况下回答关于世界的问题,FLAN在所有的四个数据集上都超过了 GPT-3。与GLaM相比,FLAN在ARC-e和ARC-c上有更好的性能,在NQ和TQA上稍微滴一点点。
  • Translation.与GPT-3类似,LaMDA-PT的训练数据大约90%是英语,包括一些其他语言的文本,这些文本没有专门用于训练模型执行机器翻译。我们还评估了FLAN在GPT-3论文中评估的三个数据集的机器翻译性能:French–English from WMT’14 (Bojar et al., 2014),and German–English and Romanian–English from WMT’16 (Bojar et al., 2016)。与GPT-3相比,FLAN在所有六种评估中都优于 zero-shot GPT-3,尽管在大多数情况下它不如 few-shot GPT-3。与GPT-3类似,FLAN在翻译成英语方面表现出很强的效果,并且优于有监督翻译的 baseline。然而,从英语翻译成其他语言,相对弱一些。这是意料之中的,因为 FLAN 使用英文句子分词器,且大多数预训练数据都是英文。
  • Additional tasks.尽管在上面的任务类别上看到很好的结果,instruction tuning有一个限制就是对于很多语言建模任务(常识推理/共指消解任务表示为句子补充),没有提升效果。对七个常识推理和共指消解任务,FLAN只在其中的三个上超过了LaMDA-PT。这个消极的结果表明,当下游任务与原始语言建模预训练目标相同时(指令很大程度上是多余的),instruction tuning就没用了

4.Ablation studies & Further Analysis

4.1.Number of instruction tuning clusters

由于我们论文的核心问题是指令调优如何提高模型在不可见任务上的 zero-shot 性能,在第一个消融中,我们研究了指令调优中使用的集群和任务的数量如何影响性能。对于这种设置,我们将NLI、闭卷QA和常识推理作为评估集群,并使用剩下的7个集群进行 instruction tuning。我们展示了1到7个指令调优集群的结果,其中按每个集群的任务数量递减的顺序添加。

正如预期的那样,当我们向指令调优中添加额外的集群和任务(情绪分析集群除外)时,我们观察到三个保留集群的平均性能有所提高,这证实了我们提出的指令调优方法对新任务的 zero-shot 性能的好处。对于我们测试的七个集群,可以看到,性能没有出现饱和,这说明如果有更多集群加入到 instruction tuning 中,性能可能会进一步提高。值得注意的是,尽管我们从情感分析集群中看到了最小的增加值,但这种消融并不足以让我们得出哪个指令调优集群对每个评估集群贡献最大的结论。

在这里插入图片描述

4.2.Scaling laws

Brown等人(2020)表明,对于较大的模型,语言模型的 zero-shot 和 few-shot 能力会大幅提高,接下来我们将探讨instruction tuning的好处是如何受到模型规模影响的。

在这里插入图片描述

我们看到,对于100B量级参数的两个模型,指令调优在很大程度上提高了保留任务的性能,这与本文先前的结果一致。然而,对于8B和更小的模型,instruction tuning实际上损害了性能。一个可能的解释是:对于小规模模型,学习在 instruction tuning阶段的大约40个任务就充满了整个模型的容量,导致这些模型在新任务上表现得更差。根据这种可能的解释,对于规模较大的模型,instruction tuning填补了一些模型容量,但也教会这些模型如何遵循指令,允许它们用剩余的容量泛化到新的任务

4.3.Role of instructions

最后一个消融学习,我们探索了微调时 instructions 的作用。因为一个可能的原因是,表现的提升完全来源于多任务 fine-tuning,不使用 instruction 模型也能得到这么好的结果。因此,我们在没有指令的情况下考虑两种 finetune 设置。

  • 在 no template的设置下,只有输入和输出被给到模型(eg.对于翻译,输入和输出分别是两个句子)
  • 在 dataset name设置下,每个输入都带有任务和数据集名称的前缀(eg.翻译为 French,输入是:“[Translation: WMT’14 to French] The dog runs.”)

我们将这两种消融与使用自然指令(eg.“Please translate this sentence to French: ‘The dog runs.’”)的FLAN的微调过程进行比较。我们在图5中展示了对四个保留集群的评估。

在这里插入图片描述

对于无模板设置,我们在 zero-shot 推理期间使用FLAN指令(因为如果我们不使用模板,模型将不知道执行什么任务)。对于只在数据集名称进行微调,我们报告了使用 FLAN instruction 和 使用数据集名称的 zero-shot 性能。这两种消融设置的表现都远低于 FLAN,意味着在训练时使用指令对在未见任务上的 zero-shot 性能是很重要的

4.4.Instructions with few-shot examples

至此,我们国柱的是在 zero-shot 设置上的 instruction tuning。这里,我们学习当推理时可以获得 few-shot 样本时,怎么来利用 instruction tuning。few-shot设定的格式建立在 zero-shot 格式的基础上。对一些输入 x x x 和 输出 y y y,让 i n s t r u c t ( x ) instruct(x) instruct(x) 作为 zero-shot 指令。然后,给定 k k k 个 few-shot 样本 ( x i , y i ) i = 1 k (x_i,y_i)_{i=1}^k (xi,yi)i=1k 和一个新的输入 x x x。对于新的 few-shot 设置的指令格式是 instruct ⁡ ( x 1 ) ⊕ y 1 ⊕ \operatorname{instruct}\left(x_1\right) \oplus y_1 \oplus instruct(x1)y1 instruct ( x 2 ) ⊕ y 2 ⊕ … ⊕ instruct ⁡ ( x k ) ⊕ y k ⊕  instruct  ( x ) \left(x_2\right) \oplus y_2 \oplus \ldots \oplus \operatorname{instruct}\left(x_k\right) \oplus y_k \oplus \text { instruct }(x) (x2)y2instruct(xk)yk instruct (x),其中 ⊕ \oplus 表示字符串连接,其中插入分隔符标记。在训练和推理时,从训练集中随机抽取样本,样本数量限制在16个,使总序列长度小于960个 token。我们的实验使用了与§3相同的任务划分和评估步骤,以至于,未见任务的few-shot 样例仅在推理时被使用。

如下图所示,与 zero-shot FLAN 相比,few-shot 样本在所有任务类别上都有提升。样本对于输出空间大,复杂的任务尤其有效(struct to text,翻译,闭卷问答),可能因为样本帮助模型更好地理解了输出格式。另外,对所有的任务类别,模板之间的标准偏差较低,意味着减少了提示工程的敏感性。

在这里插入图片描述

4.5.Instruction tuning facilitates prompt tuning

正如我们所看到的,指令调优提高了模型响应指令的能力,因此,如果FLAN确实更适合执行NLP任务,那么它在使用 soft prompt(由通过 prompt tuning 优化的预置连续变量表示)执行推理时也应该获得更好的性能。作为进一步分析,我们依照2.2中的类别划分对SuperGLUE中的每个任务进行连续 prompt 训练,这样的话,当对任务 T 进行 prompt-tuning时,没有鱼 T 相同簇的任务会在 instruction tuning时被看到。我们的 prompt tuning设置遵循了Lester等人(2021)的过程,除了我们使用的提示长度为10,权重衰减为1e-4,并且没有在注意力评分上使 dropout。我们在初步实验中发现,这些变化提高了LaMDA-PT的性能。

在这里插入图片描述

图10.显示了使用完全监督训练集和只有32个训练示例的低资源设置时这些提示调优实验的结果。我们看到,在所有场景中,提示调优在FLAN(蓝色的)上比在LaMDA-PT(灰色的)上工作得更好。在许多情况下,特别是对于低资源设置,FLAN上的提示调优甚至比LaMDA-PT上的提示调优提高了10%以上。这个结果以另一种方式说明了指令调优如何产生更适合执行NLP任务的 checkpoint。

5.Related work

6.Discussion

7.Conclusion

本文探索了一种简单的方法来只基于 instruction,提高大规模语言模型执行zero-shot 任务的能力。我们的 instruction-tuned 模型,FLAN,与GPT-3相比更具优势,并且显示了大规模语言模型遵循 instruction 的潜在能力。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长命百岁️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值