本篇带来Facebook的提出的两个预训练模型——SpanBERT和RoBERTa。git
一,SpanBERTgithub
论文:SpanBERT: Improving Pre-training by Representing and Predicting Spans 算法
GitHub:https://github.com/facebookresearch/SpanBERT函数
这篇论文中提出了一种新的mask的方法,以及一个新损失函数对象。而且讨论了bert中的NSP任务是否有用。接下来SpanBERT是如何预训练的,具体以下图所示:性能
如上图所示,首先这里的mask策略是span mask。具体的作法是首先从一个几何分布中采样span的长度,且限制最大长度为10,而后再随机采样(如均匀分布) span的初始位置。整个训练任务就是预测mask的token,另外mask的比例问题和bert中相似。可是在这里引入了两个损失对象,$L_{MLM}$ 和$L_{SBO}$,$L_{MLM}$和bert中的同样,而这个$L_{SBO}$是只经过span的边界处的两个token来预测span中mask的词,公式表示以下:测试
函数$f(.)$表示以下:spa
除了这些以外还有两个策略,一是动态mask,在bert中是在数据预处理阶段对一条序列随机不一样的mask 10次,而在这里是每次epoch时对序列使用不一样的mask。二是bert中会在数据预处理阶段生成10%的长度短于512的序列,而在这里不作这样的操做,只是对一个document一直截取512长度的序列,但最后一个序列长度可能会小于512。另外将adam中的$\epsilon$设置为1e-8。做者根据这两个策略重新训练了一个bert模型,同时去除NSP任务只使用单条序列训练了一个bert模型。所以做者给出了四个模型的性能对比:3d
Google BERT:谷歌开源的berthtm
Our BERT:基于上面两个策略训练出来的bert对象
Our BERT-1seq:基于上面两个策略,且去除NSP任务的bert
SpanBERT:本篇论文提出的模型
做者给出的第一个性能测试的表格是在SQuAD数据集上,
SpanBERT是有很大的提高的,另外去除NSP任务也有提高,做者认为NSP任务使得单条序列的长度不够,以致于模型没法很好的捕获长距离信息。另外在其余的抽取式QA任务上也有很大的提高
我的认为SpanBERT在抽取式QA任务上能取得如此大的提高,是由于SpanBERT中构造的任务,尤为是SBO任务其实是有点贴合抽取式QA任务的。
在其余任务上SpanBERT也有一些提高,可是没有在抽取式QA任务上提高这么大,此外做者也作实验表示随机mask span的效果是要优于mask 实体或者短语的。
综合来讲,SpanBERT在抽取式QA上的效果表现优异,在抽取式QA上是值得尝试的。
二,RoBERTa
论文:RoBERTa: A Robustly Optimized BERT Pretraining Approach
GitHub:https://github.com/brightmart/roberta_zh
本篇论文主要是在bert的基础上作精细化调参,能够看做是终极调参,最后性能不只全面碾压bert,且在大部分任务上超越了XL-Net。
总结下,主要有如下六处改变的地方:
1)Adam算法中的参数调整,$\epsilon$由1e-6改为1e-8,$\beta_2$由0.999改为0.98。
2)使用了更多的数据,从16GB增长到160GB。
3)动态mask取代静态mask。
4)去除NSP任务,并采用full-length 序列。
5)更大的batch size,更多的训练步数。
6)用byte-level BPE取代character-level BPE。
接下来咱们来结合做者的实验看看。首先做者任务调整adam的参数是可使得训练更加稳定且也能取得更好的性能,但并无给出实验数据。增长数据提高性能是毋庸置疑的。
动态mask
在bert中是在数据预处理时作不一样的mask 10次,这样在epochs为40的时候,平均每条mask的序列会出现4次,做者在这里使用动态mask,即每次epochs时作一次不一样的mask。结果对好比下:
说实话,没以为有多大提高,毕竟咱们在训练模型的时候,一条数据也会被模型看到屡次。
模型输入
对比了有无NSP任务的性能,以及不一样的序列输入的性能,做者在这里给出了四种输入形式:
1)SEGMENT-PAIR + NSP:两个segment组成句子对,而且引入NSP任务
2)SENTENCE-PAIR + NSP:两个sentence组成句子对,而且引入NSP任务,总长可能会比512小不少。
3)FULL-SENTENCES:有多个完成的句子组成,对于跨文档的部分,用一个标识符分开,可是总长不超过512,无NSP任务
4)DOC-SENTENCES:有多个完整的句子组成,可是不跨文档,总长不超过512
性能以下:
显然直接用句子对效果最差,做者认为主要时序列长度不够,致使模型没法捕捉长距离信息。而且去除NSP任务效果也有所提高。
更大的batch size,更多的训练次数
做者认为适当的加大batch size,既能够加速模型的训练,也能够提高模型的性能。
以后做者在8k的batch size下又增大训练次数
从实验中能够看出采用更大的训练次数,性能也是有不小的提高的。而且能够看到即便在训练数据差很少的状况下,RoBERTa也是要优于BERT的。
总之RoBERTa是一个调参成功的BERT,在诸多任务上全面超越bert,大部分超越XL-Net。