【自然语言处理】【ChatGPT系列】FLAN:微调语言模型是Zero-Shot学习器

FLAN: 微调语言模型是Zero-Shot学习器
《Finetuned Language Models are Zero-shot Learners》

论文地址:https://arxiv.org/abs/2109.01652

一、简介

​ 大语言模型(例如GPT-3\text{GPT-3}GPT-3)已经展现出了非常好的few-shot learning\text{few-shot learning}few-shot learning的能力。然而,在zero-shot learning\text{zero-shot learning}zero-shot learning上并不成功。例如,GPT-3\text{GPT-3}GPT-3在阅读理解、问答和自然语言推断上的zero-shot\text{zero-shot}zero-shot效果远差于few-shot\text{few-shot}few-shot。一个潜在的原因是,不使用few-shot\text{few-shot}few-shot样例模型很难在与预训练数据形式不一样的prompts\text{prompts}prompts上表现良好。

​ 本文探索一种改善大语言模型zero-shot\text{zero-shot}zero-shot效果的简单方法,这将扩大语言模型的受众。利用一个直觉:NLP\text{NLP}NLP任务可以通过自然语言指令来描述,例如:"这篇影评是正面还是负面?“或者"将how are you翻译为中文”。本文在137B\text{137B}137B参数的预训练语言模型上执行instruction tuning\text{instruction tuning}instruction tuning,即通过自然语言指令在60个NLP\text{NLP}NLP任务混合数据集上微调模型。这个模型称为FLAN\text{FLAN}FLAN,即Finetuned Language Net\text{Finetuned Language Net}Finetuned Language Net

​ 为了评估FLAN\text{FLAN}FLAN在未见过任务上的zero-shot\text{zero-shot}zero-shot效果,根据任务类型将NLP\text{NLP}NLP数据集分为不同的组,将一个组的任务留出来,然后在其他组上微调FLAN\text{FLAN}FLAN。如上图1所示,为了评估FLAN\text{FLAN}FLAN在执行自然语言推理的能力,在常识推理、翻译和情感分析等广泛的NLP\text{NLP}NLP任务上instruction tune\text{instruction tune}instruction tune模型。

​ 评估结果显示,FLAN\text{FLAN}FLAN显著的改善了137B\text{137B}137B参数量模型的zero-shot\text{zero-shot}zero-shot效果。FLAN\text{FLAN}FLAN在25个数据集中的20个上的zero-shot\text{zero-shot}zero-shot效果都优于GPT-3\text{GPT-3}GPT-3zero-shot\text{zero-shot}zero-shot效果,甚至在ANLI, RTE, BoolQ, AI2-ARC, OpenbookQA, StoryCloze数据集上的效果大幅度超过了few-shot\text{few-shot}few-shotGPT-3\text{GPT-3}GPT-3。在消融研究中发现增加任务组的数量能够改善模型在未见过任务上的效果,并且instruction tuning\text{instruction tuning}instruction tuning仅出现在足够大的模型上。

​ 如上图2描述,instruction tuning\text{instruction tuning}instruction tuning是一种结合了预训练-微调和prompting\text{prompting}prompting范式的简单方法,其通过微调来改善语言模型对于推理时文本交互的响应。实验结果显示语言模型能够很好的执行指令描述的任务。

二. FLAN\text{FLAN}FLANInstruction Tuning\text{Instruction Tuning}Instruction Tuning改善Zero-shot Learning\text{Zero-shot Learning}Zero-shot Learning

instruction tuning\text{instruction tuning}instruction tuning的动机是改善语言模型回答NLP\text{NLP}NLP指令的能力。想法是使用监督来教语言模型执行指令描述的任务,LM\text{LM}LM将学会遵循指令并且在未见过的任务上也可以完成。为了在未见过的任务上进行评估,根据任务类型将任务分组,将一组任务留出评估,并使用余下的任务进行instruction tuning\text{instruction tuning}instruction tuning

2.1 任务和模板

​ 由于从头创建一个具有许多任务的instruction tuning\text{instruction tuning}instruction tuning数据集非常消耗资源,所以将研究社区的现有数据集转换为指令的形式。将Tensorflow\text{Tensorflow}Tensorflow数据集中的62文本数据集整合为单个混合数据集,包含语言理解和语言生成任务。上图3展示了这些数据集,每个数据集会被分类至12个任务组中。

​ 对于每个数据集,手动构造10个唯一的模板,这些模板使用自然语言指令来描述该数据集的任务。10个模板中的大多数都描述原始任务,但为了增加多样性,每个数据集还会增加3个“扭转任务”的模板(例如:对于情感分类,包含了一些要求生成电影评论的模板)。然后在所有数+据集混合的数据集上instruction tune\text{instruction tune}instruction tune预训练语言模型。下图4展示了一个自然语言推理数据集的多个指令模板。

2.2 评估划分

​ 本文感兴趣的是,FLAN\text{FLAN}FLAN在未见过任务上instruction tuning\text{instruction tuning}instruction tuning表现,所以定义什么是未见过的任务至关重要。尽管先前的工作通过不允许相同的数据集出现在训练中来定义未见过的任务,本文通过上图3的任务分组来使用更加保守的定义。在本文中,若在instruction tuning\text{instruction tuning}instruction tuning时没有见过D\mathcal{D}D所属任务组中的所有数据集,那么在评估时D\mathcal{D}D是未见过的。例如,若D\mathcal{D}D是一个蕴含任务,然后在instruction tuning\text{instruction tuning}instruction tuning中没有任何蕴含数据集,并且在所有的其他组中的任务上进行instruction-tuned\text{instruction-tuned}instruction-tuned

2.3 带有选项的分类

​ 给定任务的输出空间通常是几个类别中的一个(分类),或者是自由文本(生成)。由于FLAN\text{FLAN}FLANinstruction-tuned\text{instruction-tuned}instruction-tuned版本的纯解码器语言模型,其天然能够生成自由文本,所以对于生成任务不需要进一步修改。

​ 对于分类任务,先前的工作使用一个rank classification\text{rank classification}rank classification方法,例如:仅有两个输出被考虑(“yes"和"no”),较高概率的一个就是模型的预测。虽然这个过程在逻辑上是合理的,但是不完美。因此,我们包括了一个选项后缀,即将OPTIONS\text{OPTIONS}OPTIONS这个单词添加至分类任务的末尾,附带该任务输出类别列表。这使得模型知道在响应分类任务时需要选择哪些。样本如上图1所示。

2.4 训练细节

  • 模型结构和预训练

    在本文实验中,使用LaMDA-PT\text{LaMDA-PT}LaMDA-PT,一个具有137B\text{137B}137B参数量的稠密的left-to-right \text{left-to-right }left-to-right 纯解码器Transformer\text{Transformer}Transformer语言模型。该模型在网络文档(包括计算机代码)、对话数据和Wikipedia\text{Wikipedia}Wikipedia上进行预训练,使用SentencePiece\text{SentencePiece}SentencePiece32k\text{32k}32k词表,共有2.49T\text{2.49T}2.49TBPE tokens\text{BPE tokens}BPE tokens。大约有10%的预训练数据是非英文的。

  • Instruction tuning\text{Instruction tuning}Instruction tuning过程

    FLAN\text{FLAN}FLANinstruction-tuned\text{instruction-tuned}instruction-tuned版本的LaMDA-PT\text{LaMDA-PT}LaMDA-PTinstruction tuning pipeline\text{instruction tuning pipeline}instruction tuning pipeline混合了所有的数据集,并且随机从每个数据集中采样。为了平衡不同数据集的尺寸,限制每个数据集的训练样本数量为30k\text{30k}30k。模型微调时,learning rate\text{learning rate}learning rate3e-5\text{3e-5}3e-5batch size\text{batch size}batch size为8192,使用Adafactor\text{Adafactor}Adafactor优化器,所有模型都微调30k\text{30k}30k个梯度步。微调时输入和输出的序列的长度为1024和256。整个instruction tuning\text{instruction tuning}instruction tuning在128核的TPUv3\text{TPUv3}TPUv3上用了60个小时。对于所有的评估,报告最终checkpoint\text{checkpoint}checkpoint的结果。

三、结果

​ 本文在自然语言推理、阅读理解、闭卷问答、翻译、常识推理、指代消解和struct-to-text\text{struct-to-text}struct-to-text上评估了FLAN\text{FLAN}FLAN。对于每个数据集,评估所有模板效果的平均值,其代表了给定一个典型自然语言指令的预期性能。

​ 为了比较,报告了使用与GPT-3\text{GPT-3}GPT-3相同prompts\text{prompts}promptsLaMDA-PT\text{LaMDA-PT}LaMDA-PTzero\text{zero}zerofew-shot\text{few-shot}few-shot结果。这个baseline\text{baseline}baseline提供了最直接的消融,instruction tuning\text{instruction tuning}instruction tuning到底有多少帮助。instruction tuning\text{instruction tuning}instruction tuning在大多数数据集上改善了LaMDA-PT\text{LaMDA-PT}LaMDA-PT

​ 本文还展示了GPT-3 175B\text{GPT-3 175B}GPT-3 175BGLaM 64B/64E\text{GLaM 64B/64E}GLaM 64B/64Ezero-shot\text{zero-shot}zero-shot效果。zero-shot FLAN\text{zero-shot FLAN}zero-shot FLAN在25个数据集中的20个上超过了zero-shot GPT-3\text{zero-shot GPT-3}zero-shot GPT-3,甚至在10个数据集上超过了GPT-3\text{GPT-3}GPT-3few-shot\text{few-shot}few-shot性能。zero-shot GLaM\text{zero-shot GLaM}zero-shot GLaM在19个数据集中的13个上超越了zero-shot GLaM\text{zero-shot GLaM}zero-shot GLaM,以及在19个数据集中的11个上超越了one-shot GLaM\text{one-shot GLaM}one-shot GLaM

​ 总的来说,发现instruction tuning\text{instruction tuning}instruction tuning对自然表述为指令的任务上非常有效,并且对于那些直接形式化为语言模型的任务上不是很有效,其中指令大部分冗余(例如:常识推理和指代消歧任务被形式化为完成不完整的句子或者段落)。自然语言推理、阅读理解、闭卷问答和翻译的结果如上图5所示。

  • 自然语言推理(NLI)\text{(NLI)}(NLI)

    在5个NLI\text{NLI}NLI数据集,对于给定premise\text{premise}premise,模型需要判断hypothesis\text{hypothesis}hypothesis是否为真,FLAN\text{FLAN}FLAN大幅度超越了所有的baselines\text{baselines}baselines。正如Brown et al.所说,GPT-3\text{GPT-3}GPT-3NLI\text{NLI}NLI上挣扎的一个原因是,NLI\text{NLI}NLI样本不太可能自然的出现在无监督训练集中,其只会作为句子的延续来使用。对于FLAN\text{FLAN}FLAN,将NLI\text{NLI}NLI作为更加自然的问题Dose <premise> mean that <hypothesis>?\text{Dose <premise> mean that <hypothesis>?}Dose <premise> mean that <hypothesis>?,从而实现更好的效果。

  • 阅读理解

    在阅读理解上,模型要求在给定的段落上回答问题,FLAN\text{FLAN}FLAN效果超过了baseline MultiRC\text{MultiRC}MultiRCQBQA\text{QBQA}QBQA。在BoolQ\text{BoolQ}BoolQ上,FLAN\text{FLAN}FLAN大幅度超越了GPT-3\text{GPT-3}GPT-3

  • 闭卷问答

    对于闭卷问答,在不访问包含答案的具体信息情况下,要求模型回答关于世界的问题,FLAN\text{FLAN}FLAN在所有4个数据集上都超越了GPT-3\text{GPT-3}GPT-3。相较于GLaM\text{GLaM}GLaMFLAN\text{FLAN}FLANARC-e\text{ARC-e}ARC-eARC-c\text{ARC-c}ARC-c上的效果更优,在NQ\text{NQ}NQTQA\text{TQA}TQA上的效果略差于GLaM\text{GLaM}GLaM

  • 翻译

    类似于GPT-3\text{GPT-3}GPT-3LaMDA-PT\text{LaMDA-PT}LaMDA-PT的训练数据90%是英文并且包含一些其他语言的文本。本文在GPT-3\text{GPT-3}GPT-3论文中评估的三个机器翻译数据集上评估了FLAN\text{FLAN}FLAN:来自于WMT’14\text{WMT'14}WMT’14的法语-英语,来自WMT’16\text{WMT'16}WMT’16的德语-英语和罗马尼亚语-英语。相较于GPT-3\text{GPT-3}GPT-3FLAN\text{FLAN}FLAN在6个评估上效果优于zero-shot GPT-3\text{zero-shot GPT-3}zero-shot GPT-3,大多数情况下效果差于few-shot GPT-3\text{few-shot GPT-3}few-shot GPT-3。类似于GPT-3\text{GPT-3}GPT-3FLAN\text{FLAN}FLAN在翻译为英文上有很好的效果,并且比监督翻译基线效果更好。然而,将英语翻译为其他语言的效果相对较弱,可能是因为FLAN\text{FLAN}FLAN使用英文的sentencepiece tokenizer\text{sentencepiece tokenizer}sentencepiece tokenizer且主要在英文数据集上预训练。

  • 额外任务

    虽然在上面几组任务中有很好的结果,instruction tuning\text{instruction tuning}instruction tuning的一个局限是不能够改善需要语言建模任务的表现(例如:常识推理或者指代消解)。对于7个常识推理和指代消解任务,FLAN\text{FLAN}FLAN仅在7个任务中的3个上超越了LaMDA-PT\text{LaMDA-PT}LaMDA-PT负面结果表明,当下游任务与原始语言建模预训练目标相同时,instruction tuning\text{instruction tuning}instruction tuning是没有用的。最终,本文在附录中报告了情感分析、段落检测和struct-to-text\text{struct-to-text}struct-to-text的结果。一般来说,zero-shot FLAN\text{zero-shot FLAN}zero-shot FLAN效果优于zero-shot LaMDA-PT\text{zero-shot LaMDA-PT}zero-shot LaMDA-PT,并且能够达到甚至超过few-shot LaMDA-PT\text{few-shot LaMDA-PT}few-shot LaMDA-PT

四、消融研究和进一步分析

1. Instruction tuning\text{Instruction tuning}Instruction tuning组的数量

​ 本篇文章的核心问题是instruction tuning\text{instruction tuning}instruction tuning如何改善模型在未见过任务上的zero-shot\text{zero-shot}zero-shot效果。在第一个消融实验中,主要是研究任务组的数量和任务类型在instruction tuning\text{instruction tuning}instruction tuning的影响。在这个设定下,NLI\text{NLI}NLI、闭卷问题和常识推理作为评估任务组,并使用7个余下的组来进行instruction tuning\text{instruction tuning}instruction tuning。本文展示了1到7个instruction tuning\text{instruction tuning}instruction tuning组的结果,每个组按照任务数量递减的顺序添加。

​ 上图6展示了这些结果。正如预期的那样,发现随着向instrunction tuning\text{instrunction tuning}instrunction tuning添加组和任务时,三个留出来组的平均效果都有提高,确定了提出的instruction tuning\text{instruction tuning}instruction tuning方法在新任务上的zero-shot\text{zero-shot}zero-shot表现是有改善的。更有趣的是,对于测试的7个组,效果并没有饱和,意味着向instruction tuning\text{instruction tuning}instruction tuning添加更多的任务组,效果可能进一步改善。

2. Scaling Laws\text{Scaling Laws}Scaling Laws

​ 对于更大的模型,语言模型的zero\text{zero}zerofew-shot\text{few-shot}few-shot能力会得到显著的改善。接下来我们会探索模型规模对instruction tuning\text{instruction tuning}instruction tuning的影响。使用前一个消融实验相同的组划分,评估了442M,2B,8B,68B\text{442M,2B,8B,68B}442M,2B,8B,68B137B\text{137B}137B参数量对于instruction tuning\text{instruction tuning}instruction tuning的影响。

​ 上图7展示了这些结果。可以看到两个模型在100B\text{100B}100B参数的规模,instruction tuning\text{instruction tuning}instruction tuning在留出的任务上有显著的改善。然而,instruction tuning\text{instruction tuning}instruction tuning8B\text{8B}8B以及更小模型上是对效果有害的。对这个结果的潜在解释可能是:对于小模型来说,通过instruction tuning\text{instruction tuning}instruction tuning学习约40个任务已经填充满整个模型的容量,导致模型在新任务上效果差。在这个潜在的解释下,对于更大的模型,instruction tuning\text{instruction tuning}instruction tuning填充了模型的一些容量,但是也教会这些模型遵循指令,允许使用其余的容量泛化到新任务上。

3. Instructions\text{Instructions}Instructions的角色

​ 在最后的消融研究中,探索了instruction\text{instruction}instruction在微调过程中的角色。一个可能是效果的收益完全来自于多任务微调,在没有instruction\text{instruction}instruction模型也能够有相同的表现。因此考虑两种没有instruction\text{instruction}instruction的微调设置。在"no template"的设置中,仅把输入和输出给到模型;在“dataset name”设置中,每个输入前添加任务名和数据集名(例如: 对于翻译为法语任务,输入为"[Translation: WMT’14 to French] The dog runs.")

​ 比较了两种消融实验与FLAN\text{FLAN}FLAN微调。对于"no template"设置,在zero-shot\text{zero-shot}zero-shot推断时使用FLAN instructions\text{FLAN instructions}FLAN instructions(因为没有使用模板,模型不知道该执行哪个任务)。对于在数据集名上微调的模型,报告FLAN instructions\text{FLAN instructions}FLAN instructions和使用数据集名的zero-shot\text{zero-shot}zero-shot效果。上图8展示了结果,这两种消融配置都显著差于FLAN\text{FLAN}FLAN,表明使用instructions\text{instructions}instructions训练对于在未见过任务上的zero-shot\text{zero-shot}zero-shot效果至关重要。

4. 带有few-shot\text{few-shot}few-shot样例的Instructions\text{Instructions}Instructions

​ 目前为止都专注在zero-shot\text{zero-shot}zero-shot设置下的instruction tuning\text{instruction tuning}instruction tuning。这里研究当在推理时有few-shot\text{few-shot}few-shot样例时如何使用instruction tuning\text{instruction tuning}instruction tuningfew-shot\text{few-shot}few-shot设置中的格式是建立在zero-shot\text{zero-shot}zero-shot格式上。对于输入xxx和输出yyy,令instruct(x)\text{instruct(x)}instruct(x)表示zero-shot instructions\text{zero-shot instructions}zero-shot instructions。然后,给定kkkfew-shot\text{few-shot}few-shot样例(xi,yi)i=1k(x_i,y_i)_{i=1}^k(xi,yi)i=1k和一个新输入xxx,对于few-shot\text{few-shot}few-shot设置下的instruction\text{instruction}instruction格式为
instruct(x1)⊕y1⊕instruct(x2)⊕y2⊕⋯⊕instruct(xk)⊕yk⊕instruct(x)\text{instruct}(x_1)\oplus y_1\oplus\text{instruct}(x_2)\oplus y_2\oplus\dots\oplus\text{instruct}(x_k)\oplus y_k\oplus\text{instruct}(x) instruct(x1)y1instruct(x2)y2instruct(xk)ykinstruct(x)
其中⊕\oplus表示通过分隔符来平均字符串。在训练和推理阶段,样例是随机从训练集中采样的,并且样例数量的上限是16且总长度序列小于960。实验使用相同的任务划分和评估过程,未见过任务上的few-shot\text{few-shot}few-shot样例仅在推理时使用。

​ 如上图9所示,相较于zero-shot FLAN\text{zero-shot FLAN}zero-shot FLANfew-shot\text{few-shot}few-shot样例在所有任务上都有显著改善。few-shot\text{few-shot}few-shot样例对于具有大型且复杂输出空间任务都特别有效,例如:struct to text\text{struct to text}struct to text,翻译,闭卷问答。可能是因为样例有助于模型更好的理解输出格式。

本文链接:https://my.lmcjl.com/post/7698.html

展开阅读全文

4 评论

留下您的评论.