Press "Enter" to skip to content

NLP 预训练家族再思考

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

作者 | 周俊贤

 

整理 | NewBeeNLP

 

最近整理预训练模型,又复习看了几篇BERT变体的论文,无外乎都是从 「模型架构、MASK方式、预训练目标」 入手,实话实说,感觉没有太大的创新。而且这类模型大部分只发布了英文版本,市面上也没有可用的中文版本,在中文上的效果不得而知。

 

不过思考一下作者们基于BERT作各种优化背后的原因和动机,是件十分有趣的事情,也当开拓一下思路。所以这篇博客记录一下,主要包括SpanBERT、MPNet、MASS、BART这四个模型,其中SpanBERT、MPNet是进一步优化NLU任务,MASS、BART是为了优化NLG任务。

 

 

SpanBERT

 

论文全称及链接:《SpanBERT: Improving Pre-training by Representing and Predicting Spans》 [1]

 

与BERT不同,SpanBERT主要是在MASK策略和预训练目标上,如下图所示

 

 

MASK策略:连续mask一个片段,而不像BERT一样,随机挑一些token进行mask。咦,谷歌在第二版BERT里就提出了whole word masking,同样是Span mask。那SpanBERT有什幺不同呢?

 

SpanBERT不同在于,首先每轮利用一个几何分布确定Span的长度,然后再找一些作为单词开头的token作为mask的start,然后从start token开始连续mask掉个token,可以看到, 「被MASK的Span不一定是一个完整单词的」 。经过多轮反复,直到输入的15%token被mask。

 

SBO训练目标:用被mask的span左右两边的token去把整个span预测出来,这就是SBO(Span Boundary Objective)目标,如图所示,就是用was、to两个token去预测an American football game。作者解释说SBO目标,有助于模型在boundary token存储到span-lvel的信息,或者换句话说,作者希望span的左右两边结尾能更好地总结span的内容。

 

去掉NSP目标:作者认为两个原因,第一个原因去掉NSP目标让模型能学更长的依赖(如BERT,假如两个segment是从两个文档抽取的,可以认为512个token里面256个token是文档1的,另外256个token是文档2的,那其实能学到的最长文档依赖也就256,假如去掉它,512个token都是来自同一个文档,那模型能学到的最长依赖就是512),第二个原因,两个来自不同文档的片段会造成很大的噪声干扰。

 

消融实验

 

比较了Masking的策略,包括

 

 

Subword Tokens:同原生BERT一样,随机选token进行mask

 

Whole Words:同第二版BERT一样,采用whole word masking;

 

Named Entities:一半是whole word masking,一半是实体词,直到15%的token被mask;

 

Noun Phrases:一半是whole word masking,一半是名词短语,直到15%的token被mask;

 

Geometric Spans:即SpanBERT。

 

 

 

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

 

辅助函数

 

 

从实验结果可以看到,去到NSP任务,采样的时候从单个文档得到segment,增加SBO任务都能带来效果的提升。

 

MPNet

 

论文全称及链接:《MPNet: Masked and Permuted Pre-training for Language Understanding》 [2]

 

 

论文的开头,就直接指出BERT的Output Dependency缺点和XLNet的Input Consistency缺点,

 

Output Dependency:BERT被mask掉的token之间是相互独立的,在预测的时候并没有利用到之间的关系。举个论文里的例子,【The, task, is, sentence, classification】,假如sentence、classification是两个被mask的token,在预测classification时,我们是不能利用上sentence的信息的,然而,假如给出前一个token为sentence的情况下,模型能更好地预测当前token为classifcation。

 

Input Consistency:解决Output Dependency的方法就是采用像XLNet这种PLM(permutation language model)。但PLM也有问题,当预测当前token时,PLM是没有其它待预测token的位置信息的,拿上面的例子举例,当模型开始预测sentence classification前,PLM是不知道有两个待预测词的,作者把PLM的这种缺陷称为Input Consistency问题,因为在实际下游任务中,输入时,是能知道所有token的内容和位置信息的。

 

这里吐槽一下,Input Consistency在大部分论文里不应该是BERT的问题吗?因为BERT的输入带有【MASK】 token,但在下游任务时,输入是没有【MASK】 token的,但在这篇论文里反正成为了PLM的问题,当然,PLM也有这种问题,但感觉没有BERT的那幺严重。。。

 

进一步的,作者把BERT和PLM都放入到一个统一的架构中来,如下图所示,

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

 

 

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

 

消融实验

 

去掉position compensation,此时MPNet退化成PLM,效果下降了0.6-2.3个点,证明了position compensation的有效性以及MPNet优于PLM;

 

去掉permutation操作,但采用双向流建模待预测token之间的依赖关系,效果下降了0.5-1.7个点,证明了permutation的有效性;

 

去掉permutation和output dependency,此时MPNet退化成BERT,效果下降0.5-3.7个点,证明了MPNet优于BERT。

 

 

论文全称及链接:《MASS: Masked Sequence to Sequence Pre-training for Language Generation》 [3]

 

MASS主要是弥补BERT对于NLG任务的不足,这一类对于NLG任务的优化,大部分采用的是encoder-doceder的架构,因为这种架构天然适合于作生成任务。

 

MASS也不例如,采用的同样是encoder-decoder架构。

 

任务是「给定一个句子,从里面抽取一个片段,encoder端输入被抽取片段后的句子,docoder输出预测该片段」。

 

具体的如下图所示,图中为句子序列,从里面抽取出片段(或者说把它们mask掉),encoder的输出端变成,decoder的输出目标就是被抽取的片段,注意哦, 「decoder的输入端是不包括没被mask的token的哦」 。

 

 

作者对这任务作了很漂亮的解释

 

只预测被mask的token,而不是预测出原序列,可以让encoder端更好地学习到unmasked的token,同时能让decoder端从encoder端提取更有用的信息;

 

我个人理解是,假如现在decoder要预测的是完整序列,那当预测时,模型能看到decoder之前预测的token,即,但模型看不到,这样的好处是,鼓励模型从encoder端提取有用的信息,而不是过分关注于docoder端之前预测出的token对当前token的影响

 

抽取一个片段而不是抽取离散的token,可以让模型学习到更好的语言模型建模能力,也即更适用于NLG任务。

 

作者还比较了当mask片段的长度不同的,MASS就变成我们所熟悉的模型。如当被mask的片段长度时,MASS变成成BERT,当(m为句子序列长度),MASS变成了GPT,如下图所示。

 

 

 

消融实验

 

Study of Dfferent k:就是被mask的fragment长度为原序列的百分之多少比较好,作者的实验证明,50%是最好的。就是假如一个句子有100个token,最好选择连续的50个token作为待预测的fragment。

 

Ablation Study of MASS:作了两个比较实验,证明MASS预训练任务的有效性

 

 

Discrete:对离散的token进行mask,而不是连续的span;

 

feed:decoder的输入端是原句子序列,而不只是fragment。

 

 

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

 

 

论文全称及链接:《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》 [4]

 

同MASS一样,同样是为了优化NLG任务,所以采用的是encoder-decoder架构,整体思路分两步:

 

用一个任意的noising function去破坏原句子序列;

 

decoder端目标是重构原句子序列。

 

如下图所示,(a)和(b)分别是BERT和GPT的预训练目标,(c)是BART的预训练目标,对原序列ABCDE进行噪声处理,这里采用了shuffle和token infilling。

 

 

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

 

Token Masking:同BERT一样,随机挑选一些token,然后用【MASK】代替;

 

Token Deletion:直接删掉某些token;

 

Text Infilling:对一段连续的span进行mask,与SpanBERT不同的是,这里采用泊松分布决定Span的长度,其次, 「连续的Span只会用一个【MASK】进行代替,作者解释是这样有利于模型学会预测这个Span有多少个token」 ;

 

Sentence Permutation:打乱句子的顺序;

 

Document Rotation:反转整个文档。

 

 

作者经过实验,最后采用的是Text Infilling和Sentence Permutation相结合。

 

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

 

一起交流

想和你一起学习进步!『 NewBeeNLP』 目前已经建立了多个不同方向交流群( 机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 /  等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要 备注信息 才能通过)

 

 

本文参考资料

[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

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注