NLP模型卡-RoBERTa

一:模型简介

许多Bert+的模型基本都会对Bert的模型结构进行修修补补,然后跑出一个SOTA值,但是RoBerta并没有提出一个新的模型结构,其全名是A Robustly Optimized BERT Pretraining Approach,一种鲁棒的Bert预训练方法(按理说应该叫RoBERTpa,估计是不太好读吧,事实证明起个易于上口的名字有利于企业的发展,比如巴依尔是哪个车名的前身?)而是对Bert的预训练方法进行了改进,除了改变Mask的方式之外,其他各个改进基本都是上演着大力出奇迹的事情。

二:论文:

RoBERTa:A Robustly Optimized BERT Pretraining Approach
发布者:FaceBook AI 2019-ACL

三:Motivation

1:原有的Bert在Mask的时候,15%的Mask词一旦被选定,那么在整个预训练的过程中这些词都是不变的,这样就使得在不同的epoch中,同一个sentence使用了相同的mask,没有变化,阔能会出现过拟合。
2:需要找到训练过程中有哪些因素(使用的方法,各种超参等)对训练的结果影响比较大,这样有利于后面其他模型训练,但是现在的模型训练起来都太昂贵了,各位如果没有Money的话,就由我来给大家代劳了。

四:Contributions

1:Dynamic Masking:动态掩盖机制

解决每个epoch样本被同样的Mask掩盖。具体做法是先把数据复制10份,然后使用10种不同的Mask方式进行mask,然后训练40个epoch(训练完一份就是一个epoch),这样每个sentence的Mask方案在训练的时候只会被看到四次。做了实验,要比static masking 好(os:要是不好也做这个实验了)(据说是采用了whole word mask,好处是可以学习被mask掉的词之间的信息)

2:Without NSP(Next sentence Prediction):不再使用NSP任务

原来的Bert采用的是segment+pair+NSP,segment中可能包含多个自然句子,但是总的token小于512,其segment还可能把句子给切断。而本文中采用的方式是Full-Sentences,是一个文章中连续的几个自然语句,但是其总长度也限制在512以内,并且在文档末尾,如果还不到512的话,还可以cross-document,只需要在这加一个特殊的标记符就行。此时是没有NSP任务的,至于为啥没有,可以参考:NLP模型卡-Bert 。作者还进行了sentenc-pair-nsp和doc-sentences的实验,感兴趣可以去看下论文,当然最后实验证明了没有NSP任务也是阔以的,而且还有部分提升。
现在请开始你的表演。。

3:Larger Batch Size:更大的Batch Size

Bert原来的batch size是256 然后训练1M 个steps,这个直接把batch size设置为8K,然后训练31K(还有bs=2K和ste=125K的配方可选),它的主要原因是别人也这样搞,那我也这样(借鉴了机器翻译中,使用更大的bs和更少的训练步数,据说可以在大学习率的情况下提高优化速度和模型效果,其实这是对的,因为如果进一步把batch size增大,每次都把所有样本计算完再求梯度,求得的梯度方向肯定要比少量样本(局部)在全局上更优,关键是得有足够的资源,不过不怕,搞起来)

4:More Data and Longer Time:更多的数据,更长的训练时间

这点对于很多模型都一样,如果有跟多数据,那肯定能提高模型的泛化能力,这样也是一种降低过拟合的方式呢,只要你有能力,你可以使用尽可能多的数据,然后配以更长的训练时间。大力出奇迹。Bert使用了13G,XLNet使用了126G,RoBerta使用了160G,前面的都是弟弟。

5:Byte-Pair Encoding(BPE)

注意这个BPE和Bert原有的不太一样,原有的BPE在处理英文或者法文这样类似的文本时,可以当成一样的,但是在处理中文日文等,其是word-level的,也就是不再以字节为单位进行成对出现的(一个汉字一般占两个字节),这样的编码方式在语料过多时,会使得词典变得很大(10-100K),所以其采用了按Byte进行配对,无论中英文还是别的,只要是文本,那就按照其存储的字节进行BPE编码,这样大致可以使得字典数缩减到一个可以接受的值(50K)。这样左还有一个好处,它对于任何输入文本,基本都能进行编码,50K的这样的词典,基本不需要UNK(引用原文:Using bytes makes it possible to learn a subword vocabulary of a modest size 50K ,that can still encode any input text without introducing any “un-known” tokens. )

五:Disadvantage

其实缺点很难找,人家花了这么多钱,做了这么多试验,怎么会是我们能提出缺点的呢?但是它模型结构仍然是按照Bert进行的,所以Bert所有的缺点,它基本也都会有,具体请参考:NLP模型卡-Bert ,这里就简单提两点吧。
1:Mask符号造成的训练和预测的不一致问题
2:只对Mask部分的单词进行loss计算,降低了数据利用率(但是架不住人家数据多,卡多),解决方法可以参考:NLP模型卡-XLNet ,NLP模型卡-ELECTRA
3:AE(Auto encoding)模型不太适合生成式任务
4:固定长度的输入,导致无法获取长距离依赖。可参考:NLP模型卡-XLNet , NLP模型卡-Transformer-XL
算了不写了,你做的不错。
Notes:
关于static和Dynamic Masking,好像理解的有错误,作者把原来Bert的那种方法当做baseline,然后复制10份的那个方案叫做static,每输入一个sequence改变一种masking pattern叫做Dynamic,然后发现最后这个稍微好些,所以后续都用了这个方法。原文4.1,有看懂的可以交流一下哈。

你可能感兴趣的:(NLP模型卡集册)