Google T5速读

ALBERT凳子还没坐热,GLUE就又换了老大,Google T5 (Text-to-Text Transfer Transformer)大力出奇迹,威震天在角落默不作声。

简介

这次的T5模型虽然名字和BERT+系列不一样,但底子里还是差不多的。给我的感觉就是大型Seq2Seq的BERT+干净的数据+多任务+一些改动。论文的作者深入对比了不同的预训练目标、模型结构、无监督数据集、迁移方法、NLU任务,最终拼成了T5。文章除去reference一共34页,可以说很良心地剖析了transformer的效果,建议同学们根据自己的任务和时间慢慢读。

来感受一下T5 11B的size:

贴一下在GLUE和SUPERGLUE的登顶照:

1. 模型

输入和输出

和GPT2一样,T5把所有的NLP问题归结为了“text-to-text”的任务,下图展示了T5在翻译、分类、相似度、摘要任务上的输入输出样例:

Relative position embeddings (PE)

T5使用了简化的相对位置embeding,即每个位置对应一个数值而不是向量,将(key和query)相对位置的数值加在attention softmax之前的logits上,每个head的有自己的PE,所有的层共享一套PE。个人认为这种方式更好一点,直接在计算attention weight的时候加入位置信息,而且每一层都加一次,让模型对位置更加敏感。

2. 数据

Colossal Clean Crawled Corpus (C4)

作者选取了Common Crawl数据集,这个数据集每周大约爬取20TB的WEB数据。虽然数据集已经抽取了文本,但实际上并不干净,里面还包含了很多非自然语言的东西,比如错误消息、菜单、重复文本,用过脏数据的同学一定深有体会。于是本文对数据进行了比较细致的处理:

  • 只取结尾有标点的句子
  • 去掉包含脏话的网页
  • 有很多页面包含"enable Javascript"的提示,去掉包含Javascript的句子
  • "lorem ipsum"是一个测试网页排版的拉丁文,去掉包含这个占位符的网页
  • 去掉包含代码片段的网页
  • 以三句为一个片段进行去重
  • 去掉非英文的网页

经过上述处理后最终生成了750GB的数据集C4,并且在TensorFlow Datasets开源了。

3. 任务及数据格式

任务

机器翻译、问答、生成式摘要、文本分类(单句&双句)

数据格式

  • 输入:参考GPT2,直接把任务名称当作prefix和输入拼在一起
  • 输出:分类任务(如推断),需要输出"entailment", "neutral", "contradiction"这三种文本,否则都算错;回归任务输出str类型的浮点数。还有其他任务,请需要的同学前往附录D参考~

4. 训练

预训练

  • 参考SpanBERT,mask掉15%,平均长度为3的span
  • 训练更长步数,1百万步*1024个样本
  • 使用Multi-task预训练,即混入在无监督数据中混入一定比例的任务数据

精调

  • 也是Multi-task,将所有GLUE/SuperGLUE的数据拼在一起变成精调一个task,减少过拟合,但同时也会牺牲一些精度
  • batch size减小到8
  • 其实最后同时进行了多任务精调和单独精调,根据dev集选择最好的结果

解码

大部分使用Greedy decoding,对于输出句子较长的任务使用beam search

5. 结论

Architectures

  1. 原始的Transformer结构表现最好
  2. encoder-decoder结构和BERT、GPT的计算量差不多
  3. 共享encoder和decoder的参数没有使效果差太多

Unsupervised objectives

  1. 自编码和自回归的效果差不多
  2. 作者推荐选择更短目标序列的目标函数,提高计算效率

Datasets

  1. 在领域内进行无监督训练可以提升一些任务的效果,但在一个小领域数据上重复训练会降低效果
  2. Large、diverse的数据集最香了

Training strategies

  1. 精调时更新所有参数 > 更新部分参数
  2. 在多个任务上预训练之后精调 = 无监督预训练

Scaling

  1. 在小模型上训练更多数据 < 用少量步数训练更大的模型
  2. 从一个预训练模型上精调多个模型后集成 < 分开预训练+精调后集成

总体感觉T5除了position embedding之外没什么新的东西,在GLUE以及机器翻译上的提升都很有限,但作者本来的意图也是做一个全面的分析,砸百万美元替大家排忧解难,此处应有掌声。

从最近的研究来看,目前模型复杂度和性能真的是很难平衡,但今天也听到了量子计算的福音,科技永远向前,希望NLP越来越好。


本文转载自公众号: NLPCAB,作者:李如