Introduction

简单介绍了NLP的发展近况,Pre-training大行其道blabla……

这个工作的基本思想是把所有的NLP问题都可以定义成“text-to-text”问题,即“输入text,输出text,一个模型干所有”。具体到这个工作,主要考虑了machine translation、question answering、abstractive summarization和text classification四个任务。

顺便贡献了个语料库C4(Colossal Clean Crawled Corpus),你看这个语料库,它大又圆,啊不,大又干净……(750GB)

Setup

介绍了模型、数据集、下游任务和输入输出格式。

模型:模型就是Transformer,后面的实验讨论了transformer的各种variants。不了解transformer的同学看http://nlp.seas.harvard.edu/2018/04/03/attention.html

数据:就是介绍了一下C4这个数据集是怎么来的。总结出来一句话,就是基于Common Crawl这个项目从2019年4月份到现在的数据,用了各种过滤方法,得到的一个英文语料库。

下游任务:这个工作主要研究了machine translation、question answering、abstractive summarization和text classification四个任务。具体用于评测的标准数据集有:

  • machine translation:WMT English to German, French, and Romanian translation
  • question answering:SQuAD
  • abstractive summarization:CNN/Daily Mail
  • text classification:GLUE and SuperGLUE

输入输出格式:(这部分有点意思)因为这个工作的思想就是“一个模型干所有”,为了让模型知道什么情况该干啥,作者在真实的数据前面加了个prefix。就比如说,英语翻译成德语。原来的输入是:

{"en": "That is good.", "de": "Das ist gut."}

现在变成了:

{"inputs": "translate English to German: That is good.", "targets": "Das ist gut.''}

“translate English to German: ”就是翻译任务的prefix。

具体任务有不同的prefix,在这里不展开说了。

Experiments

Baseline:

  • 模型:标准的transformer。具体参数参照了BERT base,所以最终模型的参数量大约是BERT base的两倍,因为encoder-decoder结构。Note:本文作者用了ReLU,BERT原文用了GeLU。
  • 训练:还是标准的MLE的训练模式,optimizer用了AdaFactor,预测是用了greedy decoding(我猜是处于效率的考虑,如果用Beam Search指标可能更好看一些,其实也不难理解,本文考虑的四大任务中,除了MT,另外三个任务生成的文本并不长。)
  • 单词表:用SentencePiece生成了一个大小为32000的单词表。SentencePiece是一个language-independent tokenizer,不了解的同学看这里https://github.com/google/sentencepiece
  • 无监督目标函数:传统的那种shift one position的causal language model已经不好使了,本文作者用了denoising objective。这个操作有点像齿轮,就是在input sequence中随机drop掉15%的token,相邻的token就merge成一个span,这样以来就有了若干个span,target sequence的mask实际上是根据被mask之后的input sequence取了反集,最后在加上一个额外的mask。具体例子请看原文Figure 2。(不禁想到了Google的BERT WWM,百度的ERNIE,FAIR的SpanBERT)
  • 表现:自己看paper吧,不赘述了。

Architecture:

这一部分讨论了各种模型结构,其实也是对Attention相关内容入门的很好的材料。

  • Model structures:这一部分介绍了三种结构:Encoder-decoder、Language model和Prefix LM。其实就是介绍了三种attention mask:Fully-visible(transformer的encoder那种mask),Causal(transformer的decoder那种mask),Causal with prefix(前两种的结合,前半段是fully-visible,后半段是causal)。在同样运算复杂度的情况下,Encoder-decoder结构的参数量是其他结构的两倍左右。
  • Objectives:在目标函数方面,主要比较了language model objective、denoising objective和prefix language model。
  • Results:Encoder-decoder配合denoising objective达到了最好的效果。详见原文Table 2。

Unsupervised objectives:

这一部分比较了三种objective:Prefix language modeling,BERT-style,Deshuffling。BERT wins!(详见Table 4)

基于BERT-style objective,又做了进一步简化,出了三种variant,这些variants跟原版的BERT-style objective差距不大。(详见Table 5)

研究了一下不同的corruption rate的影响,15%最好。(详见Table 6)

因为预测更短的targets可以提高训练速度(需要预测的东西更少了),作者还实验了span长度的影响(把含有N个词的span用一个sentinel代替,能让targets更短)。在大多数任务上都差不多,但是span长度为3的时候,在非翻译任务上表现最好。(详见Table 7,Table 7里面标星的是baseline,即mask单个词span长度为1,我理解是个typo,正文里面说span length=3的时候最好)

最后在Figure 5里作者梳理了一下这一大波实验(其实要是图快,直接看Figure 5就好了)。首先发现BERT-style在三种objective里最好,又发现BERT-style里replace spans的方法最好,然后又发现mask掉15%的token,最后发现span长度为3的时候最好(表现在统计上显著的好一点点,但是更快)。层层递进。(就这个差距,要想在统计上看出显著性,实验得重复10次以上)

Pre-training dataset:

Unlabeled datasets:这部分就是比较了C4和其他已开源的语料库。主要的发现是pre-training on in-domain unlabeled data can improve performance on downstream tasks。作者解释说,是因为Wikipedia + TBC在SuperGLUE上的表现特别好。(我对这个解释其实不太买账,C4毕竟比Wikipedia + TBC大30多倍,而且没有单独试试TBC的效果也有点遗憾)具体分析没仔细看。

Pre-training dataset size:数据越多越好。一定范围内的数据重复不会对表现有太大影响,但是unlabeled data这么多又用不完,对吧。

Training strategy:

  • Fine-tuning methods:主要比较了两种方法,adapter layer和gradual unfreezing。adapter layer的参数量是跟fine-tuning tasks的数据规模正相关的。如果能仔细调调参数,其实还是更新所有参数表现最好。(详见Table 10)
  • Multi-task learning:这部分又臭又长,没仔细看,直接上结论了,单纯用multi task learning不如pre-train-then-fine-tune效果好。(详见Table 11。我个人觉得还是数据规模上差距太大)
  • Combining multi-task learning with fine-tuning:直接说结论吧,Multi-task pre-training效果不如Unsupervised pre-training,除了MT(其实也没差太多)。(详见Table 12)
  • Scaling:更长的训练时间和更大的模型会带来更好的结果。(详见Table 13。讲真这部分比较乱,没仔细看)

Putting it all together:

这是总结一发。

  • Objective:就是Unsupervised objectives那一部分总结出来的那些,replace spans,15%,span length=3
  • Longer training:1m steps,每个batch是2^11个长度512的sequence
  • Model sizes:五个大小级别,base,small,large,3B和11B
  • Multi-task pre-training:虽然效果上也没啥太大作用,但是训练的时候可以用来监控收敛情况,所以就加上吧。
  • Fine-tuning on individual GLUE and SuperGLUE tasks:因为这俩任务的数据比较少,所以做了单独的fine-tuning的设计。(详见论文Page 29)
  • Beam search:所有实验结果都用了greedy decoding,如果用Beam Search,MT和summarization的结果会显著提高。
  • Test set:所有结果都是基于test set,而不是validation set。模型太大,把SQuAD服务器干爆了,他们自己评测的SQuAD。

Table 14展示了最终的结果,在大部分任务上都做到了SOTA,除了MT(我觉得主要是因为没用Beam Search)。不多说了,自己看吧。(详见Table 14)

Reflection

Takeaways:就是总结了一下前面所有的发现,不再重复了。

Outlook:

这一部分真的有种得了便宜还卖乖的感觉,酸了酸了。

  • The inconvenience of large models:我们也知道大模型表现好,但是一味把事情搞大不行啊,建议大家可以看看distillation、parameter sharing和conditional computation。
  • More efficient knowledge extraction:我们需要一个更有效的方法来学到通用的知识,我们强烈怀疑BERT-style loss的效率。
  • Formalizing the similarity between tasks:我们需要一个衡量pre-training和下游任务相似性的方法。(这个说的挺好)
  • Language-agnostic models:English-only pre-training没能在翻译任务上达到SOTA的表现(其实我挺好奇加了Beam Search之后是什么结果),说明单一语言还是有局限性。要是能搞一个不收语言限制的模型就牛逼了,我们准备想办法搞一个。

我自己的想法

这个工作其实没讲什么新的东西,只不过背靠Google这座大山,作者们把我们一直想做但是有心无力的实验给做了,是个挺好的Technical Report。

Nothing new,Nothing surprised。

参见

T5: Text-To-Text Transfer Transformer相关推荐

  1. T5: Text-to-Text Transfer Transformer 阅读笔记

    作者:徐啸 知乎专栏:自然语言处理学习之旅 https://zhuanlan.zhihu.com/p/89719631 写在前面 谷歌用一篇诚意满满(财大气粗)的基于实验的综述,试图帮助研究者们「拨开 ...

  2. html中text函数,text函数的使用方法

    TEXT(value,format_text) 参数1:Value 为数值.计算结果为数字值的公式. 参数2:Format_text 为设置参数1的格式. Text函数的常用法: 1.格式转换 通常用 ...

  3. unity_在canvas中修改text和text到底是什么

    打开unity 的界面 create game object create component 都可以找到text 这是咋回事?? 其实text 就是Text类型.一个Text example,它的内 ...

  4. expected START_TAG or END_TAG not TEXT (position: TEXT seen

    expected START_TAG or END_TAG not TEXT (position: TEXT seen -\ua0\ua0\n\t\t\t<g- @59:6) @ E:\spri ...

  5. java.text._Java.text

    1. 描述 提供以与自然语言无关的方式来处理文本.日期.数字和消息的类和接口.这意味着所编写的主程序或 applet 是与语言无关的,并且它可以依靠独立的.动态链接的本地化资源.这实现了随时为新本地化 ...

  6. html输出text,为什么text();和html();输出结果不一样呢?

    .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTML内容(包括其Html标签),.html()方法使用在多个元素上时,只读取第一 ...

  7. Python遇到过得text和text()

    1.BeautifulSoup中的.text方法和get_text()方法的区别 如果你想要用text值,应该调用对应的get_text(), 'cate': list(cate.stripped_s ...

  8. js 第1步:随机生成json对象,格式为:“[[{“text“:XXXX},{“text“:XXXX}],[{“text“:XXXX},{“text“:XXXX},{“text“:XXXX}]]“

    js代码: function getNum(){var x = parseInt(Math.random()*10000);return x;}function getObjNum(){var x = ...

  9. html中text函数,text函数 excel中如何使用text函数

    如果我们需要将期数和日期进行合并的话,就需要用到这test函数.当然有许多人对着一个函数,肯定是第一次看到,自然也不知道这一个函数的具体使用方法.而今天我们要了解的内容就是这一个函数的具体使用方法. ...

  10. 报错解决:expected START_TAG or END_TAG not TEXT (position: TEXT seen

    错误原因: 可能是再复制的时候,空格的格式有问题,或者有多的空格. 解决方法: 1.将需要将这些有问题的空格删除. 2.重新打一遍.

最新文章

  1. AspNetPager7.2的基本使用
  2. 作者:董诚,华中科技大学计算机科学与技术学院硕士生。
  3. 第二个情人节表白网页源码
  4. Linux Vim显示行号方法详解
  5. Linux文件系统:Linux 内核文件描述符表的演变
  6. 如何建设一个开源图形引擎的文档网站
  7. Python 清屏命令
  8. Linux下date和touch用法
  9. tushare复权数据使用
  10. postgresql:operator does not exist: text[] character varying[]
  11. BIGEMAP下载等高线(高程)使用教程
  12. 安装系统-win 10
  13. Rocky Linux 8 安装 socks5 服务器步骤
  14. [蓝桥杯]连号区间数[题目详解]
  15. IE11不兼容array.from()解决方法
  16. 前端实现文件下载(a标签实现文件下载 避免直接打开问题)
  17. WebSocket聊天室业务场景分析
  18. centos 配置IP ens33
  19. 灰狼优化算法求函数最优值matlab,GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)...
  20. Bug总是找不到?试试小黄鸭调试法吧

热门文章

  1. 6. php 基本语法
  2. extjs4 store传参使用方法
  3. 【FZU 2277】Change
  4. 【MAVEN】搜索错误“Index downloads are disabled,search results may be incomplete”
  5. iPhone官方资料链接
  6. [待总结]注册软件常用注册方法
  7. Virtual Earth 添加纽约3D地图
  8. 初识ProtoBuf(3.18.1)
  9. Java面试题超详细讲解系列之八【SQL优化篇】
  10. java去除 r_Android apk瘦身最佳实践(一):去除R.class