有了“大数据”,还需“多任务”,谷歌AI大牛Quoc V. Le发现大模型零样本学习能力的关键
编译 | 王晔
我们采用一个1370亿参数量的预训练语言模型,通过自然语言指令模板对60多个NLP任务进行指令微调。我们把这个模型称为Finetuned LAnguage Net(FLAN),研究人员在未见过的任务类型上对这个指令微调过的模型进行了评估。
结果表明,FLAN极大地提高了其未调整的对应模型的性能,并且在我们评估的25个任务中,有19个任务超过了零样本设定下参数为1750亿的GPT-3。
在ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA和StoryCloze上,FLAN甚至以很大的优势超过了小样本GPT-3。消融研究显示,任务数量和模型规模是指令微调成功的关键因素。
图1:上面:指令微调和FLAN概述。指令微调是在以指令描述的任务集合上对预训练的语言模型进行微调。在推理中,我们对一个未见过的任务类型进行评估;例如,如果在指令微调期间没有学习过自然语言推理(NLI)任务,我们可以用NLI任务对模型进行评估。下面:与零样本 GPT-3 和小样本GPT-3相比,零样本FLAN在未见过的任务类型上的表现。
规模化的语言模型(LM),如GPT-3,已经被证明可以很好地进行few-shot学习。然而,它们在zero-shot学习方面却不是很成功。例如,在阅读理解、回答问题和自然语言推理等任务上,GPT-3在零样本场景下的学习性能比小样本差很多。其中一个潜在原因是:如果没有小样本的示范,那么在与预训练数据的格式不同的指示上,模型就很难取得良好的表现。
本文中,我们探索了一种简单的方法来提高大型语言模型的零样本性能。我们利用了NLP任务可以通过自然语言指令来描述的直觉,比如 "这个电影评论是正面情绪的还是负面的?"或者 "把'你好吗'翻译成中文"。
我们采用了一个参数为1370亿的预训练语言模型,并对该模型进行指令微调——对60多个通过自然语言指令表达的NLP任务的集合进行微调。我们把这个模型称为Finetuned LAnguage Net(FLAN)。
为了评估FLAN在未见过的任务上的零样本性能,我们将NLP任务根据其任务类型分为几个群组,并对某个群组进行评估之前,在所有其他群组上对FLAN进行指令微调。
例如,如图1所示,为了评估FLAN执行自然语言推理的能力,我们先在一系列其他NLP任务上对模型进行指令微调,如常识推理、翻译和情感分析。由于这种设置确保了FLAN在指令微调中没有学习过任何自然语言推理任务,因此我们可以再评估其进行零样本自然语言推理的能力。
评估表明,FLAN极大地提高了基础1370亿参数模型在零样本场景下的性能。在我们评估的25个任务中的19个任务里,零样本场景下的FLAN也优于参数为1750亿参数的GPT-3,甚至在一些任务上,如ANLI、RTE、BoolQ、AI2-ARC、OpenbookQA和StoryCloze,也明显优于小样本GPT-3。在消融实验中,我们发现在指令微调中增加任务群的数量可以提高未学习任务的性能,而且只有在有足够的模型规模时,指令微调的优点才会显现。
我们的实证结果强调了语言模型执行用自然语言指令描述的任务的能力。更为广泛的结论是,如图2所示,通过微调的方式进行监督,来提高语言模型对推理-时间文本交互的反应能力,指令微调结合了预训练调整和prompting范式中吸引人的特点。
用于加载FLAN的指令微调数据集的源代码:https://github.com/google-research/flan
图2:比较指令微调与预训练-调整和prompting的关系。
进行指令微调是为了提高语言模型对NLP指令的反应能力。我们想通过监督来指引语言模型执行指令描述的任务,使其学会遵循指令,对与未见过的任务也是如此。为了评估模型在未见过的任务上的表现,我们按任务类型将任务进行分组,并将每个任务组单独进行评估,同时对其余所有分组进行指令微调。
2.1 任务&模板
从零创建一个具有大量任务的可行的指令调整数据集需要集中大量资源。因此,我们选择将现有研究创建的数据集转化为指令格式。我们将Tensorflow数据集上公开的62个文本数据集,包括语言理解和语言生成任务,汇总成一个集合。图3展示了我们使用的所有数据集;每个数据集都被归入十二个任务群组中的一个,每个群组中的数据集都属于同一任务类型。
图3:本文中使用的任务集群(蓝色为NLU任务;茶色为NLG任务)。
我们将任务设定为由基于数据集转换的一组特定的输入-输出对(例如,我们认为RTE和ANLI是独立的任务,尽管它们的涵义有交叉)。
对于每一项任务,我们都会把它们组成十个不同的用自然语言指令来描述任务的模板。这十个模板中的大部分都描述了原始任务,但为了增加多样性,每个任务中最多包含三个 "反转任务 "的模板(例如,对于情感分类,我们包括要求生成负面电影评论的模板)。
然后,我们在所有任务的集合上对预训练的语言模型进行指令微调,每个任务中的例子都通过随机选择的指令模板进行格式化。图4展示了一个自然语言推理任务的多个指令模板。
图4:描述一个自然语言推理任务的多个指令模板。
2.2 评估分割法
我们对FLAN在指令微调中没有训练过的任务上的表现很感兴趣,因此,对未见过的任务的定义至关重要。
之前的一些工作通过不允许同一数据集出现在训练中来对未见过的任务进行分类,而我们利用图3中的任务集群,使用一个更为保守的定义。
在这项工作中,如果在指令微调期间没有训练过T所属的任何集群的任务,我们才认为任务T在评估时是合适的。例如,如果任务T是一个文本蕴涵任务,那么在指令微调数据集中不会出现文本蕴涵任务,我们只对所有其他集群的任务进行指令调整。
使用这个定义,为了评估FLAN在跨越c个集群的任务上的性能,我们执行了c个集群间分割的指令微调,在指令微调过程中,每种分割都会有不同的集群。
2.3 有选择的分类
一个给定任务所期望的输出空间是几个给定类别中的一个(如分类)或自由文本(如生成)。由于FLAN是纯解码器语言模型的指令微调版本,它自然可以生成自由文本,因此对于期望输出为自由文本的任务不需要再做进一步修改。
对于分类任务,先前Brown等人的工作使用了等级分类方法,例如,只考虑两个输出("是 "和 "不是"),将概率较高的一个作为模型的预测。
虽然这个程序在逻辑上是合理的,但它并不完美,因为答案的概率质量可能有一个不理想的分布(例如,大量替代性的 "是 "的表达方式,比如“对”、“正确”,可能降低分配给 "是 "的概率质量)。
因此,我们加入了一个选项后缀,即在分类任务的末尾加上OPTIONS标记,以及该任务的输出类别列表。这使得模型知道在响应分类任务时需要哪些选择。图1中的NLI和常识性的例子显示了选项的使用。
2.4 训练细节
模型架构和预训练。在我们的实验中,我们使用了一个密集的从左到右的、只有解码器的1370亿参数的Transformer语言模型。这个模型在网络文档(包括那些带有计算机代码的文档)、对话数据和维基百科上进行了预训练,使用SentencePiece库(Kudo & Richardson, 2018)将其标记为2.81T BPE tokens,词汇量为32K tokens。大约10%的预训练数据是非英语的。这个数据集不像GPT-3的训练集那样单一,也有对话和代码的混合物,因此我们预计一开始这个预训练的语言模型在NLP任务上的零样本和小样本性能会略低。因此,我们把这个预训练的模型称为基础语言模型(Base LM)。这个模型以前也曾被用于程序合成。
指令微调程序。FLAN是Base LM的指令微调版本。我们的指令微调管道混合了所有的数据集,并从每个数据集中随机抽取例子。一些数据集有超过1000万个训练实例(例如翻译),因此我们将每个数据集的训练实例数量限制在3万个。其他数据集的训练例子很少,为了防止这些数据集被边缘化,我们遵循实例-比例混合方案(examples-proportional mixing scheme),混合率最大为3000。我们的微调程序中使用的输入和目标序列长度分别为1024和256。我们使用打包的方法将多个训练实例合并成一个序列,并用一个特殊的序列末端标记将输入和目标分开。
表2: 阅读理解和开放领域问题回答的结果。
表3: 常识推理和核心推理的结果(准确率单位为%)。
表4:WMT'14 En/Fr、WMT'16 En/De和En/Ro的翻译结果(BLEU)。
表5:FLAN对通过指令微调获得的连续输入的反应比Base LM更好。
本文探讨了零样本场景下一个简单的问题:指令微调语言模型是否能提高其执行未见任务的能力?我们在FLAN上的实验表明,指令微调提高了对未微调模型的性能,并在我们评估的大多数任务上超过了零样本场景下的GPT-3。通过消融研究,我们了解到,未见任务的性能随着指令调谐中使用的任务集群的数量的增加而提高,而且有趣的是,指令微调的优点只有在模型规模足够大时才会出现。此外,FLAN似乎比未修改的基础模型对指令微调的反应更好,显示了指令微调的另一优点。
我们研究中的一个局限是:对任务分组时存在一定程度的主观性(例如,情感分析可以被看作是阅读理解的一个小子集),因为没有公认的方法来处理两个任务之间的相似性。因此,我们根据文献中公认的分类方法将任务分配到群组中,当任务可能属于多个群组时,我们采取了保守的方法(例如,在评估阅读理解和常识推理时,将阅读理解与常识推理排除在指令微调之外)。作为另一个限制,我们使用简短的指令(通常是一句话)来描述熟知的NLP任务。其他任务可能需要更长或更具体的指令来充分描述,同时还要有涉及实例的解释;我们把这些情况留给未来的研究工作。
本文显示的结果为未来的研究提出了几个方向。尽管FLAN在60多个数据集上进行了指令微调,但这些数据集只覆盖了10个任务群(加上一些杂项任务),考虑到这样一个模型可以用于所有潜在的任务,因此这个数字相对较小。有可能通过更多的指令微调任务来进一步提高性能,例如,这些任务可以以自监督的方式生成。除了收集更多的任务,探索多语言环境也很有价值,例如,我们可以提出这样的疑问:在高资源语言的监督数据上的指令调整是否会提高低资源语言的新任务的性能?最后,有监督数据的指令微调模型也有可能被用来改善模型在偏见和公平方面的行为。
雷锋网 (公众号:雷锋网) 雷锋网雷锋网
雷锋网版权文章,未经授权禁止转载。详情见。