Language Models are Unsupervised Multitask Learners翻译

摘要

自然语言处理任务(例如问答,机器翻译,阅读理解和摘要)通常通过特定于任务的数据集进行有监督的学习。我们证明,当在名为WebText的数百万个网页的新数据集上进行训练时,语言模型可以在没有任何明确监督信息的情况下开始学习这些任务。当以文档加问题为条件时,语言模型生成的答案在CoQA数据集上达到55 F1,在不使用127,000+训练数据的情况下,可以匹配或超过4个基准系统中3个的性能。语言模型的功能对于zero-shot任务迁移的成功至关重要,并且可以跨任务以对数线性方式提高性能。我们最大的模型GPT-2是一个1.5B参数的Transformer,它可以在zero-shot设置下在8个测试的语言建模数据集中的7个数据集中获得7个的最新结果。该模型的样例反映了这些改进,并包含了连贯的文本段落。这些发现为构建语言处理系统提供了一条有希望的途径,该系统将从自然演变过程中学习如何执行任务。

1.介绍

如今,机器学习系统通过结合使用大型数据集,高容量模型和监督学习来在训练使得模型在某个任务上表现出色(预期)。然而,这些系统非常脆弱,并且对数据分布和任务定义的细微变化敏感。当前的系统更应该被描述为狭窄的专家而不是胜任的通才。我们希望转向可以执行许多任务的更通用的系统-最终无需手动为每个数据创建和标记训练数据集
  创建ML系统的主要方法是收集能够证明所需任务正确行为的训练数据集,从而训练系统以模仿这些行为,然后在独立同分布(IID)且不受约束的样例上测试其性能。这对于在具体任务上取得进展起到了很好的作用。但是字幕模型,阅读理解系统和图像分类器经常会表现出不稳定的行为,突出说明了输入的多样性和不确定性。
  我们的怀疑是,对单领域数据集进行单任务训练是造成当前系统缺乏泛化性的主要原因。要想在当前体系结构的健壮系统上取得进展可能需要对各种领域和任务进行训练并衡量性能。最近,已经提出了一些基准测试,例如GLUE和decaNLP以开始研究此基准。
  多任务学习是提高模型综合性能的有效框架。但是,NLP中的多任务训练仍处于初期。最近的工作报告了适度的性能改进,并且迄今为止两项最雄心勃勃的努力分别对总共10对和17对【数据集,目标】进行了训练。从元学习的角度来看,每对 【数据集,目标】都是从数据集和目标的分布中采样的单个训练样例。当前的ML系统需要成百上千个样例来引入函数,这样的函数具有很好地泛化性。这表明,多任务训练中需要使用许多有效的训练对来实现其对当前方法的性能提升。这很难继续数据集和目标的构建和设计,以达到用当前技术所能达到的最高性能。这激发了探索用于执行多任务学习的其他方法。
  当前在语言任务上表现最好的系统结合了预训练和监督式微调。这种方法历史悠久,并且趋向于更灵活的迁移形式。首先,学习单词向量并将其用作特定任务架构的输入,然后得到循环网络的上下文表示形式。最近的工作表明不再需要特定于任务的架构,迁移自注意模块就足够了。
  这些方法仍然需要监督训练才能执行任务。当只有很少或没有监督数据时,另一项工作表明语言模型有望执行特定任务,例如常识推理和情感分析。
  在本文中,我们将这两方面的工作联系起来,并延续了更通用的迁移方法的趋势。我们演示了语言模型可以在zero-shot设置下执行下游任务-无需任何参数或体系结构修改。我们通过强调语言模型在zero-shot设置下执行各种任务的能力来证明这种方法显示出了潜力。我们在这些任务上获得了有希望的,有竞争力的和最先进的结果。

2.方法

我们方法的核心是语言建模。语言建模通常被构造为一组样例集合 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn)的无监督分布估计,每个样例均由可变长度的字符序列 ( s 1 , s 2 , . . . , s n ) (s_1,s_2,...,s_n) (s1,s2,...,sn)组成。由于语言具有自然的顺序特性,因此通常将字符上的联合概率分解为条件概率的乘积:
p ( x ) = ∏ i = 1 n p ( s n ∣ s 1 , . . . , s n − 1 ) (1) p(x)=\prod^n_{i=1}p(s_n|s_1,...,s_{n-1})\tag{1} p(x)=i=1np(sns1,...,sn1)(1)
这种方法允许对 p ( x ) p(x) p(x)以及 p ( s n − k , . . . , s n ∣ s 1 , . . . , s n − k − 1 ) p(s_{n-k},...,s_n|s1,...,s_{n-k-1}) p(snk,...,sns1,...,snk1)形式的任何条件进行简易采样和估计。近年来,可以计算这些条件概率的模型的表达能力有了重大改进,例如像Transformer这样的自注意力体系结构。
  学习执行单个任务可以在概率框架中表示为估计条件分布 p ( o u t p u t ∣ i n p u t ) p(output | input) p(outputinput)。由于通用系统即使对于相同的输入也应该能够执行许多不同的任务,因此它不仅以输入为条件,还应以要执行的任务为条件。也就是说,它应该建模 p ( o u t p u t ∣ i n p u t , t a s k ) p(output|input,task) p(outputinput,task)。在多任务和元学习设置中,这已经进行了各种形式化的定义。任务调节通常在体系结构级别(例如(Kaiser et al., 2017) 中的特定于任务的编码器和解码器)或在算法级别(例如MAML的内部和外部循环优化框架)中实现。但正如McCann et al. (2018) 所举例说明的,语言提供了一种灵活的方式来将任务,输入和输出指定为一系列符号。例如,翻译训练样例可以被写为序列(translate to french, english text, french text)。同样,阅读理解训练样例可以写为(answer the question, document, question, answer)。McCann et al. (2018) 证明可以训练单个模型(即MQAN)来推断和执行具有这种格式样例的许多不同任务。
  语言建模原则上也能够学习McCann et al. (2018) 的任务,而无需明确监督是要预测的输出是哪些字符。由于当仅在序列的子集上进行评估时,有监督的目标与无监督的目标相同,因此无监督的目标的全局最小值也为有监督的目标的全局最小值。在这种设置中,避开了将密度估计作为(Sutskever et al., 2015) 中讨论的原则性训练目标的担忧。问题在于,我们实际上是否能够优化无监督目标以实现收敛。初步实验证实,足够大的语言模型可以在这种设置中执行多任务学习,但是与明显监督的方法相比,学习速度要慢得多。
  尽管从上述适当的设置到自然场景下的语言迈出了一大步,但Weston (2016) 认为在对话的背景下,可以开发能够直接从自然语言中学习的系统并演示了概念证明–通过使用teacher’s输出的前向预测来学习没有奖励信号的QA任务。尽管对话是一种有吸引力的方法,但我们担心它过于严格。互联网包含大量信息,这些信息可以被动地获得,而无需交互通信。我们的推测是,具有足够能力的语言模型将开始学习推断和执行以自然语言顺序演示的任务,以便更好地预测它们,而不管其采购方式如何。如果语言模型能够做到这一点,则实际上将执行无监督的多任务学习。我们通过在zero-shot下分析各种任务的语言模型的性能来测试是否是这种情况。

2.1 训练集

大多数先前的工作都在单个文本领域域上训练语言模型,例如新闻文章,维基百科或小说书籍。我们的方法鼓励建立尽可能多的大型数据集,以便在尽可能多的领域和环境中收集任务的自然语言表示。
  web scrapes(例如Common Crawl)是一种多样化且几乎包含无限文本的有希望的数据源。尽管这些数据比当前的语言建模数据集大许多数量级,但它们仍存在重大的数据质量问题。Trinh & Le (2018) 在常识推理工作中使用了Common Crawl,但指出这些大量文档的内容大多难以理解。我们在使用Common Crawl进行的初始实验中观察到了类似的数据问题。 Trinh & Le (2018) 的最佳结果是通过一个小型的Common Crawl子集获得的,该子集仅包含与目标数据集(the Winograd Schema Challenge)最相似的文档。尽管这是提高特定任务性能的实用方法,但我们希望避免对后面要执行的任务做出假设
  因此,我们创建了一个强调文档质量的新的web scrape。为此,我们只抓取经过人类过滤的网页。手动过滤完整的web scrape将非常昂贵,因此,作为一个起点,我们从社交媒体平台Reddit抓取了所有出站链接。可以将其视为其他用户是否发现链接有趣,有教育意义或仅仅是有趣的启发式指示器。
  所得的数据集WebText包含这4500万个链接的文本子集。为了从HTML响应中提取文本,我们使用了Dragnet和Newspaper内容提取器的组合。本文介绍的所有结果均使用WebText的初步版本,该版本不包含2017年12月之后创建的链接,WebText初步版本在重复数据删除和基于启发式的清理后包含超过800万份文档,总计40 GB文本。我们从WebText中删除了所有Wikipedia文档,因为它是其他数据集的通用数据源,并且由于训练数据与测试评估任务重叠而可能使分析复杂化。

2.2 输入表示

通用语言模型(LM)应该能够计算(并生成)任何字符串的概率。当前的大型LM包括预处理步骤,例如小写字母转换,tokenization和OOV字符处理,这些步骤限制了可建模字符串的空间。在将Unicode字符串作为UTF-8字节序列处理时,可以很好地满足此要求,例如Gillick et al. (2015) 的工作中所举例说明的,当前的字节级LM在十亿字基准等大型数据集上与词级LM不具有竞争力。我们自己尝试在WebText上训练标准字节级LM的尝试中,我们观察到了类似的性能差距。
  字节对编码(BPE)是字符和单词级语言建模之间的一种平衡,可有效地在频繁出现单词级输入和不频繁出现的字符级输入之间进行取舍。尽管其名称是字节编码,BPE的实现通常在Unicode代码点而不是字节序列上运行。这些实现将需要包括Unicode符号的全部空间,以便为所有Unicode字符串建模。在添加任何多符号标记之前,这将导致基本词汇量超过130,000。与BPE经常使用的32,000至64,000个字符词汇表相比,这个数目太大了。相比之下,BPE的字节级版本仅需要大小为256的基本词汇表。但是,由于BPE使用基于贪婪频率的启发式方法来构建字符词汇表,因此直接将BPE应用于字节序列会导致次优合并。我们观察到BPE包含许多常见单词(如dog)的版本,因为它们以多种形式出现,例如 d o g .   d o g !   d o g ? dog.~dog!~dog? dog. dog! dog?。这导致有限的词汇空位和模型容量的次优分配。为了避免这种情况,我们防止BPE在任何字节序列的字符类别之间合并。我们为空格添加了一个例外,该例外可显着提高压缩效率,同时仅在多个字符之间添加最小的单词碎片。
  这种输入表示形式使我们能够将词级LM的经验优势与字节级方法的一般性结合起来。由于我们的方法可以将概率分配给任何Unicode字符串,因此这使我们可以在任何数据集上评估LM,而无需进行预处理,tokenization或限制词表大小。

2.3 模型

我们为LM使用基于Transformer的架构,并遵循OpenAI GPT模型的细节,并做了一些修改。层归一化移动到每个子块的输入,类似于激活前的残差网络,并且在最后的自注意力块之后添加了额外的层归一化。使用修正的初始化,该初始化考虑具有模型深度的剩余路径上的累积。我们在初始化时将残差层的权重按 1 / N 1/\sqrt N 1/N 的比例进行缩放,其中 N N N是残差层的数量。词汇大小扩展到50,257。我们还将上下文大小从512个字符增加到1024个,并且使用了更大的512 batchsize。

猜你喜欢

转载自blog.csdn.net/qq_28385535/article/details/113727546