# 2019 Raffel et al.

Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

通过统一的文本到文本 Transformer 探索迁移学习的极限 Colin Raffel∗ craffel@gmail.com Noam Shazeer∗ noam@google.com Adam Roberts∗ adarob@google.com Katherine Lee∗ katherinelee@google.com Sharan Narang...

精粹译文

通过统一的文本到文本 Transformer 探索迁移学习的极限

Colin Raffel∗ craffel@gmail.com Noam Shazeer∗ noam@google.com Adam Roberts∗ adarob@google.com Katherine Lee∗ katherinelee@google.com Sharan Narang sharannarang@google.com Michael Matena mmatena@google.com Yanqi Zhou yanqiz@google.com Wei Li mweili@google.com Peter J. Liu peterjliu@google.com

Google, Mountain View, CA 94043, USA

编辑: Ivan Titov

摘要

迁移学习(Transfer learning)是指模型首先在数据丰富的任务上进行预训练,然后再在下游任务上进行微调,这已成为自然语言处理(NLP)中的一种强大技术。迁移学习的有效性催生了多种方法、方法论和实践。在本文中,我们通过引入一个将所有基于文本的语言问题转换为“文本到文本”(text-to-text)格式的统一框架,探索了 NLP 迁移学习技术的全貌。我们的系统性研究在数十个语言理解任务上比较了预训练目标、架构、无标签数据集、迁移方法和其他因素。通过将我们的探索见解与规模化以及我们新的“庞大清洗爬取语料库”(Colossal Clean Crawled Corpus,简称 C4)相结合,我们在涵盖摘要、问答、文本分类等多个基准测试中取得了最先进的结果。为了促进未来在 NLP 迁移学习方面的工作,我们发布了我们的数据集、预训练模型和代码。

关键词: 迁移学习,自然语言处理,多任务学习,基于注意力的模型,深度学习


1. 引言

训练一个机器学习模型来执行自然语言处理(NLP)任务,通常要求模型能够以一种适合下游学习的方式处理文本。这可以被粗略地视为开发一种通用的知识,使模型能够“理解”文本。这种知识可以从低级(例如单词的拼写或含义)到高级(例如,一个大号大提琴太大而无法装进大多数背包)。在现代机器学习实践中,提供这种知识的情况很少见;相反,它通常作为辅助任务的一部分被学习。例如,一种历史上常见的方法是使用词向量(Mikolov et al., 2013b,a; Pennington et al., 2014)将单词标识映射到连续表示中,理想情况下,相似的单词映射到相似的向量。这些向量通常通过一种目标函数来学习,例如,鼓励共现的单词在连续空间中彼此靠近(Mikolov et al., 2013b)。

最近,在数据丰富的任务上预训练整个模型变得越来越普遍。理想情况下,这种预训练会导致模型发展出通用的能力和知识,然后可以将其迁移到下游任务中。在迁移学习应用于计算机视觉(Oquab et al., 2014; Jia et al., 2014; Huh et al., 2016; Yosinski et al., 2014)的应用中,预训练通常通过在大型标记数据集(如 ImageNet (Russakovsky et al., 2015; Deng et al., 2009))上进行监督学习来完成。相比之下,现代 NLP 迁移学习技术通常使用无标签数据进行无监督学习。这种方法最近已被用于在许多最常见的 NLP 基准测试中获得最先进的结果(Devlin et al., 2018; Yang et al., 2019; Dong et al., 2019; Liu et al., 2019c; Lan et al., 2019)。除了其经验上的优势外,NLP 的无监督预训练特别具有吸引力,因为得益于互联网,无标签文本数据可以大量获得——例如,Common Crawl 项目每月产生约 20TB 从网页中提取的文本数据。这非常适合神经网络,神经网络已被证明表现出显著的可扩展性,即通常可以通过在更大的数据集上训练更大的模型来获得更好的性能(Hestness et al., 2017; Shazeer et al., 2017; Jozefowicz et al., 2016; Mahajan et al., 2018; Radford et al., 2019; Shazeer et al., 2018; Huang et al., 2018b; Keskar et al., 2019a)。

这种协同作用导致了最近大量开发 NLP 迁移学习方法的工作,产生了广泛的预训练目标(Howard and Ruder, 2018; Devlin et al., 2018; Yang et al., 2019; Dong et al., 2019)、无标签数据集(Yang et al., 2019; Liu et al., 2019c; Zellers et al., 2019)、基准测试(Wang et al., 2019b, 2018; Conneau and Kiela, 2018)、微调方法(Howard and Ruder, 2018; Houlsby et al., 2019; Peters et al., 2019)等。在这个新兴领域中,技术的快速进步和多样性使得比较不同的算法、理清新的贡献的影响以及理解现有的迁移学习方法空间变得困难。出于对更严谨理解的需求,我们利用一种统一的迁移学习方法,使我们能够系统地研究不同的方法并推动该领域的当前极限。

我们工作背后的基本思想是将每个文本处理问题视为一个“文本到文本”问题,即以文本作为输入并产生新的文本作为输出。这种方法受到之前 NLP 任务统一框架的启发,包括将所有文本问题视为问答(McCann et al., 2018)、语言建模(Radford et al., 2019)或跨度提取(Keskar et al., 2019b)任务。至关重要的是,文本到文本框架允许我们将相同的模型、目标、训练过程和解码过程直接应用于我们考虑的每个任务。我们利用这种灵活性,通过评估各种基于英语的 NLP 问题(包括问答、文档摘要和情感分类等)的性能。通过这种统一的方法,我们可以比较不同迁移学习目标、无标签数据集和其他因素的有效性,同时通过扩展模型和数据集来探索 NLP 迁移学习的极限,超越了之前考虑的范围。

我们强调,我们的目标不是提出新方法,而是提供一个关于该领域现状的全面视角。因此,我们的工作主要包括对现有技术的调查、探索和经验比较。我们还通过扩展我们系统性研究的见解(训练高达 110 亿参数的模型)来探索当前方法的极限,从而在我们考虑的许多任务中获得最先进的结果。为了在这一规模上进行实验,我们引入了“庞大清洗爬取语料库”(C4),这是一个由从网络上抓取的数百 GB 清洁英语文本组成的数据集。认识到迁移学习的主要用途是在数据稀缺的情况下利用预训练模型的可能性,我们发布了我们的代码、数据集和预训练模型。

本文的其余部分结构如下:在下一节中,我们将讨论我们的基础模型及其实现、我们将每个文本处理问题表述为文本到文本任务的过程,以及我们考虑的任务套件。在第 3 节中,我们展示了一组大型实验,探索了 NLP 迁移学习领域。在该节末尾(第 3.7 节),我们结合了我们系统性研究的见解,在各种基准测试中获得了最先进的结果。最后,我们总结了我们的结果,并在第 4 节中展望了未来。


我们的文本到文本框架图。我们考虑的每个任务——包括翻译、问答和分类——都被转换为将文本作为输入并训练模型生成某些目标文本。这使我们能够在我们多样化的任务集中使用相同的模型、损失函数、超参数等。它也为我们经验调查中包含的方法提供了一个标准测试平台。“T5”指的是我们的模型,我们将其称为“文本到文本迁移 Transformer”。


2. 设置

在展示我们大规模经验研究的结果之前,我们回顾了理解我们结果所需的必要背景主题,包括 Transformer 模型架构和我们评估的下游任务。我们还介绍了我们将每个问题视为文本到文本任务的方法,并描述了我们创建的作为无标签文本数据来源的基于 Common Crawl 的数据集——“庞大清洗爬取语料库”(C4)。我们将我们的模型和框架称为“文本到文本迁移 Transformer”(T5)。

2.1 模型

NLP 迁移学习的早期结果利用了循环神经网络(Peters et al., 2018; Howard and Ruder, 2018),但最近更常见的是使用基于“Transformer”架构(Vaswani et al., 2017)的模型。Transformer 最初被证明对机器翻译有效,但随后被用于各种 NLP 设置(Radford et al., 2018; Devlin et al., 2018; McCann et al., 2018; Yu et al., 2018)。由于其日益普及,我们研究的所有模型都基于 Transformer 架构。除了下面提到的细节和我们在第 3.2 节中探索的变体外,我们与最初提出的架构没有显著偏离。我们不提供该模型的全面定义,而是建议感兴趣的读者参考原始论文(Vaswani et al., 2017)或后续教程以获取更详细的介绍。

Transformer 的主要构建块是自注意力(Cheng et al., 2016)。自注意力是注意力(Graves, 2013; Bahdanau et al., 2015)的一种变体,它通过用序列其余部分的加权平均值替换每个元素来处理序列。原始的 Transformer 由编码器-解码器架构组成,旨在用于序列到序列(Sutskever et al., 2014; Kalchbrenner et al., 2014)任务。最近,使用由单个 Transformer 层堆栈组成的模型也变得很常见,其中使用不同形式的自注意力来产生适用于语言建模(Radford et al., 2018; Al-Rfou et al., 2019)或分类和跨度预测任务(Devlin et al., 2018; Yang et al., 2019)的架构。我们在第 3.2 节中经验性地探索了这些架构变体。

总体而言,我们的编码器-解码器 Transformer 实现紧密遵循其最初提出的形式(Vaswani et al., 2017)。首先,输入标记序列被映射到嵌入序列,然后传入编码器。编码器由一堆“块”组成,每个块包含两个子组件:一个自注意力层,后跟一个小型前馈网络。层归一化(Ba et al., 2016)应用于每个子组件的输入。我们使用层归一化的简化版本,其中激活仅被重新缩放,不应用加性偏置。层归一化后,残差跳跃连接(He et al., 2016)将每个子组件的输入添加到其输出中。Dropout(Srivastava et al., 2014)应用于前馈网络内部、跳跃连接上、注意力权重上以及整个堆栈的输入和输出处。解码器在结构上与编码器相似,只是它在每个自注意力层之后包含一个标准的注意力机制,该机制关注编码器的输出。解码器中的自注意力机制也使用一种自回归或因果自注意力形式,它只允许模型关注过去的输出。最终解码器块的输出被馈送到具有 softmax 输出的密集层,其权重与输入嵌入矩阵共享。Transformer 中的所有注意力机制都被分成独立的“头”,它们的输出在进一步处理之前被连接起来。

由于自注意力是顺序无关的(即它是对集合的操作),因此通常向 Transformer 提供明确的位置信号。虽然原始的 Transformer 使用正弦位置信号或学习到的位置嵌入,但最近更常见的是使用相对位置嵌入(Shaw et al., 2018; Huang et al., 2018a)。相对位置嵌入不是为每个位置使用固定的嵌入,而是根据自注意力机制中正在比较的“键”和“查询”之间的偏移量产生不同的学习嵌入。我们使用一种简化形式的位置嵌入,其中每个“嵌入”只是一个标量,被添加到用于计算注意力权重的相应 logit 中。为了效率,我们还在模型的所有层中共享位置嵌入参数,尽管在给定的层内,每个注意力头使用不同的学习位置嵌入。通常,学习固定数量的嵌入,每个嵌入对应一系列可能的键-查询偏移量。在这项工作中,我们对所有模型使用 32 个嵌入,其范围以对数方式增加,直到偏移量为 128,超过该偏移量,我们将所有相对位置分配给同一个嵌入。请注意,给定的层对超过 128 个标记的相对位置不敏感,但后续层可以通过结合来自前几层的局部信息来建立对更大偏移量的敏感性。

总而言之,我们的模型与 Vaswani et al. (2017) 提出的原始 Transformer 大致相当,除了移除了层归一化偏置、将层归一化放置在残差路径之外以及使用不同的位置嵌入方案。由于这些架构变化与我们在迁移学习经验调查中考虑的实验因素是正交的,我们将它们影响的消融留给未来的工作。

作为我们研究的一部分,我们实验了这些模型的可扩展性,即当它们被制成具有更多参数或层时,它们的性能如何变化。训练大型模型可能并非易事,因为它们可能无法装入单台机器并需要大量的计算。因此,我们结合了模型并行和数据并行,并在 Cloud TPU Pods 的“切片”上训练模型。TPU Pods 是多机架 ML 超级计算机,包含 1,024 个 TPU v3 芯片,通过高速 2D 网格互连与支持的 CPU 主机连接。我们利用 Mesh TensorFlow 库(Shazeer et al., 2018)来简化模型并行和数据并行(Krizhevsky, 2014)的实现。

2.2 庞大清洗爬取语料库

之前关于 NLP 迁移学习的大部分工作都利用大型无标签数据集进行无监督学习。在本文中,我们有兴趣测量这些无标签数据的质量、特征和大小的影响。为了生成满足我们需求的数据集,我们利用 Common Crawl 作为从网络上抓取的文本来源。Common Crawl 之前已被用作 NLP 的文本数据来源,例如用于训练 n-gram 语言模型(Buck et al., 2014),作为常识推理的训练数据(Trinh and Le, 2018),用于挖掘机器翻译的平行文本(Smith et al., 2013),作为预训练数据集(Grave et al., 2018; Zellers et al., 2019; Liu et al., 2019c),甚至仅仅作为测试优化器的巨大文本语料库(Anil et al., 2019)。

Common Crawl 是一个公开可用的网络存档,通过从抓取的 HTML 文件中删除标记和其他非文本内容来提供“网络提取文本”。此过程每月产生约 20TB 的抓取文本数据。不幸的是,由此产生的文本大部分不是自然语言。相反,它主要包含乱码或样板文本,如菜单、错误消息或重复文本。此外,大量的抓取文本包含的内容不太可能对我们考虑的任何任务有帮助(冒犯性语言、占位符文本、源代码等)。为了解决这些问题,我们使用了以下启发式方法来清理 Common Crawl 的网络提取文本:

  • 我们仅保留以终止标点符号(即句号、感叹号、问号或结束引号)结尾的行。
  • 我们丢弃了少于 3 个句子的任何页面,并且仅保留包含至少 5 个单词的行。
  • 我们删除了包含“脏话、粗俗、淫秽或其他不良词汇列表”中任何单词的任何页面。
  • 许多抓取的页面包含警告,指出应启用 Javascript,因此我们删除了任何带有单词 Javascript 的行。
  • 一些页面包含占位符“lorem ipsum”文本;我们删除了出现短语“lorem ipsum”的任何页面。
  • 一些页面无意中包含了代码。由于花括号“{”出现在许多编程语言中(例如在网络上广泛使用的 Javascript),但在自然文本中不出现,因此我们删除了包含花括号的任何页面。
  • 由于一些抓取的页面来源于 Wikipedia 并带有引用标记(例如 [1], [需要引用] 等),我们删除了任何此类标记。
  • 许多页面有样板政策声明,因此我们删除了任何包含字符串“使用条款”、“隐私政策”、“Cookie 政策”、“使用 Cookie”、“使用 Cookie”或“使用 Cookie”的行。
  • 为了对数据集进行去重,我们丢弃了数据集中出现不止一次的任何三句跨度中的所有内容,只保留一个。

此外,由于我们的大多数下游任务都集中在英语文本上,我们使用 langdetect 来过滤掉任何未以至少 0.99 的概率被分类为英语的页面。我们的启发式方法受到过去使用 Common Crawl 作为 NLP 数据来源的工作的启发:例如,Grave et al. (2018) 也使用自动语言检测器过滤文本并丢弃短行,Smith et al. (2013); Grave et al. (2018) 都执行了行级去重。然而,我们选择创建一个新的数据集,因为之前的数据集使用更有限的过滤启发式方法,不是公开可用的,和/或范围不同(例如,仅限于新闻数据(Zellers et al., 2019; Liu et al., 2019c),仅包含知识共享内容(Habernal et al., 2016),或专注于机器翻译的平行训练数据(Smith et al., 2013))。

为了组装我们的基础数据集,我们下载了 2019 年 4 月的网络提取文本并应用了上述过滤。这产生了一个文本集合,不仅比大多数用于预训练的数据集大几个数量级(约 750 GB),而且还包含相当干净和自然的英语文本。我们将此数据集称为“庞大清洗爬取语料库”(或简称 C4),并将其作为 TensorFlow Datasets 的一部分发布。我们在第 3.4 节中考虑了使用此数据集的各种替代版本的影响。

2.3 下游任务

我们在本文中的目标是衡量通用语言学习能力。因此,我们研究了各种基准测试的下游性能,包括机器翻译、问答、抽象摘要和文本分类。具体来说,我们衡量了 GLUE 和 SuperGLUE 文本分类元基准测试;CNN/Daily Mail 抽象摘要;SQuAD 问答;以及 WMT 英语到德语、法语和罗马尼亚语翻译的性能。所有数据均来自 TensorFlow Datasets。

GLUE (Wang et al., 2018) 和 SuperGLUE (Wang et al., 2019b) 各自包含一系列旨在测试通用语言理解能力的文本分类任务:

  • 句子可接受性判断 (CoLA (Warstadt et al., 2018))
  • 情感分析 (SST-2 (Socher et al., 2013))
  • 释义/句子相似度 (MRPC (Dolan and Brockett, 2005), STS-B (Cer et al., 2017), QQP (Iyer et al., 2017))
  • 自然语言推理 (MNLI (Williams et al., 2017), QNLI (Rajpurkar et al., 2016), RTE (Dagan et al., 2005), CB (De Marneff et al., 2019))
  • 指代消解 (WNLI 和 WSC (Levesque et al., 2012))
  • 句子补全 (COPA (Roemmele et al., 2011))
  • 词义消歧 (WIC (Pilehvar and Camacho-Collados, 2018))
  • 问答 (MultiRC (Khashabi et al., 2018), ReCoRD (Zhang et al., 2018), BoolQ (Clark et al., 2019))

我们使用 GLUE 和 SuperGLUE 基准测试分发的数据集。为简单起见,在微调时,我们将 GLUE 基准测试中的所有任务(SuperGLUE 类似)视为一个单一任务,通过连接所有组成数据集。正如 Kocijan et al. (2019) 所建议的,我们还在组合的 SuperGLUE 任务中包含了定代词消解 (DPR) 数据集 (Rahman and Ng, 2012)。

CNN/Daily Mail (Hermann et al., 2015) 数据集最初作为问答任务引入,但被 Nallapati et al. (2016) 改编为文本摘要任务;我们使用 See et al. (2017) 的非匿名版本作为抽象摘要任务。SQuAD (Rajpurkar et al., 2016) 是一个常见的问答基准测试。在我们的实验中,模型被输入问题及其上下文,并被要求逐个标记地生成答案。对于 WMT 英语到德语,我们使用与 (Vaswani et al., 2017) 相同的训练数据(即 News Commentary v13, Common Crawl, Europarl v7)和 newstest2013 作为验证集 (Bojar et al., 2014)。对于英语到法语,我们使用 2015 年的标准训练数据和 newstest2014 作为验证集 (Bojar et al., 2015)。对于英语到罗马尼亚语,这是一个标准的低资源机器翻译基准测试,我们使用 WMT 2016 的训练和验证集 (Bojar et al., 2016)。请注意,我们仅在英语数据上进行预训练,因此为了学习翻译,给定的模型将需要学习生成新语言的文本。

2.4 输入和输出格式

为了在上述多样化的任务集上训练单个模型,我们将我们考虑的所有任务转换为“文本到文本”格式——也就是说,模型被输入一些文本作为上下文或条件,然后被要求产生一些输出文本。该框架为预训练和微调提供了统一的训练目标。具体来说,无论任务如何,模型都使用最大似然目标(使用“教师强制”(Williams and Zipser, 1989))进行训练。为了指定模型应该执行的任务,我们在将原始输入序列馈送到模型之前,向其添加了一个特定于任务的(文本)前缀。

例如,要要求模型将句子“That is good.”从英语翻译成德语,模型将被馈送序列“translate English to German: That is good.”并被训练输出“Das ist gut.”。对于文本分类任务,模型只需预测对应于目标标签的单个单词。例如,在 MNLI 基准测试 (Williams et al., 2017) 上,目标是预测前提是否蕴含(“entailment”)、矛盾(“contradiction”)或既不(“neutral”)假设。通过我们的预处理,输入序列变为“mnli premise: I hate pigeons. hypothesis: My feelings towards pigeons are filled with animosity.”,对应的目标单词为“entailment”。请注意,如果我们的模型在文本分类任务上输出的文本不对应于任何可能的标签(例如,如果模型输出“hamburger”,而任务的唯一可能标签是“entailment”、“neutral”或“contradiction”),则会出现问题。在这种情况下,我们总是将模型的输出计为错误,尽管我们在任何训练过的模型中从未观察到这种行为。请注意,给定任务使用的文本前缀的选择本质上是一个超参数;我们发现更改前缀的确切措辞影响有限,因此没有对不同的前缀选择进行广泛的实验。我们的文本到文本框架图以及一些输入/输出示例显示在图 1 中。我们在附录 D 中提供了我们研究的每个任务的预处理输入完整示例。

我们的文本到文本框架遵循之前将多个 NLP 任务转换为通用格式的工作:McCann et al. (2018) 提出了“自然语言十项全能”,这是一个使用一致的问答格式进行十个 NLP 任务套件的基准测试。自然语言十项全能还规定所有模型必须是多任务的,即能够同时处理所有任务。我们则允许在每个单独的任务上分别微调模型,并使用短任务前缀而不是明确的问答格式。Radford et al. (2019) 通过将一些输入作为前缀馈送到模型,然后自回归地采样输出来评估语言模型的零样本学习能力。例如,自动摘要是通过输入文档,后跟文本“TL;DR:”(“too long, didn’t read”的缩写,一种常见的缩写),然后通过自回归解码预测摘要来完成的。我们主要考虑在生成输出之前使用编码器显式处理输入并使用单独解码器的模型,并且我们专注于迁移学习而不是零样本学习。最后,Keskar et al. (2019b) 将许多 NLP 任务统一为“跨度提取”,其中对应于可能输出选择的文本被附加到输入,模型被训练以提取对应于正确选择的输入跨度。相比之下,我们的框架也允许生成任务,如机器翻译和抽象摘要,在这些任务中无法枚举所有可能的输出选择。

我们能够直接将我们考虑的所有任务转换为文本到文本格式,除了 STS-B,这是一个回归任务,目标是预测 1 到 5 之间的相似度分数。我们发现这些分数大多以 0.2 的增量进行注释,因此我们只需将任何分数四舍五入到最接近的 0.2 增量,并将结果转换为数字的字面字符串表示(例如,浮点值 2.57 将被映射到字符串“2.6”)。在测试时,如果模型输出对应于 1 到 5 之间数字的字符串,我们将其转换为浮点值;否则,我们将模型的预测视为不正确。这有效地将 STS-B 回归问题重铸为 21 类分类问题。

另外,我们还将 Winograd 任务(来自 GLUE 的 WNLI,来自 SuperGLUE 的 WSC,以及我们添加到 SuperGLUE 的 DPR 数据集)转换为更适合文本到文本框架的更简单格式。来自 Winograd 任务的示例由包含歧义代词的文本段落组成,该代词可能指代段落中的多个名词短语。例如,段落可能是“The city councilmen refused the demonstrators a permit because they feared violence.”,其中包含歧义代词“they”,可能指代“city councilmen”或“demonstrators”。我们将 WNLI、WSC 和 DPR 任务转换为文本到文本问题,方法是在文本段落中突出显示歧义代词,并要求模型预测它所指代的名词。上述示例将被转换为输入“The city councilmen refused the demonstrators a permit because they feared violence.”,模型将被训练以预测目标文本“The city councilmen”。

对于 WSC,示例包含段落、歧义代词、候选名词以及反映候选者是否与代词匹配(忽略任何冠词)的 True/False 标签。我们仅在带有“True”标签的示例上进行训练,因为我们不知道带有“False”标签的示例的正确名词目标。对于评估,如果模型输出中的单词是候选名词短语中单词的子集(反之亦然),我们分配一个“True”标签,否则分配一个“False”标签。这删除了大约一半的 WSC 训练集,但 DPR 数据集增加了大约 1,000 个代词消解示例。来自 DPR 的示例用正确的指代名词进行了注释,使得以列出的格式使用该数据集变得容易。

WNLI 训练集和验证集与 WSC 训练集有显著重叠。为了避免将验证示例泄露到我们的训练数据中(这是第 3.5.2 节多任务实验中的一个特定问题),我们因此从不在 WNLI 上进行训练,也从不报告 WNLI 验证集上的结果。省略 WNLI 验证集上的结果是标准做法(Devlin et al., 2018),因为相对于训练集而言,它是“对抗性”的,即验证示例都是训练示例的轻微扰动版本,且标签相反。因此,每当我们报告验证集(除第 3.7 节报告测试集结果的所有章节)时,我们不将 WNLI 包含在平均 GLUE 分数中。将示例从 WNLI 转换为上述“指代名词预测”变体稍微复杂一些;我们在附录 B 中描述了这个过程。


3. 实验

NLP 迁移学习的最新进展来自各种发展,例如新的预训练目标、模型架构、无标签数据集等。在本节中,我们对这些技术进行了经验性调查,希望能理清它们的贡献和意义。然后,我们结合获得的见解,在我们考虑的许多任务中达到最先进水平。由于 NLP 迁移学习是一个快速发展的研究领域,我们不可能在我们的经验研究中涵盖每一种可能的技术或想法。对于更广泛的文献综述,我们推荐 Ruder et al. (2019) 的最新调查。

我们通过采用合理的基线(在第 3.1 节中描述)并一次改变设置的一个方面来系统地研究这些贡献。例如,在第 3.3 节中,我们测量了不同无监督目标在保持我们实验流程其余部分固定的情况下的性能。这种“坐标上升”方法可能会错过二阶效应(例如,某些特定的无监督目标可能在我们基线设置之外的模型上效果最好),但对我们研究中的所有因素进行组合探索将极其昂贵。在未来的工作中,我们预计更彻底地考虑我们研究的方法的组合可能会很有成效。

我们的目标是在保持尽可能多因素固定的情况下,比较各种不同的方法。为了满足这一目标,在某些情况下,我们并没有完全复制现有方法。例如,“仅编码器”模型(如 BERT (Devlin et al., 2018))旨在为每个输入标记产生单个预测或为整个输入序列产生单个预测。这使得它们适用于分类或跨度预测任务,但不适用于翻译或抽象摘要等生成任务。因此,我们考虑的没有任何模型架构与 BERT 完全相同或由仅编码器结构组成。相反,我们测试精神相似的方法——例如,我们在第 3.3 节中考虑了与 BERT 的“掩码语言建模”目标类似的目标,并在第 3.2 节中考虑了在文本分类任务上表现类似于 BERT 的模型架构。

在概述了下一小节中的基线实验设置后,我们将进行模型架构(第 3.2 节)、无监督目标(第 3.3 节)、预训练数据集(第 3.4 节)、迁移方法(第 3.5 节)和扩展(第 3.6 节)的经验比较。在本节的最后,我们将结合我们的研究见解与规模,在我们考虑的许多任务中获得最先进的结果(第 3.7 节)。

3.1 基线

我们基线的目标是反映典型的现代实践。我们使用简单的去噪目标预训练一个标准 Transformer(在第 2.1 节中描述),然后分别在我们的每个下游任务上进行微调。我们在以下小节中描述此实验设置的细节。

3.1.1 模型

对于我们的模型,我们使用 Vaswani et al. (2017) 提出的标准编码器-解码器 Transformer。虽然许多现代 NLP 迁移学习方法使用仅由单个“堆栈”组成的 Transformer 架构(例如用于语言建模 (Radford et al., 2018; Dong et al., 2019) 或分类和跨度预测 (Devlin et al., 2018; Yang et al., 2019)),但我们发现使用标准的编码器-解码器结构在生成和分类任务上都取得了良好的结果。我们在第 3.2 节中探索了不同模型架构的性能。

我们的基线模型设计使得编码器和解码器在大小和配置上都类似于“BERTBASE_{BASE}” (Devlin et al., 2018) 堆栈。具体来说,编码器和解码器都由 12 个块组成(每个块包含自注意力、可选的编码器-解码器注意力和前馈网络)。每个块中的前馈网络由一个输出维度为 dff=3072d_{\text{ff}} = 3072 的密集层,后跟 ReLU 非线性,再后跟另一个密集层组成。所有注意力机制的“键”和“值”矩阵具有 dkv=64d_{\text{kv}} = 64 的内部维度,并且所有注意力机制都有 12 个头。所有其他子层和嵌入的维度为 dmodel=768d_{\text{model}} = 768。总共,这导致了一个具有约 2.2 亿参数的模型。这大约是 BERTBASE_{BASE} 参数数量的两倍,因为我们的基线模型包含两个层堆栈而不是一个。为了正则化,我们在模型中应用 dropout 的地方都使用了 0.1 的 dropout 概率。

3.1.2 训练

如第 2.4 节所述,所有任务都被表述为文本到文本任务。这允许我们始终使用标准最大似然进行训练,即使用教师强制(Williams and Zipser, 1989)和交叉熵损失。对于优化,我们使用 AdaFactor (Shazeer and Stern, 2018)。在测试时,我们使用贪婪解码(即在每个时间步选择最高概率的 logit)。

我们在 C4 上预训练每个模型 219=524,2882^{19} = 524,288 步,然后进行微调。我们使用 512 的最大序列长度和 128 个序列的批大小。只要可能,我们将多个序列“打包”到批次的每个条目中,以便我们的批次包含大约 216=65,5362^{16} = 65,536 个标记。总的来说,这个批大小和步数对应于在 23534B2^{35} \approx 34B 个标记上进行预训练。这远少于 BERT (Devlin et al., 2018)(使用了约 137B 个标记)或 RoBERTa (Liu et al., 2019c)(使用了约 2.2T 个标记)。仅使用 2352^{35} 个标记可以在合理的计算预算内提供足够的预训练以获得可接受的性能。我们在第 3.6 节和第 3.7 节中考虑了进行更多步预训练的效果。请注意,2352^{35} 个标记仅覆盖了整个 C4 数据集的一小部分,因此我们在预训练期间从不重复任何数据。

在预训练期间,我们使用“逆平方根”学习率调度:1/max(n,k)1/\sqrt{\max(n, k)},其中 nn 是当前的训练迭代,kk 是预热步数(在我们所有的实验中设置为 10410^4)。这为前 10410^4 步设置了 0.01 的恒定学习率,然后指数衰减学习率直到预训练结束。我们还尝试了使用三角学习率(Howard and Ruder, 2018),它产生了稍好的结果,但需要提前知道总训练步数。由于我们将在一些实验中改变训练步数,我们选择了更通用的逆平方根调度。

我们的模型在所有任务上微调 218=262,1442^{18} = 262,144 步。选择此值是在高资源任务(即具有大数据集的任务,受益于额外的微调)和低资源任务(较小的数据集,过拟合很快)之间进行的权衡。在微调期间,我们继续使用 128 个长度为 512 的序列的批次(即每个批次 2162^{16} 个标记)。我们在微调时使用 0.001 的恒定学习率。我们每 5,000 步保存一个检查点,并报告对应于最高验证性能的模型检查点上的结果。对于在多个任务上微调的模型,我们为每个任务独立选择最佳检查点。对于除第 3.7 节之外的所有实验,我们报告验证集上的结果,以避免在测试集上进行模型选择。

3.1.3 词汇表

我们使用 SentencePiece (Kudo and Richardson, 2018) 将文本编码为 WordPiece 标记 (Sennrich et al., 2015; Kudo, 2018)。对于所有实验,我们使用 32,000 个 wordpiece 的词汇表。由于我们最终在英语到德语、法语和罗马尼亚语翻译上微调我们的模型,我们还要求我们的词汇表涵盖这些非英语语言。为了解决这个问题,我们将 C4 中使用的 Common Crawl 抓取页面分类为德语、法语和罗马尼亚语。然后,我们在 10 份英语 C4 数据与 1 份分别分类为德语、法语或罗马尼亚语的数据的混合物上训练我们的 SentencePiece 模型。此词汇表在我们模型的输入和输出之间共享。请注意,我们的词汇表使得我们的模型只能处理预定的、固定的语言集。

3.1.4 无监督目标

利用无标签数据来预训练我们的模型需要一个不需要标签但(粗略地说)能教给模型可推广知识的目标,这些知识在下游任务中是有用的。初步应用预训练和微调所有模型参数的迁移学习范式来解决 NLP 问题的工作,使用了因果语言建模目标进行预训练(Dai and Le, 2015; Peters et al., 2018; Radford et al., 2018; Howard and Ruder, 2018)。然而,最近的研究表明,“去噪”目标(Devlin et al., 2018; Taylor, 1953)(也称为“掩码语言建模”)能产生更好的性能,因此它们已迅速成为标准。在去噪目标中,模型被训练以预测输入中缺失或以其他方式损坏的标记。受 BERT 的“掩码语言建模”目标和“词 dropout”正则化技术(Bowman et al., 2015)的启发,我们设计了一个目标,随机采样并丢弃输入序列中 15% 的标记。所有连续的丢弃标记跨度都被单个哨兵标记替换。每个哨兵标记被分配一个在该示例中唯一的标记 ID。哨兵 ID 是添加到我们词汇表中的特殊标记,不对应于任何 wordpiece。然后,目标对应于所有丢弃的标记跨度,由用于替换输入中它们的相同哨兵标记分隔,外加一个最终的哨兵标记来标记目标序列的结束。我们选择掩码连续标记跨度并仅预测丢弃的标记,是为了降低预训练的计算成本。我们在第 3.3 节中对预训练目标进行了彻底的调查。应用此目标产生的转换示例显示在图 2 中。我们在第 3.3 节中将此目标与许多其他变体进行了经验性比较。

3.1.5 基线性能

在本节中,我们展示了使用上述基线实验程序的结果,以了解在我们的下游任务套件上可以预期什么样的性能。理想情况下,我们会多次重复我们研究中的每个实验,以获得我们结果的置信区间。不幸的是,由于我们运行的实验数量庞大,这在经济上是不可行的。作为一种更便宜的替代方案,我们将我们的基线模型从头开始训练了 10 次(即使用不同的随机初始化和数据集洗牌),并假设基线模型在这些运行中的方差也适用于每个实验变体。我们预计我们所做的大多数更改不会对运行间方差产生巨大影响,因此这应该能合理地指示不同更改的显著性。另外,我们还测量了在所有下游任务上不进行预训练的情况下,将我们的模型训练 2182^{18} 步(我们用于微调的相同步数)的性能。这让我们了解了预训练在基线设置中对我们模型的好处。

在正文中报告结果时,为了节省空间和便于解释,我们仅报告所有基准测试中分数的一个子集。对于 GLUE 和 SuperGLUE,我们报告所有子任务的平均分数(按照官方基准测试的规定),标题为“GLUE”和“SGLUE”。对于所有翻译任务,我们报告由 SacreBLEU v1.3.0 (Post, 2018) 提供的 BLEU 分数(Papineni et al., 2002),使用“exp”平滑和“intl”分词。我们将 WMT 英语到德语、英语到法语和英语到罗马尼亚语的得分分别称为 EnDe、EnFr 和 EnRo。对于 CNN/Daily Mail,我们发现模型在 ROUGE-1-F、ROUGE-2-F 和 ROUGE-L-F 指标(Lin, 2004)上的性能高度相关,因此我们仅在标题“CNNDM”下报告 ROUGE-2-F 分数。同样,对于 SQuAD,我们发现“精确匹配”和“F1”分数的性能高度相关,因此我们仅报告“精确匹配”分数。我们在附录 E 的表 16 中提供了每个实验在每个任务上取得的每一个分数。

我们的结果表格式化为每一行对应于特定的实验配置,列给出了每个基准测试的分数。我们将在大多数表格中包含基线配置的平均性能。只要出现基线配置,我们就会用 \star 标记它(如表 1 的第一行)。我们还将加粗任何在给定实验中处于最大(最佳)值两个标准差以内的分数。

我们的基线结果显示在表 1 中。总体而言,我们的结果与类似大小的现有模型相当。例如,BERTBASE_{BASE} 在 SQuAD 上取得了 80.8 的精确匹配分数,在 MNLI-matched 上取得了 84.4 的准确率,而我们分别取得了 80.88 和 84.24(见表 16)。请注意,我们无法直接将我们的基线与 BERTBASE_{BASE} 进行比较,因为我们的是编码器-解码器模型,并且预训练的步数大约是其 1/4。不出所料,我们发现预训练在几乎所有基准测试中都提供了显著的收益。唯一的例外是 WMT 英语到法语,这是一个足够大的数据集,预训练带来的收益往往是边际的。我们将此任务包含在我们的实验中,以测试迁移学习在高资源环境下的行为。由于我们通过选择表现最好的检查点来执行提前停止,我们的基线与“无预训练”之间的巨大差异强调了预训练在数据有限的任务上对性能的提升程度。虽然我们在本文中没有明确测量数据效率的改进,但我们强调这是迁移学习范式的主要好处之一。

至于运行间方差,我们发现对于大多数任务,跨运行的标准差小于任务基线分数的 1%。此规则的例外包括 CoLA、CB 和 COPA,它们都是来自 GLUE 和 SuperGLUE 基准测试的低资源任务。例如,在 CB 上,我们的基线模型平均 F1 分数为 91.22,标准差为 3.237(见表 16),这可能部分归因于 CB 的验证集仅包含 56 个示例的事实。请注意,GLUE 和 SuperGLUE 分数是计算为构成每个基准测试的任务分数的平均值。因此,我们提醒,CoLA、CB 和 COPA 的高运行间方差可能使仅使用 GLUE 和 SuperGLUE 分数来比较模型变得更加困难。


GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
\star 基线平均83.2819.2480.8871.3626.9839.8227.65
基线标准差0.2350.0650.3430.4160.1120.0900.108
无预训练66.2217.6050.3153.0425.8639.7724.04

表 1: 我们的基线模型和训练程序取得的分数的平均值和标准差。为了进行比较,我们还报告了在每个任务上从头开始训练(即没有预训练)相同步数(用于微调基线模型)时的性能。本表(以及我们论文中除表 14 外的每个表格)中的所有分数均在每个数据集的验证集上报告。


3.2 架构

虽然 Transformer 最初是以编码器-解码器架构引入的,但许多现代 NLP 迁移学习工作使用了替代架构。在本节中,我们回顾并比较这些架构变体。

3.2.1 模型结构

不同架构的一个主要区别因素是模型中不同注意力机制使用的“掩码”。回想一下,Transformer 中的自注意力操作将序列作为输入并输出相同长度的新序列。输出序列的每个条目是通过计算输入序列条目的加权平均值产生的。具体来说,令 yiy_i 指代输出序列的第 ii 个元素,xjx_j 指代输入序列的第 jj 个条目。yiy_i 计算为 jwi,jxj\sum_j w_{i,j} x_j,其中 wi,jw_{i,j} 是自注意力机制作为 xix_ixjx_j 的函数产生的标量权重。然后,注意力掩码用于将某些权重归零,以约束在给定的输出时间步可以关注哪些输入条目。我们将考虑的掩码图显示在图 3 中。例如,因果掩码(图 3,中间)将任何 j>ij > iwi,jw_{i,j} 设置为零。

我们考虑的第一个模型结构是编码器-解码器 Transformer,它由两个层堆栈组成:编码器(被输入一个序列)和解码器(产生一个新的输出序列)。这种架构变体的示意图显示在图 4 的左侧面板中。

编码器使用“全可见”注意力掩码。全可见掩码允许自注意力机制在产生其输出的每个条目时关注输入的任何条目。我们将此掩码模式可视化在图 3 的左侧。这种形式的掩码在关注“前缀”时是合适的,即提供给模型的一些上下文,稍后用于进行预测。BERT (Devlin et al., 2018) 也使用全可见掩码模式,并将一个特殊的“分类”标记附加到输入。BERT 在对应于分类标记的时间步的输出,然后被用于对输入序列进行分类的预测。

Transformer 解码器中的自注意力操作使用“因果”掩码模式。在产生输出序列的第 ii 个条目时,因果掩码防止模型关注输入序列中 j>ij > i 的第 jj 个条目。这在训练期间使用,以便模型在产生输出时不能“看到未来”。此掩码模式的注意力矩阵显示在图 3 的中间。

编码器-解码器 Transformer 中的解码器用于自回归地产生输出序列。也就是说,在每个输出时间步,从模型的预测分布中采样一个标记,并将该样本反馈回模型以产生下一个输出时间步的预测,依此类推。因此,Transformer 解码器(没有编码器)可以用作语言模型(LM),即仅针对下一步预测进行训练的模型(Liu et al., 2018; Radford et al., 2018; Al-Rfou et al., 2019)。这构成了我们考虑的第二个模型结构。此架构的示意图显示在图 4 的中间。事实上,NLP 迁移学习的早期工作使用了这种架构,并将语言建模目标作为预训练方法(Radford et al., 2018)。

语言模型通常用于压缩或序列生成(Graves, 2013)。然而,它们也可以通过简单地连接输入和目标来用于文本到文本框架。例如,考虑英语到德语翻译的情况:如果我们有一个输入句子为“That is good.”且目标为“Das ist gut.”的训练数据点,我们只需在连接的输入序列“translate English to German: That is good. target: Das ist gut.”上训练模型进行下一步预测。如果我们想获得模型对该示例的预测,模型将被馈送前缀“translate English to German: That is good. target:”并被要求自回归地生成序列的其余部分。通过这种方式,模型可以在给定输入的情况下预测输出序列,这满足了文本到文本任务的需求。这种方法最近被用于展示语言模型可以在没有监督的情况下学习执行某些文本到文本任务(Radford et al., 2019)。

在文本到文本设置中使用语言模型的一个基本且经常被引用的缺点是,因果掩码强制模型对输入序列第 ii 个条目的表示仅依赖于直到 ii 为止的条目。要了解为什么这可能是不利的,请考虑在模型被要求进行预测之前提供前缀/上下文的文本到文本框架(例如,前缀是英语句子,模型被要求预测德语翻译)。使用完全因果掩码,模型对前缀状态的表示只能依赖于前缀的先前条目。因此,在预测输出的条目时,模型将关注前缀的表示,该表示是不必要地受限的。类似的论点也被用来反对在序列到序列模型中使用单向循环神经网络编码器(Bahdanau et al., 2015)。

这个问题可以通过改变掩码模式在基于 Transformer 的语言模型中避免。除了使用因果掩码外,我们在序列的前缀部分使用全可见掩码。这种掩码模式和由此产生的“前缀 LM”(我们考虑的第三种模型结构)的示意图分别显示在图 3 和图 4 的最右侧面板中。在上面提到的英语到德语翻译示例中,全可见掩码将应用于前缀“translate English to German: That is good. target:”,而因果掩码将在训练期间用于预测目标“Das ist gut.”。在文本到文本框架中使用前缀 LM 最初由 Liu et al. (2018) 提出。最近,Dong et al. (2019) 表明这种架构在各种文本到文本任务上是有效的。这种架构类似于编码器-解码器模型,参数在编码器和解码器之间共享,并且编码器-解码器注意力被替换为跨输入和目标序列的完全注意力。

我们注意到,当遵循我们的文本到文本框架时,前缀 LM 架构在分类任务上与 BERT (Devlin et al., 2018) 非常相似。要了解原因,请考虑来自 MNLI 基准测试的一个示例,其中前提是“I hate pigeons.”,假设是“My feelings towards pigeons are filled with animosity.”,正确的标签是“entailment”。要将此示例馈送到语言模型,我们会将其转换为序列“mnli premise: I hate pigeons. hypothesis: My feelings towards pigeons are filled with animosity. target: entailment”。在这种情况下,全可见前缀将对应于直到单词“target:”之前的整个输入序列,这可以被视为类似于 BERT 中使用的“分类”标记。因此,我们的模型将对整个输入具有完全的可见性,然后将被要求通过输出单词“entailment”来进行分类。模型很容易学习在给定任务前缀(在本例中为“mnli”)的情况下输出有效的类标签之一。因此,前缀 LM 和 BERT 架构之间的主要区别在于,分类器在前缀 LM 中只是集成到了 Transformer 解码器的输出层中。

3.2.2 比较不同的模型结构

为了实验性地比较这些架构变体,我们希望我们考虑的每个模型在某种意义上是等价的。如果两个模型要么具有相同数量的参数,要么它们需要大致相同的计算量来处理给定的(输入序列,目标序列)对,我们可能会说它们是等价的。不幸的是,不可能同时根据这两个标准将编码器-解码器模型与语言模型架构(包含单个 Transformer 堆栈)进行比较。要了解原因,首先注意一个在编码器中有 LL 层、在解码器中有 LL 层的编码器-解码器模型,其参数数量大约与具有 2L2L 层的语言模型相同。然而,相同的 L+LL+L 编码器-解码器模型将具有与仅有 LL 层的语言模型大致相同的计算成本。这是因为语言模型中的 LL 层必须应用于输入和输出序列,而编码器仅应用于输入序列,解码器仅应用于输出序列。请注意,这些等价是近似的——由于编码器-解码器注意力,解码器中会有一些额外的参数,并且注意力层中也存在与序列长度呈二次关系的计算成本。然而,在实践中,我们观察到 LL 层语言模型与 L+LL+L 层编码器-解码器模型的步时间几乎相同,这表明计算成本大致相当。此外,对于我们考虑的模型大小,编码器-解码器注意力层中的参数数量约占总参数计数的 10%,因此我们做出简化假设:L+LL+L 层编码器-解码器模型与 2L2L 层语言模型具有相同数量的参数。

为了提供一种合理的比较手段,我们考虑了我们编码器-解码器模型的多种配置。我们将 BERTBASE_{BASE} 大小的层堆栈中的层数和参数数量分别称为 LLPP。我们将使用 MM 来指代 L+LL+L 层编码器-解码器模型或 LL 层仅解码器模型处理给定输入-目标对所需的 FLOPs 数量。总共,我们将比较:

  • 一个在编码器中有 LL 层、在解码器中有 LL 层的编码器-解码器模型。该模型有 2P2P 个参数,计算成本为 MM FLOPs。
  • 一个等效模型,但参数在编码器和解码器之间共享,导致 PP 个参数和 MM-FLOP 计算成本。
  • 一个在编码器和解码器中各有 L/2L/2 层的编码器-解码器模型,给出 PP 个参数和 M/2M/2-FLOP 成本。
  • 一个具有 LL 层和 PP 个参数的仅解码器语言模型,产生的计算成本为 MM FLOPs。
  • 一个具有相同架构(因此具有相同数量的参数和计算成本)的仅解码器前缀 LM,但对输入具有全可见自注意力。
3.2.3 目标

作为无监督目标,我们将考虑基本语言建模目标以及我们在第 3.1.4 节中描述的基线去噪目标。我们包含语言建模目标是因为它作为预训练目标的历史用途(Dai and Le, 2015; Ramachandran et al., 2016; Howard and Ruder, 2018; Radford et al., 2018; Peters et al., 2018),以及它与我们考虑的语言模型架构的自然契合。对于在进行预测之前摄取前缀的模型(编码器-解码器模型和前缀 LM),我们从我们的无标签数据集中采样一个文本跨度,并选择一个随机点将其拆分为前缀和目标部分。对于标准语言模型,我们训练模型从头到尾预测整个跨度。我们的无监督去噪目标是为文本到文本模型设计的;为了使其适应语言模型,我们按照第 3.2.1 节中的描述连接输入和目标。

3.2.4 结果

我们比较的每个架构取得的分数显示在表 2 中。对于所有任务,具有去噪目标的编码器-解码器架构表现最好。该变体具有最高的参数计数 (2P2P),但与 PP 参数的仅解码器模型具有相同的计算成本。令人惊讶的是,我们发现跨编码器和解码器共享参数的表现也几乎一样好。相比之下,将编码器和解码器堆栈中的层数减半会显著损害性能。最近的工作(Lan et al., 2019)也发现,跨 Transformer 块共享参数可以成为降低总参数计数而不牺牲太多性能的有效手段。XLNet 也与具有去噪目标的共享编码器-解码器方法有一些相似之处(Yang et al., 2019)。我们还注意到,共享参数的编码器-解码器优于仅解码器的前缀 LM,这表明添加显式的编码器-解码器注意力是有益的。最后,我们证实了广泛持有的观点,即与语言建模目标相比,使用去噪目标总是能带来更好的下游任务性能。这一观察结果之前已被 Devlin et al. (2018)、Voita et al. (2019) 和 Lample and Conneau (2019) 等人提出。我们在下一节中对无监督目标进行了更详细的探索。


架构目标参数成本GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
\star 编码器-解码器去噪2P2PMM83.2819.2480.8871.3626.9839.8227.65
编码-解码,共享去噪PPMM82.8118.7880.6370.7326.7239.0327.46
编码-解码,6 层去噪PPM/2M/280.8818.9777.5968.4226.3838.4026.95
语言模型去噪PPMM74.7017.9361.1455.0225.0935.2825.86
前缀 LM去噪PPMM81.8218.6178.9468.1126.4337.9827.39
编码器-解码器LM2P2PMM79.5618.5976.0264.2926.2739.1726.86
编码-解码,共享LMPPMM79.6018.1376.3563.5026.6239.1727.05
编码-解码,6 层LMPPM/2M/278.6718.2675.3264.0626.1338.4226.89
语言模型LMPPMM73.7817.5453.8156.5125.2334.3125.38
前缀 LMLMPPMM79.6817.8476.8764.8626.2837.5126.76

表 2: 第 3.2.2 节中描述的不同架构变体的性能。我们使用 PP 指代 12 层基础 Transformer 层堆栈中的参数数量,使用 MM 指代使用编码器-解码器模型处理序列所需的 FLOPs。我们使用去噪目标(在第 3.1.4 节中描述)和自回归目标(通常用于训练语言模型)评估每个架构变体。


3.3 无监督目标

无监督目标的选择至关重要,因为它提供了模型获得通用知识以应用于下游任务的机制。这导致了各种预训练目标的开发(Dai and Le, 2015; Ramachandran et al., 2016; Radford et al., 2018; Devlin et al., 2018; Yang et al., 2019; Liu et al., 2019b; Wang et al., 2019a; Song et al., 2019; Dong et al., 2019; Joshi et al., 2019)。在本节中,我们对无监督目标空间进行了程序性探索。在许多情况下,我们不会完全复制现有的目标——有些会被修改以适应我们的文本到文本编码器-解码器框架,而在其他情况下,我们将使用结合了多种常见概念的目标。

总体而言,我们所有的目标都摄取对应于我们无标签文本数据集中标记化文本跨度的标记 ID 序列。标记序列被处理以产生(损坏的)输入序列和相应的目标。然后,模型像往常一样进行训练,以最大似然预测目标序列。我们在表 3 中提供了我们考虑的许多目标的说明性示例。

3.3.1 不同的高级方法

首先,我们比较三种受常用目标启发但方法差异显著的技术。首先,我们包含了我们在第 3.2.3 节中使用的基本“前缀语言建模”目标。该技术将文本跨度拆分为两个部分,一个用于输入到编码器,另一个用作解码器要预测的目标序列。其次,我们考虑了一个受 BERT (Devlin et al., 2018) 中使用的“掩码语言建模”(MLM)目标启发的目标。MLM 采用文本跨度并损坏 15% 的标记。90% 的损坏标记被特殊的掩码标记替换,10% 被随机标记替换。由于 BERT 是仅编码器模型,其在预训练期间的目标是在编码器的输出处重建掩码标记。在编码器-解码器情况下,我们只需使用整个未损坏的序列作为目标。请注意,这与我们的基线目标不同,基线目标仅使用损坏的标记作为目标;我们在第 3.3.2 节中比较了这两种方法。最后,我们还考虑了一个基本去洗牌目标,如 (Liu et al., 2019a) 中所使用的,它被应用于去噪顺序自动编码器。这种方法采用标记序列,将其洗牌,然后使用原始的去洗牌序列作为目标。我们在表 3 的前三行中提供了这三种方法的输入和目标示例。

这三个目标的性能显示在表 4 中。总体而言,我们发现 BERT 风格的目标表现最好,尽管前缀语言建模目标在翻译任务上达到了相似的性能。事实上,BERT 目标的动机是优于基于语言模型的预训练。去洗牌目标的表现明显差于前缀语言建模和 BERT 风格的目标。


目标输入目标
前缀语言建模Thank you for inviting me to your party last week .me to your party last week .
BERT 风格 (Devlin et al., 2018)Thank you me to your party apple week .(original text)
去洗牌party me for your to . last fun you inviting week Thank(original text)
MASS 风格 (Song et al., 2019)Thank you me to your party week .(original text)
I.i.d. 噪声,替换跨度Thank you me to your party week . for inviting last
I.i.d. 噪声,丢弃标记Thank you me to your party week .for inviting last
随机跨度Thank you to week . for inviting me your party last

表 3: 应用于输入文本“Thank you for inviting me to your party last week .”的我们考虑的一些无监督目标产生的输入和目标示例。请注意,我们所有的目标都处理标记化文本。对于这个特定的句子,所有单词都被我们的词汇表映射到一个标记。我们将 (original text) 写为目标,以表示模型被任务重建整个输入文本。 表示共享掩码标记, 表示被分配唯一标记 ID 的哨兵标记。BERT 风格的目标(第二行)包含一种损坏,其中一些标记被随机标记 ID 替换;我们通过灰色的单词 apple 展示了这一点。


目标GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
前缀语言建模80.6918.9477.9965.2726.8639.7327.49
BERT 风格 (Devlin et al., 2018)82.9619.1780.6569.8526.7840.0327.41
去洗牌73.1718.5967.6158.4726.1139.3025.62

表 4: 第 3.3.1 节中描述的三个不同预训练目标的性能。


目标GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
BERT 风格 (Devlin et al., 2018)82.9619.1780.6569.8526.7840.0327.41
MASS 风格 (Song et al., 2019)82.3219.1680.1069.2826.7939.8927.55
\star 替换损坏跨度83.2819.2480.8871.3626.9839.8227.65
丢弃损坏标记84.4419.3180.5268.6727.0739.7627.82

表 5: BERT 风格预训练目标的变体比较。在前两个变体中,模型被训练以重建原始的未损坏文本段。在后两个变体中,模型仅预测损坏标记的序列。


3.3.2 简化 BERT 目标

基于前一节的结果,我们现在将重点放在探索 BERT 风格去噪目标的修改上。该目标最初是作为为分类和跨度预测训练的仅编码器模型预训练技术提出的。因此,可能可以修改它,使其在我们的编码器-解码器文本到文本设置中表现更好或更有效。

首先,我们考虑 BERT 风格目标的一个简单变体,其中我们不包含随机标记交换步骤。由此产生的目标只是将输入中 15% 的标记替换为掩码标记,模型被训练以重建原始的未损坏序列。Song et al. (2019) 使用了类似的掩码目标,其中它被称为“MASS”风格目标,因此我们将此变体称为“MASS 风格”目标。其次,我们有兴趣看看是否可以避免预测整个未损坏的文本跨度,因为这需要在解码器中进行长序列的自注意力。我们考虑了两种策略来实现这一点:首先,不是用掩码标记替换每个损坏的标记,而是用唯一的掩码标记替换每个连续的损坏标记跨度。然后,目标序列变为“损坏”跨度的连接,每个跨度都以用于替换输入中它的掩码标记为前缀。这是我们在基线中使用的预训练目标,在第 3.1.4 节中描述。其次,我们还考虑了一个变体,其中我们简单地完全从输入序列中丢弃损坏的标记,并任务模型按顺序重建丢弃的标记。这些方法的示例显示在表 3 的第五和第六行中。

原始 BERT 风格目标与这三个替代方案的经验比较显示在表 5 中。我们发现,在我们的设置中,所有这些变体的表现相似。唯一的例外是完全丢弃损坏标记在 GLUE 分数上产生了一个小的改进,这要归功于在 CoLA 上显著更高的分数(60.04,相比于我们的基线平均值 53.84,见表 16)。这可能是因为 CoLA 涉及分类给定句子在语法和句法上是否可接受,而能够确定标记何时缺失与检测可接受性密切相关。然而,在 SuperGLUE 上,完全丢弃标记的表现比用哨兵标记替换它们更差。不需要预测完整原始序列的两个变体(“替换损坏跨度”和“丢弃损坏标记”)都具有潜在的吸引力,因为它们使目标序列更短,从而使训练更快。展望未来,我们将探索用哨兵标记替换损坏跨度并仅预测损坏标记的变体(如我们的基线目标)。

3.3.3 改变损坏率

到目前为止,我们一直在损坏 15% 的标记,这是 BERT (Devlin et al., 2018) 中使用的值。同样,由于我们的文本到文本框架与 BERT 的不同,我们有兴趣看看不同的损坏率是否对我们更好。我们在表 6 中比较了 10%、15%、25% 和 50% 的损坏率。总体而言,我们发现损坏率对模型性能的影响有限。唯一的例外是我们考虑的最大损坏率(50%)导致 GLUE 和 SQuAD 上的性能显著下降。使用更大的损坏率也会导致更长的目标,这可能会减慢训练速度。基于这些结果和 BERT 设定的历史先例,我们将继续使用 15% 的损坏率。


损坏率GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
10%82.8219.0080.3869.5526.8739.2827.44
\star 15%83.2819.2480.8871.3626.9839.8227.65
25%83.0019.5480.9670.4827.0439.8327.47
50%81.271.3219.3279.8070.3327.0139.90

表 6: 具有不同损坏率的 i.i.d. 损坏目标的性能。


基线平均值 53.84,见表 16)。这可能是因为 CoLA 涉及分类给定句子在语法和句法上是否可接受,而能够确定标记何时缺失与检测可接受性密切相关。然而,在 SuperGLUE 上,完全丢弃标记的表现比用哨兵标记替换它们更差。不需要预测完整原始序列的两个变体(“替换损坏跨度”和“丢弃损坏标记”)都具有潜在的吸引力,因为它们使目标序列更短,从而使训练更快。展望未来,我们将探索用哨兵标记替换损坏跨度并仅预测损坏标记的变体(如我们的基线目标)。

3.3.4 损坏跨度

我们现在转向通过预测更短的目标来加速训练的目标。我们目前使用的方法对每个输入标记是否损坏做出 i.i.d. 决策。当多个连续标记被损坏时,它们被视为一个“跨度”,并使用单个唯一掩码标记来替换整个跨度。用单个标记替换整个跨度会导致无标签文本数据被处理成更短的序列。由于我们使用的是 i.i.d. 损坏策略,并不总是会有大量的损坏标记连续出现。因此,我们可能通过专门损坏标记跨度而不是以 i.i.d. 方式损坏单个标记来获得额外的加速。损坏跨度之前也被考虑作为 BERT 的预训练目标,在那里它被发现可以提高性能(Joshi et al., 2019)。

为了测试这个想法,我们考虑了一个专门损坏连续、随机间隔的标记跨度的目标。该目标可以通过要损坏的标记比例和损坏跨度的总数来参数化。然后随机选择跨度长度以满足这些指定的参数。例如,如果我们正在处理一个 500 个标记的序列,并且我们已经指定应该损坏 15% 的标记,并且应该有 25 个总跨度,那么损坏标记的总数将是 500×0.15=75500 \times 0.15 = 75,平均跨度长度将是 75/25=375/25 = 3。请注意,给定原始序列长度和损坏率,我们可以等效地通过平均跨度长度或跨度总数来参数化此目标。

我们在表 7 中将跨度损坏目标与 i.i.d. 损坏目标进行了比较。我们在所有情况下都使用 15% 的损坏率,并比较使用 2、3、5 和 10 的平均跨度长度。同样,我们发现这些目标之间的差异有限,尽管平均跨度长度为 10 的版本在某些情况下略微表现不佳。我们还特别发现,使用 3 的平均跨度长度在大多数非翻译基准测试中略微(但显著)优于 i.i.d. 目标。幸运的是,与 i.i.d. 噪声方法相比,跨度损坏目标在训练期间也提供了一些加速,因为跨度损坏平均产生更短的序列。


跨度长度GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
\star 基线 (i.i.d.)83.2819.2480.8871.3626.9839.8227.65
283.5419.3982.0972.2026.7639.9927.63
383.4919.6281.8472.5326.8639.6527.62
583.4019.2482.0572.2326.8839.4027.53
1082.8519.3381.8470.4426.7939.4927.69

表 7: 跨度损坏目标(受 Joshi et al. (2019) 启发)在不同平均跨度长度下的性能。在所有情况下,我们损坏原始文本序列的 15%。


3.3.5 讨论

图 5 显示了我们在探索无监督目标过程中所做选择的流程图。总体而言,我们观察到的性能最显著的差异是去噪目标在预训练方面优于语言建模和去洗牌。我们没有观察到在我们探索的许多去噪目标变体之间存在显著差异。然而,不同的目标(或目标的参数化)可能导致不同的序列长度,从而导致不同的训练速度。这意味着在本文考虑的去噪目标之间进行选择主要应根据它们的计算成本来完成。我们的结果还表明,对我们在此考虑的目标进行额外的探索可能不会为我们考虑的任务和模型带来显著的收益。相反,探索利用无标签数据的完全不同的方式可能是有利的。

3.4 预训练数据集

像无监督目标一样,预训练数据集本身是迁移学习流程的关键组成部分。然而,与目标和基准测试不同,新的预训练数据集通常不被视为独立的重大贡献,并且通常不会与预训练模型和代码一起发布。相反,它们通常是在提出新方法或模型时引入的。因此,对不同预训练数据集的比较相对较少,并且缺乏用于预训练的“标准”数据集。一些最近的著名例外(Baevski et al., 2019; Liu et al., 2019c; Yang et al., 2019)将新的大型(通常是 Common Crawl 来源的)数据集上的预训练与使用较小的现有数据集(通常是 Wikipedia)进行了比较。为了更深入地探讨预训练数据集对性能的影响,在本节中,我们比较了我们的 C4 数据集的变体和其他潜在的预训练数据来源。我们发布了我们考虑的所有 C4 数据集变体,作为 TensorFlow Datasets 的一部分。

3.4.1 无标签数据集

在创建 C4 时,我们开发了各种启发式方法来过滤来自 Common Crawl 的网络提取文本(描述见第 2.2 节)。我们有兴趣衡量这种过滤是否会导致下游任务性能的提高,此外还要将其与其他过滤方法和常见的预训练数据集进行比较。为此,我们比较了我们的基线模型在以下数据集上预训练后的性能:

  • C4 作为基线,我们首先考虑在我们提出的无标签数据集上进行预训练,如第 2.2 节所述。
  • 未过滤的 C4 为了衡量我们在创建 C4 时使用的启发式过滤(去重、删除不良词汇、仅保留句子等)的效果,我们还生成了 C4 的一个替代版本,放弃了这种过滤。请注意,我们仍然使用 langdetect 来提取英语文本。因此,我们的“未过滤”变体仍然包含一些过滤,因为 langdetect 有时会将低概率分配给非自然英语文本。

图 5:我们探索无监督目标的流程图。我们首先在第 3.3.1 节中考虑了几种不同的方法,发现 BERT 风格的去噪目标表现最好。然后,我们在第 3.3.2 节中考虑了简化 BERT 目标的各种方法,以便它产生更短的目标序列。鉴于用哨兵标记替换丢弃的跨度表现良好并导致短目标序列,我们在第 3.3.3 节中实验了不同的损坏率。最后,我们在第 3.3.4 节中评估了一个有意损坏连续标记跨度的目标。


  • RealNews-like 最近的工作使用了从新闻网站提取的文本数据(Zellers et al., 2019; Baevski et al., 2019)。为了与这种方法进行比较,我们通过额外过滤 C4 以仅包含“RealNews”数据集(Zellers et al., 2019)中使用的域之一的内容,生成了另一个无标签数据集。请注意,为了便于比较,我们保留了 C4 中使用的启发式过滤方法;唯一的区别是我们表面上省略了任何非新闻内容。
  • WebText-like 同样,WebText 数据集(Radford et al., 2019)仅使用提交给内容聚合网站 Reddit 并获得至少 3 分“分数”的网页内容。提交给 Reddit 的网页的分数是根据认可(点赞)或反对(点踩)该网页的用户比例计算的。使用 Reddit 分数作为质量信号背后的想法是,该网站的用户只会点赞高质量的文本内容。为了生成可比较的数据集,我们首先尝试从 C4 中删除所有不源自 OpenWebText 工作准备的列表中出现的 URL 的内容。然而,这导致了相对较少的内容——只有约 2 GB——因为大多数页面从未出现在 Reddit 上。回想一下,C4 是基于单个月的 Common Crawl 数据创建的。为了避免使用过小的数据集,我们因此从 2018 年 8 月到 2019 年 7 月下载了 12 个月的 Common Crawl 数据,应用了我们的 C4 启发式过滤,然后应用了 Reddit 过滤器。这产生了一个 17 GB 的 WebText-like 数据集,其大小与原始 40GB WebText 数据集(Radford et al., 2019)相当。
  • Wikipedia Wikipedia 网站由数百万篇协作编写的百科全书文章组成。该网站上的内容受严格的质量准则约束,因此已被用作干净和自然文本的可靠来源。我们使用来自 TensorFlow Datasets 的英语 Wikipedia 文本数据,它省略了文章中的任何标记或参考部分。
  • Wikipedia + Toronto Books Corpus 使用来自 Wikipedia 的预训练数据的一个缺点是它仅代表自然文本的一种可能领域(百科全书文章)。为了缓解这种情况,BERT (Devlin et al., 2018) 将来自 Wikipedia 的数据与 Toronto Books Corpus (TBC) (Zhu et al., 2015) 结合起来。TBC 包含从电子书中提取的文本,这代表了自然语言的另一个领域。BERT 的普及导致 Wikipedia + TBC 组合被用于许多后续工作中。

在每个数据集上预训练后取得的结果显示在表 8 中。第一个明显的结论是,从 C4 中删除启发式过滤会统一降低性能,并使未过滤的变体在每个任务中表现最差。除此之外,我们发现,在某些情况下,具有更受限领域的数据集优于多样化的 C4 数据集。例如,使用 Wikipedia + TBC 语料库


数据集大小GLUECNNDMSQuADSGLUEEnDeEnFrEnRo
\star C4745GB83.2819.2480.8871.3626.9839.8227.65
C4, 未过滤6.1TB81.4619.1478.7868.0426.5539.3427.21
RealNews-like35GB83.8319.2380.3972.3826.7539.9027.48
WebText-like17GB84.0319.3181.4271.4026.8039.7427.59
Wikipedia16GB81.8519.3181.2968.0126.9439.6927.67
Wikipedia + TBC20GB83.6519.2882.0873.2426.7739.6327.57

表 8: 在不同数据集上预训练后的性能。前四个变体基于我们新的 C4 数据集。


产生了 73.24 的 SuperGLUE 分数,击败了我们的基线分数(使用 C4)71.36。这几乎完全归功于 MultiRC 的精确匹配分数从 25.78(基线,C4)提升到 50.93(Wikipedia + TBC)(见表 16)。MultiRC 是一个阅读理解数据集,其最大的数据来源来自小说书籍,这正是 TBC 所涵盖的领域。同样,使用 RealNews-like 数据集进行预训练使 ReCoRD 的精确匹配分数从 68.16 提高到 73.72,ReCoRD 是一个衡量新闻文章阅读理解的数据集。作为最后一个例子,使用来自 Wikipedia 的数据在 SQuAD 上产生了显著(但不那么剧烈)的收益,SQuAD 是一个带有来自 Wikipedia 的段落的问答数据集。在之前的工作中也观察到了类似的观察结果,例如 Beltagy et al. (2019) 发现,在来自研究论文的文本上预训练 BERT 提高了其在科学任务上的性能。这些发现背后的主要教训是,在领域内无标签数据上进行预训练可以提高下游任务的性能。这是不出所料的,但如果我们旨在预训练一个能够快速适应来自任意领域语言任务的模型,这也是令人不满意的。Liu et al. (2019c) 也观察到,在更多样化的数据集上进行预训练在下游任务上产生了改进。这一观察结果也激发了自然语言处理领域适应的平行研究路线;有关该领域的调查,请参阅例如 Ruder (2019); Li (2012)。

仅在单个领域上进行预训练的一个缺点是,由此产生的数据集通常要小得多。同样,虽然 WebText-like 变体在我们的基线设置中表现得与 C4 数据集一样好或更好,但基于 Reddit 的过滤产生的数据集比 C4 小约 40 倍,尽管它基于来自 Common Crawl 的 12 倍多的数据。然而,请注意,在我们的基线设置中,我们仅在 23534B2^{35} \approx 34B 个标记上进行预训练,这仅比我们考虑的最小预训练数据集大约 8 倍。我们在下一节中调查在什么点使用较小的预训练数据集会构成问题。

3.4.2 预训练数据集大小

我们用来创建 C4 的流程旨在能够创建极其庞大的预训练数据集。访问如此多的数据使我们能够在不重复示例的情况下预训练我们的模型。目前尚不清楚在预训练期间重复示例对下游性能是有帮助还是有害,因为我们的预训练目标本身是随机的,可以帮助防止模型多次看到完全相同的数据。

硬核测试

正确率:0 / 5
1

根据论文,T5 模型的核心设计理念是什么?

2

T5 模型在预训练阶段使用的“庞大清洗爬取语料库”(C4)的主要来源是什么?

3

T5 模型在架构上主要基于哪种深度学习模型?

4

在 C4 数据集的清洗过程中,作者采取了哪种措施来处理重复文本?

5

T5 模型在处理位置信息时,使用了哪种改进方案?