作者 | 周俊贤 整理 | NewBeeNLP
最近整理预训练模型,又复习看了几篇BERT变体的论文,无外乎都是从「模型架构、MASK方式、预训练目标」入手,实话实说,感觉没有太大的创新。而且这类模型大部分只发布了英文版本,市面上也没有可用的中文版本,在中文上的效果不得而知。
不过思考一下作者们基于BERT作各种优化背后的原因和动机,是件十分有趣的事情,也当开拓一下思路。所以这篇博客记录一下,主要包括SpanBERT、MPNet、MASS、BART这四个模型,其中SpanBERT、MPNet是进一步优化NLU任务,MASS、BART是为了优化NLG任务。

论文全称及链接:《SpanBERT: Improving Pre-training by Representing and Predicting Spans》[1]
与BERT不同,SpanBERT主要是在MASK策略和预训练目标上,如下图所示

比较了Masking的策略,包括

从实验看到,SpanBERT的效果是最好的,带给我们的思考是「不要纠结于mask的是一个完成的词,还是完成的短语,还是完整的实体?只要mask的是一段连续的Span即可」。

从实验结果可以看到,去到NSP任务,采样的时候从单个文档得到segment,增加SBO任务都能带来效果的提升。
论文全称及链接:《MPNet: Masked and Permuted Pre-training for Language Understanding》[2]

论文的开头,就直接指出BERT的Output Dependency缺点和XLNet的Input Consistency缺点,
这里吐槽一下,Input Consistency在大部分论文里不应该是BERT的问题吗?因为BERT的输入带有【MASK】 token,但在下游任务时,输入是没有【MASK】 token的,但在这篇论文里反正成为了PLM的问题,当然,PLM也有这种问题,但感觉没有BERT的那么严重。。。
进一步的,作者把BERT和PLM都放入到一个统一的架构中来,如下图所示,

然后,作者提出MPNet来改进Output Dependency和Input Consistency问题,具体的如下图所示,

图中, x_4、x_6、x_2 是permuted后待预测的token,假如现在要预测的是 x_6 ,按PLM来说,是看不到 x_2 的信息的,但这里经过巧妙的设计,让预测 x_6 时, P_2+[M] 也作为输入,相当于模型在预测 x_6 时,也能看到 x_2 的位置信息,从而解决Input Consistency问题,作者把这称为position compensation。除此之外,在预测 x_6 时,也能利用到 P_4+x_4 作为输入,从而解决Output Dependency问题。

论文全称及链接:《MASS: Masked Sequence to Sequence Pre-training for Language Generation》[3]
MASS主要是弥补BERT对于NLG任务的不足,这一类对于NLG任务的优化,大部分采用的是encoder-doceder的架构,因为这种架构天然适合于作生成任务。
MASS也不例如,采用的同样是encoder-decoder架构。
任务是「给定一个句子,从里面抽取一个片段,encoder端输入被抽取片段后的句子,docoder输出预测该片段」。
具体的如下图所示,图中 x_1, x_2, x_3, x_4, x_5, x_6, x_7, x_8 为句子序列,从里面抽取出片段 x_3, x_4, x_5, x_6 (或者说把它们mask掉),encoder的输出端变成 x_1, x_2, [M], [M], [M], [M], x_7, x_8 ,decoder的输出目标就是被抽取的片段 x_3, x_4, x_5, x_6 ,注意哦,「decoder的输入端是不包括没被mask的token的哦」。

作者对这任务作了很漂亮的解释
我个人理解是,假如现在decoder要预测的是完整序列,那当预测 x_6 时,模型能看到decoder之前预测的token,即 x_3, x_4, x_5 ,但模型看不到 x_1, x_2 ,这样的好处是,鼓励模型从encoder端提取有用的信息,而不是过分关注于docoder端之前预测出的token对当前token的影响
作者还比较了当mask片段的长度不同的,MASS就变成我们所熟悉的模型。如当被mask的片段长度 k=1 时,MASS变成成BERT,当 k=m (m为句子序列长度),MASS变成了GPT,如下图所示。


从下图的实验结果可以看出MASS效果是最好的。

论文全称及链接:《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》[4]
同MASS一样,同样是为了优化NLG任务,所以采用的是encoder-decoder架构,整体思路分两步:
如下图所示,(a)和(b)分别是BERT和GPT的预训练目标,(c)是BART的预训练目标,对原序列ABCDE进行噪声处理,这里采用了shuffle和token infilling。

实际上,作者在论文中比较过几种noising function,包括

作者经过实验,最后采用的是Text Infilling和Sentence Permutation相结合。
除此之外,虽然BART的提出是为了弥补BERT在NLG任务中的不足,但是作者也通过实验论证了,BART在NLU任务中也能取得不俗的表现。下图为BART应用于NLU任务和NLG任务的例子。

[1]《SpanBERT: Improving Pre-training by Representing and Predicting Spans》: https://arxiv.org/abs/1907.10529
[2]《MPNet: Masked and Permuted Pre-training for Language Understanding》: https://arxiv.org/abs/2004.09297
[3]《MASS: Masked Sequence to Sequence Pre-training for Language Generation》: https://arxiv.org/abs/1905.02450
[4]《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》: https://arxiv.org/abs/1910.13461
- END -