T5模型论文精读笔记 | 青训营

453 阅读37分钟

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

image.png

论文的摘要以及 1-2 部分介绍了 Motivation、数据集的预处理操作、待评估的下游任务以及这些任务为了适应 Text-to-text 框架所需的相关处理。

第 3 部分是最长的实验部分,3.1 介绍了 Text-to-text 框架下使用的基线模型;3.2 介绍了现有的不同模型架构,并对无监督预训练的降噪目标和传统语言建模目标进行实验比较;3.3 对无监督降噪目标进行了细致研究,如图 5 所示,先对前缀语言建模、BERT-style 和 Deshuffling 三种方法进行选择(表 3 提供了各种方法的输入与输出),接着对 BERT-style 的降噪目标进行修改,对 MASS-style、Replace corrupted spans 和 Drop corrupted spans 进行实验,最后对 corruption rate 和 corruption span length 依次实验;3.4 比较了使用不同方法过滤后的 C4 数据集以及常用的预训练数据集,并对预训练数据集(是否重复)进行试验;3.5 对训练方式进行了探究,Baseline 是在无监督降噪任务上对模型的所有参数进行预训练,然后对在每个下游任务上分别对其进行了微调,并使用模型的不同参数设置(检查点)来评估性能,本节进一步的对微调方法、多任务学习方法以及两者的结合进行了实验探究;3.6 对增加计算成本获取性能提升的各种方式进行了探究;3.7 对第 3 部分进行了总结与细节分析。

第 4 部分是基于本文的实验研究以及Text-to-text 框架,对系统实验进行了总结,并对未来的研究进行展望。

image.png

0.Abstract

迁移学习是一种在自然语言处理中强大的技术,模型首先要针对数据丰富的任务进行预训练,然后再针对下游任务进行微调。本文通过引入统一的框架来探索NLP迁移学习技术的前景:将问题都转换为 text-to-text 格式,并在数十种语言理解任务研究比较了预训练目标,架构,未标记的数据集,迁移方法和其他因素。结合实验所得以及 C4 数据集,在许多基准上获得了最新的结果,这些基准涵盖了摘要,问题回答,文本分类等等。

1.Introduction

训练机器学习模型以执行自然语言处理任务通常需要模型能够以适合下游学习的方式处理文本。可以将其大致视为发展通用知识,使模型可以“理解”文本。这些知识的范围从低级(例如单词的拼写或含义)到高级(例如大多数背包都无法容纳大号这样大的乐器)。

在这个迅速发展的领域中,快速的进步和多样的技术可能使不同算法的比较,理清新贡献的效果以及理解现有的迁移学习方法变得困难。为了获得更严谨的理解,我们提出了一种统一的迁移学习方法,使我们能够系统地研究不同的方法,并推动领域发展。

T5 的基本思想是将每个 NLP 问题都视为“text-to-text”问题,即将文本作为输入并生成新的文本作为输出,这允许将相同的模型、目标、训练步骤和解码过程,直接应用于每个任务。

本文的重点不在于提出新方法,而是提供该领域的全面见解。主要贡献在于对现有技术的调查,探索和比较,以及简单且强大的 text-to-text 框架。

2.Setup

介绍 Transformer 模型架构和待评估的下游任务,介绍了将每个问题视为 text-to-text 任务的方法,并描述了 “Colossal Clean Crawled Corpus” C4 数据集,模型和框架称为 “Text-to-Text Transfer Transformer” T5。

2.1 Model

本文研究的所有模型均基于 Transformer 架构。需要注意的是,Transformer 使用正余弦函数的位置编码,BERT 使用的是学习到的位置嵌入,而本文使用的是相对位置嵌入。

相对位置嵌入不是对每个位置使用固定的嵌入,而是根据 self-attention 机制中的“key”和“query”之间的偏移量生成不同的学习嵌入。本文使用位置嵌入的简化形式——每个“嵌入”只是一个标量,被添加到用于计算注意力权重的相应 logit 中。为了提高效率还在模型的所有层之间共享位置嵌入参数,不过每个注意力头使用的是不同“套”位置嵌入。通常学习固定长度的嵌入,每个嵌入对应于一系列可能的key-query偏移量。在这项工作中,我们对所有模型使用 32 个嵌入,其数值范围的大小以对数方式增加,最大偏移量为128,超过此偏移量,所有相对位置使用同一嵌入。需要注意的是,某一给定层对超过 128 的相对位置不敏感,但是后续层可以通过组合来自先前层的局部信息来建立对更大偏移的敏感性。

2.2 The Colossal Clean Crawled Corpus

NLP 迁移学习中,之前的许多工作都是利用大型未标记数据集进行无监督学习。本文试图衡量这类未标记数据集的质量,特征和大小的影响。通过 Common Crawl 抓取网页文本数据,并使用下列启发式方法进行过滤:

  • 只保留结尾是正常符号的句子,如句号、感叹号、问号和引号。

  • 删除所有内容少于5句且句子长度小于3个词的页面数据。

  • 删除所有包含黄暴词的页面数据。

  • 删除包含“.JavaScript”的词(针对网页数据)。

  • 删除包含占位符“lorem ipsum”(排版测试中经常出现)的页面数据。

  • 删除编程语言中经常出现的大括号对“{}”所在的页面数据。

  • 删除连续重复3次以上的句子,只保留一句。

  • 利用语种检测工具langdetect,只保留语种检测为英语,且置信度超过0.99的数据(训练针对英语任务的模型)。

2.3 Downstream tasks

本文的目的是评估通用语言学习能力,测试如下下游任务的性能:

  • 文本分类:GLUE & SuperGLUE,是测试通用语言理解能力的文本分类任务的集合,包括句子可接受性判断、情绪分析、释义/句子相似度、自然语言推断、指代消解、完成句子、词义消歧和问题回答。

  • 机器翻译:WMT English to German, French, and Romanian translation

  • 文本摘要:CNN/Daily Mail abstractive summarization

  • 智能问答:SQuAD question answering

本文将 GLUE (SuperGLUE也类似) 中所有任务的数据集在微调时连接起来,将所有任务视为一个任务,并且在 SuperGLUE 中加入了 Definite Pronoun Resolution (DPR) 数据集。本模型使用 SQuAD 数据集时是将问题和上下文喂入,并逐个令牌生成答案。机器翻译任务中也仅对英语数据进行预训练,这意味着模型需要学习生成目标语言的文本。

2.4 Input and output format

T5最核心的理念是:使用前缀任务声明及文本答案生成,统一所有自然语言处理任务的输入和输出。在此之前的几乎所有预训练语言模型,在下游任务微调过程中都需要添加非线性层,将模型的输出转化为任务指定的输出格式。T5不需要对模型做任何改动,只需要提供下游任务的微调数据;不需要添加任何非线性层,唯一需要做的就是在输入数据前加上任务声明前缀,下图所示为T5的输入格式和输出格式。绿色部分表示翻译任务,红色和黄色部分分别表示CoLA任务和STS-B任务,蓝色部分表示摘要生成任务,左侧的框表示T5的输入样例,右侧的框则是对应的输出结果。

image.png

For example:

  • 中文翻译成英文:使用T55之前的数据输入是“我喜欢跑步”,输出是“I like running”。使用T5之后数据输入变成了“把中文翻译成英文:我喜欢跑步”,输出是“I like running”;

  • 文本分类:假如我要识别用户的搜索是不是对汽车感兴趣,使用T5之前的数据输入格式是text,   输出是label,其中text是用户搜索文本”最近汽车降价了,打算买一辆奥迪A4”,label则代表标签1或者0,1代表感兴趣,0代表不感兴趣。使用T5之后把文本分类任务转化成了输入是“识别下面一句话是不是对汽车感兴趣:最近汽车降价了,打算买一辆奥迪A4”,输出是“感兴趣”;

+阅读理解:使用T5之前的数据输入是“今天天气很好,本来想出去跑个步,不过朋友邀请我排位,后来就去打农药了。我后面去干什么了?”,输出是“打农药”。使用T5之后数据输入变成了“阅读理解:今天天气很好,本来想出去跑个步,不过朋友邀请我排位,后来就去打农药了。根据以上内容回答问题:我后面去干什么了?”,输出是“打农药”。

通过上面三个例子,我们发现了一个共同的现象,不管是文本分类任务、翻译任务还是阅读理解任务,T5通过添加一定的补充信息(上面三个例子中的标红的内容)把各种NLP任务都转化成了一个Text2Text任务。这也是T5最重要的作用:给NLP预训练模型领域提供了一个大一统的通用框架,把各式各样的任务都转化成Text2Text格式的任务。

一些任务为了适应 Text-to-text 框架,需要进行调整:

  • STS-B。这是预测 1-5 之间的相似性得分的一项回归任务。作者发现大部分得分是以 0.2 为增量的,于是将分数四舍五入到最接近的 0.2 增量(2.57 四舍五入为 2.6)并将其转为字符串。测试时,如果模型输出字符串对应于 1-5 之间的数字,则转为浮点数进行判断,否则视为错误。这有效地将 STS-B 的回归问题转换为 21 类分类问题。

  • Winograd任务(WNLI、WSC 和 DPR)转换为一种更适合Text-to-text框架的格式。此类任务的示例是一段包含一个歧义代词的文本,歧义代词可以指代段落中不止一个名词短语。例如:“The city councilmen refused the demonstrators a permit because they feared violence.” 的 “they” 指代的是“city councilmen”还是“demonstrators”。模型将输入中的歧义代词用*包裹以突出:“The city councilmen refused the demonstrators a permit because they feared violence.” 并且要求模型输出答案 “city councilmen” 。WSC 数据集的样本由文章、歧义代词、候选名词及对应的 True/False 标签组成,这就无法知晓标签为 False 的样本的歧义代词所指代的名词是什么,因此只在标签为 True 的样本上进行训练(大约删除了 WSC 训练集的一半)。DPR 数据集则很适用上述格式。

  • WNLI 的训练集和验证集与 WSC 的训练集有很大重叠,为了防止验证集出现在训练集中,不训练 WNLI,并且由于其训练集和验证集之间是对抗的(dev=train+扰动且标签相反),所以也不汇报其验证集的结果。将示例从WNLI转换为上述“指称名词预测”变体的过程要复杂得多,参见附录B。

3.Experiments

NLP  迁移学习的最新进展来自各种发展,例如新的预训练目标、模型架构、未标记的数据集等。在本节中,我们对这些技术进行了实证调查,希望能够梳理出它们的贡献和意义。

我们通过采用合理的baseline(在第3.1节中描述)并一次更改设置的一个方面来系统地研究这些贡献;我们对模型架构(第3.2节),无监督的目标(第3.3节)、预训练数据集(第3.4节)、转移方法(第3.5节),以及缩放(第3.6节)进行empirical comparison,在本节的高潮部分,我们将研究中的见解与scale相结合,以在我们考虑的许多任务中获得最先进state-of-the-art的结果(第3.7节)。

3.1 Baseline

使用一个简单的去噪目标来预训练一个标准Transformer,分别对我们的每个下游任务进行微调。我们在以下小节中描述了这个实验设置的细节。

3.1.1 Model

对于我们的模型,我们使用 Vaswani 等人提出的标准 encoder-decoder Transformer。尽管许多现代的NLP迁移学习方法都使用仅包含 encoder/decoder stack 的 Transformer 架构,我们发现使用标准的 结构在生成和分类任务上均取得了良好的效果。我们将在3.2 节中探讨不同模型架构的性能。

我们设计基准模型使 encoder-decoder 的大小和配置都类似于BERTBASEBERT_{BASE}。具体而言,编码器和解码器均由 12 个块组成(每个块包括 self-attention, optional encoder-decoder 注意力和前馈网络)。每个块中的前馈网络包括一个输出维数为dff=3072的全连接层,ReLU非线性层和另一个全连接层。所有注意机制的“key”和“value”矩阵的内部维数为d_{ff}=3072的全连接层,ReLU非线性层和另一个全连接层。所有注意机制的“key”和“value”矩阵的内部维数为d_{kv}=6412个头。所有其他子层和嵌入的维数为,12个头。所有其他子层和嵌入的维数为d_{model}=768,模型约2.2亿参数。这大约是,模型约2.2亿参数。这大约是BERT_{BASE}$参数数量的两倍,因为我们的基准模型包含两层 stack 而不是一层。模型各处使用 dropout = 0.1。

3.1.2 Training

所有的任务都被表述为text-to-text,始终使用标准的最大似然进行训练,即使用teacher forcing和交叉熵损失,优化器为AdaFactor。在测试时,使用贪婪解码(即在每个时间步选择最高概率的Logit)。

在进行微调之前,我们在C4上对每个模型进行了219=5242882^{19}=524288步的预训练,最大序列长度512,batch_size=128,并且pack每个batch使其包含大约512128=216512*128=2^{16}个token。因此共计训练了2352^{35}即大约34B的token,这比BERT的127B和RoBERTa的2.2T要少得多。请注意,2352^{35}仅覆盖整个C4数据集的一小部分,因此我们在预训练期间不会有重复数据。

预训练时使用inverse square root(平方根倒数算法)调整学习率:1max(n,k)\frac {1}{\sqrt max(n,k)},n为当前训练迭代数,k为warm-up的步骤数(所有实验都设为10410^4),即前10410^4次实验设置了0.01的恒定学习率,之后以指数形式衰减学习率。虽然使用三角学习率riangular learning rate结果更好,但需要提前知道训练步骤的总数。由于在某些实验中我们将改变训练步骤的数量,因此我们选择了更通用的inverse square root。

模型在所有任务上微调了2182^{18}步。选择此值是为了在高资源任务与低资源任务之间进行权衡,前者需要更多的微调步骤,后者很快会过拟合。在微调期间,每批2162^{16}个token不变并使用0.001的恒定学习率,每5000个步骤保存一个检查点,并在模型检查点上报告验证集最佳结果。对于在多个任务上进行了微调的模型,我们分别为每个任务选择最佳检查点。对于第3.7节种的实验以外的所有实验,我们在验证集中报告结果,以避免在测试集中执行模型选择。

3.1.3 vocabulary

我们使用SentencePiece将文本编码为WordPiece token。对于所有实验,我们使用32000个单词的词汇表。由于我们最终对英语到德语、法语和罗马尼亚语翻译的模型进行了微调,因此我们还要求我们的词汇表涵盖这些非英语语言。

为了解决这个问题,我们将C4中使用的Common Crawl scrape页面分类为德语、法语和罗马尼亚语。然后,我们用10部分英语C4数据和各1部分分类为德语、法语或罗马尼亚语的数据训练我们的SentencePiece模型。整个词汇表在我们模型的输入和输出中共享。

我们的词汇表使我们的模型只能处理预定的、固定的语言集。

3.1.4 Unsupervised Objective

T5的预训练包含无监督和有监督两部分。

无监督部分使用的使Google构建的近800G的语料(论文称之为C4),而训练目标则跟BERT类似,只不过改成了Seq2Seq版本,我们可以将它看成一个高级版的完形填空问题:

输入:明月几时有,[M0]问青天,不知[M1],今夕是何年。我欲[M2]归去,惟恐琼楼玉宇,高出[M3];起舞[M4]清影,何似在人间。

输出:[M0]把酒[M1]天上宫阙[M2]乘风[M3]不胜寒[M4]弄

而有监督部分,则是收集了常见的NLP监督任务数据,也统一转化为Seq2Seq任务来训练。比如情感分类可以这样转化:

输入:识别该句子的情感倾向:这趟北京之旅我觉得很不错。

输出:正面

主题分类可以这样转化:

输入:这是一则什么新闻:八个月了,终于又能在赛场上看到女排姑娘们了。

输出:体育

阅读理解可以这样转化:

输入:阅读理解:特朗普与拜登共同竞选下一任美国总统。根据上述信息回答问题:特朗普使哪国人?

输出:美国

【注】什么是teacher forcing?

若我们能够在每一步的预测时,让老师来指导以下,即提示一下上一个词的正确答案,decoder就可以快速步入正轨,训练过程也可以更快收敛,因此把这种方法称为teacher forcing。所以这种操作的目的是为了使得训练过程更加容易。

缺点:

  • 预测(inference stage)时没有老师给你做标记,纯靠自己很可能挂掉。

  • 对于NMT任务来说,不可能保证某种语言种的每个词在另一种语言中都有对应的词语。

  • 强制词语对应消除了语义相似的其他翻译结果,扼杀了翻译的多样性。

  • overcorrect问题

for example:

①待生成句的reference为:"We should comply with the rule."

②模型在解码阶段中途预测出来:"We should abide"

③然而teacher-forcing技术把第三个ground-truth"comply"作为第四步的输入。那么模型根据以往学习的pattern,有可能在第四步预测到的是"comply with"

④模型最终的生成变成了"We should abide with"

⑤事实上,"abide with"用法是不正确的,但是由于ground-truth"comply"的干扰,模型处于矫枉过正的状态,生成了不通顺的语句。

利用未标记的数据来预训练我们的模型需要一个objective,objective不需要标签,但是可以使模型得到在下游任务中有用的可概括的知识。

将预训练和微调所有模型参数的迁移学习范式应用于NLP问题的初步工作:使用因果语言建模目标进行预训练。

【注】什么是因果语言模型?

因果语言模型(causal language model),是跟掩码语言模型相对的语言模型,跟transformer机制中的decoder很相似,因果语言模型采用了对角掩蔽矩阵,使得每个token只能看到在它之前的token信息,而看不到在它之后的token,模型的训练目标是根据在这之前的token来预测下一个位置的token。

然而最近已经表明"denoising" objective(也称为“掩码语言建模”)可以产生更好的性能。在"denoising"objective中,模型被训练以预测输入中丢失或损坏的token。受BERT的“masked language model"和"dropout"正则化技术启发,设计目标如下:随机采样然后丢弃输入序列中15%的token。所有丢弃token组成的连续片段都由单个标记token代替(图中的for inviting只对应一个标记token)。每个标记token都分配有该序列唯一的token ID。标记token是添加到词汇表中的特殊token,不对应任何单词。

目标对应于所有丢弃的token span,由输入序列中使用的相同标记token加上最终标记token分隔,以标记目标序列的结束(预测输入中的 <X><Y> 对应的 SentencePiece,目标格式为 <X> SentencePiece of X <Y> SentencePiece of Y <Z><Z>为最终的标记令牌)。

image.png

3.1.5 Baseline Performance

在本节中,我们使用上述基线任务来展示结果,以了解我们的下游任务的预期性能。

理想情况下,我们会多次重复研究中的每个实验,以获得结果的置信区间。

但是由于非常昂贵,所以选择更便宜的替代方案,我们从头开始训练我们的基线模型10 次(即使用不同的随机初始化和数据集洗牌并假设这些基本模型运行的方差也适用于每个实验变体。

image.png

3.2 Architectures

目前基于Transformer的模型架构主要有Encoder-Decoder结构(传统的Transformer结构)、Decoder结构(GPT的结构)和Prefix LM结构(UniLM的结构)。

image.png

​第一种是编码器解码器结构Encoder-Decoder。这种结构是Seq2seq常用的模型,主要分成编码器和解码器。比如咱们输入一段话sequence,编码器中输入的每个字符可以看到全体,也就是可以看到包括自己的全部字符。而解码器不同,解码器的输出只能看到当前字符以及之前的字符。比如输出的首字符y1只能看到自己,而第二个字符y2可以同时看到自己和之前的字符y1;

第二种是语言模型Language model。LM可以理解成前面Encoder-Dedcoder中的Decoder部分,可以理解成是单向的,每次只能看到当前以及之前的部分。就比如我们现在有一句话“我想吃苹果,还想跑步。”,语言模型在进行推理的时候是根据已知的字符来推断后面的字符,比如模型知道了“我想吃苹”,然后根据已知的去推断后面的字符“果”,然后不断的结合前面的内容去推断后续内容。这种模型的典型代表就是单向语言模型GPT模型;

第三种是基于前缀的语言模型Prefix  LM。这种模型感觉更像是上面两种模型的融合体。对于Prefix  LM来说,前面一部分文本可以理解为前缀像编码器一样各个字符可以看到前缀部分的所有内容,而后面剩下的部分则像Decoder那样是单向的,只能看到自己以及之前的内容。Prefix  LM的典型的代表是微软的UNILM,它提供了一种优雅的方式可以让BERT模型做Seq2Seq任务。

上面三种基于Transformer的架构最本质的区别是对注意力机制的Mask掩码操作。下面咱们通过例子进行说明:

image.png

​从上图中我们输入“我想吃苹果”这句话,看看三种不同的注意力机制掩码操作是如何运转的:第一种双向可见的机制比较简单,每个字符不管顺序都可以看到全体;第二种单向可见的机制是考虑顺序的,每个字符只能看到当前以及之前的部分,比如对于字符“吃”来说只能看到“吃”以及之前的字符“我”和“想”;最麻烦的是第三种前缀双向可见的机制,这种机制是部分考虑顺序的。对于前缀“我想吃”来说每个字符是双向可见的,但是对于后面的字符“苹果”来说是单向的。比如前缀中(上图中最右边部分黑色方框内属于前缀范围)的字符“想”可以同时看到“我想吃”,但是前缀之后的字符“苹”却看不到之后的“果”。

通过实验发现Encoder-decoder架构的模型效果最好,所以T5模型本质上来说是一个基于Transformer的Encoder-decoder模型。下面是实验对比数据:

image.png

3.3 Unsupervised objectives

本小节探索无监督目标过程中所做的选择,这是其流程图。第一步,对高层次方法(自监督的预训练方法)进行对比,选出性能最好的一个:Bert-style;第二步,对文本一部分进行破坏时的策略,replace span(小段替换)法效果最好;第三步,破坏比例,最后选用破坏15%;第四步,破坏长度选定,Replace Span 需要决定对大概多长的小段进行破坏,于是对不同长度进行探索,最后选择3 的破坏时小段长度。

image.png

本文对比的无监督目标函数有:prefix language modeling,masked language modeling(MLM)和deshuffling objective这三种。

第一个方面,高层次方法(自监督的预训练方法)对比,总共三种方式:

  • 语言模型式(prefix language modeling),就是GPT-2那种方式,从左到右预测;

  • BERT-style式,就像BERT那样将一部分破坏掉,然后还原出来;

  • Deshuffling(顺序还原式),就是将文本打乱,然后还原出来。

image.png

image.png

其中发现BERT-style最好,进入下一轮。

第二方面,对文本一部分进行破坏时的策略,也分三种方法。

  • Mask法,如现在大多模型的做法,将被破坏token换成特殊符如[M];

  • replace span(小段替换)法,可以把它当作是把上面Mask法中相邻[M]都合成了一个特殊符,每一小段替换一个特殊符,提高计算效率;

  • Drop法,没有替换操作,直接随机丢弃一些字符。

image.png

image.png

此轮获胜的是replace span法,类似做法如SpanBERT也证明了有效性。

进入下一轮。

第三方面,到底该对文本百分之多少进行破坏呢,挑了4个值,10%,15%,25%,50%,最后发现BERT的15%就很ok了。

image.png

接着进入第四方面,因为replace span需要决定对大概多长的小段进行破坏,于是对不同长度进行探索,2,3,5,10这四个值,对比性能结果,最终模型选用的长度为3,因为长度短,训练速度越快。

image.png

终于获得了完整的 T5 模型,还有它的训练方法:

  • Transformer Encoder-Decoder模型

  • BERT-style式的破坏方法

  • Replace Span的破坏策略

  • 15%的破坏比

  • 3的破坏时小段长度

3.4 Pre-training Data set

3.4.1 Unlabeled Data Sets

在以下数据集上进行预训练后比较基线模型的性能:

  • C4:作为基准,首先在我们发布的未标记数据集进行预训练

  • Unfiltered C4:为了衡量我们在创建C4中使用的启发式过滤的效果,我们还生成了C4的替代版本,该版本放弃了过滤。我们仍然使用langdetect提取英文文本。结果我们的”未过滤“变体仍包含一些过滤,因为langdetect有时会给不自然的英语文本分配低概率。

  • RealNews-like:使用了从新闻网站提取的文本数据。为了进行比较,我们额外过滤C4使其仅包括一个“RealNews”数据集对应的域的内容来生成另一个未标记的数据集。请注意,为便于比较,我们保留了C4中使用的启发式过滤方法。唯一的区别是,表面上我们忽略了任何非新闻内容。

  • Web Text-like:WebText数据集仅使用提交到内容聚合网站 Reddit 且收到的“score”至少为3的网页内容。提交给Reddit的网页得分基于认可或反对网页的用户比例。使用Reddit分数作为质量信号的背后想法是,该网站的用户只会上传高质量的文本内容。为了生成可比较的数据集,我们首先尝试从C4中删除所有不是 OpenWebText[13] 列表中出现的URL。但是,由于大多数页面从未出现在Reddit上,因此内容相对较少,仅约 2 GB。为避免使用过小的数据集,因此我们从2018年8月至2019年7月从 Common Crawl 下载了12个月的数据,对 C4 和 Reddit 应用了启发式过滤,产生了一个17 GB的类似 WebText 的数据集,其大小与原始40GB的 WebText 数据集相类似。

  • Wikipedia:Wikipedia网站包含数以百万计的协作撰写的百科全书文章。 该网站上的内容受严格的质量准则约束,因此已被用作可靠且纯净的自然文本来源。 我们使用 TensorFlow Datasets的英文 Wikipedia 文本数据,其中省略了文章中的任何标记或参考部分。

  • Wikipedia + Toronto Books Corpus:使用来自 Wikipedia 的预训练数据的缺点是,它仅表示自然文本的一个可能域(百科全书文章)。 为了缓解这种情况,BERT将来自维基百科的数据与多伦多图书公司进行了组合。 TBC包含从电子书中提取的文本,它代表自然语言的不同领域。

从C4里面分出各种类型的数据集,单独训练 T5 模型,之后看在下游任务的表现,发现一些情况领域内的预训练数据可以增强下游任务。而 C4 完整数据集因为数据太多太杂,可能反而不如这种领域内较少数据集。

image.png

表 8 显示了每个数据集预训练后获得的结果。明显的收获是,C4中删除启发式过滤会降低性能,并使未过滤的变体在每个任务中表现最差。

3.4.2 Pre-training Data set Size

本文创建C4的方法旨在能够创建非常大的预训练数据集。对大量数据的访问使我们能够对模型进行预训练,而无需重复样本。

目前尚不清楚在预训练期间重复样本是会对下游性能有所帮助还是有害,因为我们的预训练目标本身就是随机的,并且可以帮助防止模型多次看到相同的数据。

从 C4 中抽出不同量数据做实验,发现数据少时,模型会记住数据所以之后表现会比较差。

image.png

最终的下游性能如表9所示,随着数据集大小缩小而下降。我们怀疑这可能是由于该模型开始记住预训练数据集。为了测量这是否成立,我们在图6中绘制了每种数据集大小的训练损失。的确,随着预训练数据集的大小缩小,该模型获得的训练损失明显较小,这表明可能存在记忆。

image.png

3.5 Training Strategy

针对 MTDNN 给 T5 做了一系列类似训练,在一堆监督和非监督数据上进行预训练。结果发现,只要混合训练比例调得OK,和前面说的非监督预训练性能差不多。

3.5.1 Fine-tuning Methods

微调模型的所有参数可能会导致结果欠佳,我们专注于两种替代的微调方法,这些方法仅更新编码器-解码器模型的参数的子集。

  • adapter layers:在微调时保持大多数原始模型固定不变。在Transformer每个block中的前馈神经网络后添加dense-ReLU-dense blocks。新的前馈网络使得输出可以与输入维度匹配。(这样就可以将它们插入网络,而无需更改结构或参数)进行微调时,仅更新适配器层和层归一化参数。这种方法的主要超参数是前馈网络的内部维数 d ,它改变了添加到模型中的新参数的数量。我们用 d 的各种值进行实验。

  • gradual unfreezing:逐步解冻最初应用于包含单个块层(a single stack of layers)的语言模型体系结构。这种方式是更新模型参数的范围随着随着时间扩大。初始微调时,只有最后一层的参数被更新,训练一段时间后,倒数第2层及其之后层的参数被更新,直至整个网络的参数都被更新。

应用到本文的框架,这种方式是有所改动的。

image.png

 表10 表明,adapter layers 可能是一种在较少参数上进行微调的有前途的技术,只要将维度适当地缩放到任务大小即可。

 ### 3.5.2 Multi-task learning

 所谓多任务学习是同时在多个任务上训练一个模型,其目的是训练一个能同时处理多个任务的模型,即该模型中的绝大数参数在多个任务之间是共享的。本文对此目标稍稍宽松,转而研究对多个任务同时进行训练的方法,以便最终生成对每个单独任务都表现良好的独立参数。所以,本文这里是简化版的多任务学习,并不热衷于多任务之间的参数共享,而是更关注于用同一个时间训练多个任务。例如,我们或许可以在多个任务上训练一个模型,但是应用到具体任务时候,可以针对不同的任务选用不同的checkpoint。这就放宽了多任务学习框架,与当下我们所考虑的 预训练-微调 的方法 相比, 它的基础才显得牢固。还注意到,在本文统一的text-to-text框架中,“多任务学习”简单地对应于将数据集混合在一起。相比之下,此前NLP中的多任务学习大多数都是为每个任务添加特定的分类网络或使用不同的损失函数。

那么多任务中,一个非常重要的问题来了,每个任务需要用多少数据进行训练?本文探索了三种方案:Examples-proportional mixing、Temperature-scaled mixing 和 Equal mixing。

实验发现,多任务训练一般是无法于预训练-微调方法相媲美的。

image.png

3.5.3 Combining multi-task learning with fine-tuning

进一步研究了如何缩小多任务训练和 预训练-微调 的差距。研究了以下三种方案:

(1)examples-proportional mixture 数据的预训练,再下游任务微调。这有助于我们衡量,在训练前将监督任务与非监督目标放在一起,是否会让模型更早地接触到下游任务。

(2)相同 examples-proportional mixture 数据上预训练模型,但是在预训练混合的下游任务中丢弃一个。

(3)对于全部的有监督任务的数据以examples-proportional mixture 进行预训练。

上述几种方案的对比结果见于 Table 12:

image.png

从中可以看出,多任务预训练+微调 的方式可以取得于baseline近似的结果。这表明多任务学习之后,再进行微调确实有助于缓解不同混合比例之间的一些权衡。另外,抛弃一个任务(“leave-one-out”)的训练结果仅仅轻微下降,说明模型在多个任务上训练确实可以应用于新的任务上。多任务预训练可能不会导致剧烈的任务干扰。

3.6 Scaling

接着又做了当放大模型某方面规模的相关实验,分别是增大模型,增大数据,还有在一定资源限制下的集成。

结论是,当这些因素放大时对性能都有提高,但其中大模型是最必要的。

这里说的规模,涉及 模型的规模、训练的时长规模 和 batch size。

这里的对比的一个前提是,假如有4倍的算力,怎么来分配?可以有以下方案:

(1)训练得久些,原来的4倍

(2)每个batch size 扩大为原来4倍

(3)模型扩大2倍,训练时长扩大2倍

(4)模型扩大4倍

具体结果如 Table 13 所示:

image.png

4.Reflection

(1)Takeaways

  • 文本到文本 论文的文本到文本框架提供了一种简单的方法,可以使用相同的损失函数和解码过程在各种文本任务上训练单个模型。论文展示了如何将这种方法成功地应用于生成性任务,如抽象摘要、分类任务,如自然语言推理,甚至回归任务,如STS-B。尽管其简单,论文发现,text-to-text框架的性能与特定于任务的体系结构相当,并最终在与规模相结合时产生了最先进的结果。

  • 体系结构 虽然一些关于NLP迁移学习的工作考虑了Transformer的架构变体,但论文发现原始的编码器-解码器形式在文本到文本框架中工作得最好。虽然编码器-解码器模型使用的参数是“仅编码器”(如BERT)或“仅解码器”(语言模型)架构的两倍,但其计算成本相似。论文还表明,在编码器和解码器中共享参数不会导致性能大幅下降,同时将总参数计数减半。

  • 无监督目标 总的来说,论文发现大多数“去噪”目标(训练模型重建随机损坏的文本)在文本到文本设置中的表现类似。因此,论文建议使用产生短目标序列的目标,以便无监督的预训练在计算上更有效。

  • 数据集 论文介绍了“Colossal Clean Crawled Corpus”(C4),它包含来自Common Crawl转储的启发式清理文本。将C4与使用额外过滤的数据集进行比较时,论文发现对域内未标记数据进行训练可以提高一些下游任务的性能。然而,约束到单个域通常会导致较小的数据集。分别表明,当未标记的数据集足够小,以至于在预训练过程中重复多次时,性能会下降。这促使人们将C4这样的大型多样数据集用于通用语言理解任务。

  • 训练策略 我们发现,在微调过程中更新所有预训练模型参数的基本方法优于设计用于更新较少参数的方法,尽管更新所有参数的成本最高。论文还尝试了多种方法来同时在多个任务上训练模型,这在论文的文本到文本设置中只是对应于在构建批时混合来自不同数据集的示例。多任务学习的主要关注点是设置每个任务的训练比例。论文最终没有找到一种策略来设置混合比例,该比例与无监督预训练和监督微调的基本方法的性能相匹配。然而,论文发现,在对混合任务进行预训练后进行微调,可以产生与无监督预训练相当的性能。

  • 缩放 论文比较了利用额外计算的各种策略,包括在更多数据上训练模型、训练更大的模型以及使用模型集合。论文发现,每种方法都能显著提高性能,尽管用更少的步骤训练更大的模型,往往会比用更多的数据训练更小的模型表现更好。论文还表明,与单个模型相比,集成模型可以提供更好的结果,从而提供利用额外计算的正交方法。从同一基础预训练模型微调的融合模型的性能比预训练和完全单独微调所有模型的性能差,尽管仅微调的融合仍然大大优于单个模型。

  • 挑战极限 论文结合了我们的上述见解,并训练了更大的模型(多达110亿个参数),以在论文考虑的许多基准中实现最先进的结果。对于无监督训练,论文从C4数据集中提取文本,并应用一个去噪目标,该目标会破坏标记的连续范围。在对单个任务进行微调之前,论文对多任务混合进行了预训练。总的来说,论文的模型接受了超过1万亿tokens的训练。为了便于复制、扩展和应用我们的结果,论文发布了代码、C4数据集和每个T5变量的预训练模型权重。

(2)展望

  • 大型模型的不便 论文研究的一个不令人惊讶但重要的结果是,较大的模型往往表现更好。用于运行这些模型的硬件不断变得更便宜和更强大,这一事实表明,扩大规模可能仍然是实现更好性能的一种有希望的方式(Sutton,2019)。然而,在某些应用程序和场景中,使用更小或更便宜的模型是有帮助的,例如在执行客户端推理或联合学习时(Konečn'y等人,2015,2016)。与此相关,迁移学习的一个有益的用途是在低资源任务中获得良好表现的可能性。资源不足的任务通常发生在缺乏标记更多数据的资产的环境中(根据定义)。因此,低资源应用程序通常对计算资源的访问也很有限,这可能会产生额外的成本。因此,论文提倡研究用更经济的模型实现更高性能的方法,以便将迁移学习应用到影响最大的地方。目前沿着这些路线开展的一些工作包括蒸馏(Hinton et al.,2015;Sanh et al.,2019;Jiao et al.,2019)、参数共享(Lan et al.,2019)和条件计算(Shazeer et al.,2017)。

  • 更高效的知识提取 回想一下,预训练的目标之一(粗略地说)是为模型提供通用的“知识”,以提高其在下游任务中的性能。论文在这项工作中使用的方法是训练模型去噪损坏的文本跨度,这是目前常见的做法。论文怀疑这种过于简单的技术可能不是教授模型通用知识的非常有效的方法。更具体地说,能够获得良好的微调性能将非常有用,而无需首先在1万亿个文本标记上训练我们的模型。一些并行工作通过预训练模型来区分真实文本和机器生成的文本,从而提高了效率(Clark et al.,2020)。

  • 将任务之间的相似性形式化 论文观察到,对未标记的域内数据进行预培训可以提高下游任务的性能(第3.4节)。这一发现主要依赖于一些基本的观察结果,例如,SQuAD是使用维基百科的数据创建的。制定一个更严格的预训练任务和下游任务之间“相似性”的概念是有益的,这样就可以对使用什么样的未标记数据源做出更具原则性的选择。在计算机视觉领域有一些早期的经验研究(Huh et al.,2016;Kornblith et al.,2018;He et al.,2018)。更好地了解任务的相关性也有助于选择有监督的预训练任务,这对GLUE基准测试很有帮助(Phang et al.,2018)。

  • 语言无关模型 论文很失望地发现,在所研究的翻译任务中,纯英语的预训练并没有取得最先进的成果。论文还希望避免需要指定词汇表可以提前编码的语言的逻辑困难。为了解决这些问题,我们有兴趣进一步研究语言无关模型,即无论文本的语言如何,都能以良好的性能执行给定NLP任务的模型。鉴于英语不是世界大多数人口的母语,这是一个特别相关的问题。