前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[预训练语言模型专题] RoBERTa: 捍卫BERT的尊严

[预训练语言模型专题] RoBERTa: 捍卫BERT的尊严

作者头像
朴素人工智能
发布2020-06-21 16:31:45
5.6K0
发布2020-06-21 16:31:45
举报
文章被收录于专栏:朴素人工智能

本文为预训练语言模型专题的第15篇。

快速传送门

1-4:[萌芽时代][风起云涌][文本分类通用技巧] [GPT家族]

5-8:[BERT来临][浅析BERT代码][ERNIE合集]、[MT-DNN(KD)]

9-12:[Transformer][Transformer-XL][UniLM][Mass-Bart]

13-14:[跨语种模型][XLNet]

感谢清华大学自然语言处理实验室对预训练语言模型架构的梳理,我们将沿此脉络前行,探索预训练语言模型的前沿技术,红框中为已介绍的文章,绿框中为本期介绍的模型,欢迎大家留言讨论交流。

RoBERTa: A Robustly Optimized BERT Pretraining Approach(2019)

众所周知,BERT对NLP领域的发展产生了极大的影响,刚一出现,它在当时的不少榜单上,都取得了压倒性的优势。在那之后,预训练语言模型领域有了蓬勃的发展,各种模型百花齐放,其中有一些还在各排行榜上超越了BERT,成为了当时的state-of-art。

而本文是对BERT预训练语言模型进行了一个重复性的研究。作者认为BERT实际上是大大地被undertrained了,将之充分地训练以后可以反超在它之后发布的所有模型的效果。同时,在GLUE,RACE,SQuAD等数据集上,作者进行了实验,确实又夺得了state-of-art的效果。作者认为,这显示人们以前忽略了设计选择的重要性,同时对最近的一些报告上,模型效果提升的来源(是否是结构导致的提升)提出了疑问。

大量的预训练模型如ELMo,GPT,BERT,XLM,XLNet等都给下游的任务带来了很大的收益,但是很难去确定这些收益来源于哪里,因为语言模型的预训练是很昂贵的。作者对BERT的预训练进行了仔细的评估,包括超参数和训练集大小的配置,发现BERT其实没有很充分地训练,从而提出了更好地训练BERT的方法,称为RoBERTa,它超过了在BERT之后发表的所有post-BERT方法的效果。

方法其实很简单:

  1. 更长的时间更大的batch size更多的数据进行训练
  2. 去掉BERT中的NSP目标(next sentence prediction)
  3. 更长的句子上进行训练
  4. 根据训练数据动态地改变mask的模式

同时作者总结了一下文章的主要贡献:

  • 展示了一组重要的BERT的设计选择和新的训练策略,使模型在下游任务上取得更好的效果。
  • 使用了新的dataset,CC-News,并确认了更多的数据预训练能给下游任务带来更好的效果
  • 证明了在合适的设计选择下,masked language model(BERT)是和所有最新发布的模型相比都是极具竞争力的

模型细节

RoBERTa同样使用了Adam,β1为0.9,β2为0.999,ε=1e-6,L2 weight decay为0.01,全部层的dropout为0.1,线性激活为GELU。和BERT不同的是,其warmup的步数,以及warmup到达的最大学习率会根据设置而进行finetune,而且RoBERTa所有的训练样本几乎都是全长512的序列,这与BERT先通过小的序列长度进行训练不同。

数据

BERT类的模型依赖于大规模的文本进行训练,RoBERTa的训练样本就比BERT更多而且更有多样性。最后使用了BOOKCORPUS(16GB),CC-NEWS(76GB),OPENWEBTEXT(38GB),STORIES(31GB) 总共160GB左右的数据,BOOKCORPUS是BERT原始的训练数据,可以看到,RoBERTA数据量多了10倍

模型通过混合精度在8 * 32GB的V100上进行训练。

动态掩码(Dynamic Masking)

BERT的masking是在预处理时进行的,导致这种Masking是静态的,每个epoch的masking结果一致。原本的BERT为了避免这种情况,把数据复制了十份,然后进行了十种不同的静态masking。这样在40个epochs的训练中,同样masking的数据会在整个训练中出现四次。

而RoBERTa中使用Dynamic Masking,只是在序列送入模型中的时候才去进行动态的masking,这样在更大的数据集上或者更多步数的训练上会表现更好。

输入形式与NSP任务

作者比较了几种输入方式

  • SEGMENT-PAIR+NSP 首先模型输入为包括两个segment的SEGMENT PAIR,其中每个segment可以包含多个句子,用[SEP]分割,这和BERT本来的输入方式相同,并且包含NSP任务。
  • SENTENCE-PAIR+NSP 模型输入为包含两个句子的SENTENCE-PAIR,用[SEP]分割,这会导致序列的长度远小于512,同样保持了NSP任务。
  • FULL-SENTENCES 模型输入为全量的句子,填满512的长度,采集样本的时候可以跨越文章的界限,去除了NSP loss
  • DOC-SENTENCES 模型输入和FULL-SENTENCE类似,但是一个样本不能跨越两个document

比较了SEGMENT-PAIR和SENTENCE-PAIR后,作者发现,使用单个句子相比使用句子组成的Segment会降低下游任务的结果。

比较了SEGMENT-PAIR和DOC-SENTENCES两个模式后,作者发现没有NSP,下游任务的效果更好。

最后,作者比较DOC-SENTENCES和FULL-SENTENCES,作者结论是不跨越document进行取样效果更好。

文本编码方式

Byte-Pair Encoding(BPE)是一种介于字级别和词级别之间的编码表示,基于subwords units。BPE的字典一般从10K-100K的范围内,随着语料而变化。但有一种聪明的做法是利用bytes来替代subword中的unicode字符,这样就可以用一个不太大的(50Kunit)的字典来对任意的输入进行编码而不引入未知的token。虽然相比于BERT使用30K的字符BPE的字典,Roberta会在Embedding层额外引入15M到20M的参数量,但是用一个固定的词典,相比而言是比较好的,而两者在性能上几乎没有区别。

效果比较

从上图中可以看到,数据增多,训练更长时间都能带来收益,和XLNET的比较中,RoBERTa并没有落于下风。

在GLUE,RACE等数据集上,也比当时的state-of-art,XLNet更好。

最后总结下,提高BERT模型下游任务上性能的方法有,用更多数据集以更大的batch size来训练更多的时间,去掉NSP任务目标,在更长的句子上预训练,动态地改变masking等。经过这些操作的RoBERTa,在各排行榜上都取得了state-of-art的效果。附上工程链接 https://github.com/pytorch/fairseq

未完待续

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 朴素人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RoBERTa: A Robustly Optimized BERT Pretraining Approach(2019)
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档