【NLP】T5速读

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

简介

此次的T5模型虽然名字和BERT+系列不同,但底子里仍是差很少的。给个人感受就是大型Seq2Seq的BERT+干净的数据+多任务+一些改动。论文的做者深刻对比了不一样的预训练目标、模型结构、无监督数据集、迁移方法、NLU任务,最终拼成了T5。文章除去reference一共34页,能够说很良心地剖析了transformer的效果,本文尽可能把细节和结论都清晰地整理出来。git

来感觉一下T5的size:svg

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

1. 模型

输入和输出性能

和GPT2同样,T5把全部的NLP问题归结为了“text-to-text”的任务,下图展现了T5在翻译、分类、类似度、摘要任务上的输入输出样例:学习



Relative position embeddings (PE)测试

T5使用了简化的相对位置embeding,即每一个位置对应一个数值而不是向量,将相对位置的数值加在attention softmax以前的logits上,每一个head的有本身的PE,全部的层共享一套PE。我的认为这种方式更好一点,直接在计算attention weight的时候加入位置信息,并且每一层都加一次,让模型对位置更加敏感。this

原文中有句话很难懂,以后懂了解读一下:编码

In this work, we use 32 embeddings for all of our models with ranges that increase in size logarithmically up to an offset of 128 beyond which we assign all relative positions to the same embedding.

2. 数据

Colossal Clean Crawled Corpus (C4)spa

做者选取了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愈来愈好。


(我会继续补充的)



hi all!最近终于有了本身的公众号,叫NLPCAB,原本想叫LAB,但以为和一我的能撑起实验室我就上天了,因此取了谐音CAB,有些可爱而且意味深长?以后会努力和Andy发干货,也但愿各位同窗投稿学习笔记~

相关文章
相关标签/搜索