MASS: 一统GPT和BERT的Seq to Seq框架

MASS的功能

MASS的全名叫Masked Sequence to Sequence Pre-training for Language Generation,这个其实已经隐含了和GPT及BERT(前文有介绍)的关系: "Masked"对应了BERT原创的"Masked LM"算法,"Language Generation"指的是GPT用到的Language Modeling。
而"Sequence to Sequence"算是点明了主题:这是一个Seq2Seq的框架。

做Seq2Seq这么一个框架可以说是针对了GPT和BERT的痛点:在序列到序列(Seq2Seq)的语言生成任务中,二者都需要分别训练编码器和解码器,这导致在Seq2Seq任务中效果最好的的编码器-注意力-解码器结构没有被联合训练。因此GPT和BERT在这类任务中只能达到次优效果。

MASS非常巧妙的解决了这个问题,它利用Seq2Seq的结构同时把GPT和BERT两种不同的pretrain方法容纳在一个计算框架之下。这样做的好处有两方面:

  1. GPT和BERT可以提供强大的pretrain的模型,这有利于下游的transfer learning的任务。
  2. Seq2Seq保证了高质量的完成语言生成任务。

粗略的用一句话表示:MASS是利用GPT+BERT预训练出的Seq2Seq模型。

GPT和BERT

最好还是先介绍一下2018的双子星GPT和BERT。放在一起比较一下吧。

比较

BERT原论文反复引用了GPT,应该说BERT从GPT中吸取了很多营养。它们最大的共同点有两点:其一是都用transformer。因为二者的成功,相信transformer在NLP领域会取代(bi)LSTM成为最受欢迎的模型结构。LSTM因其在序列结构上的优点(包含long distance dependency的提取能力,以及对有序性的自动包含等等),transformer通过(multi-head)self-attention+positional embedding全部继承了下来。而且因为其摒弃了LSTM的序列结构,并没有并行能力上的限制。

去年的其他一些同一方向上的好工作比如ELMo(前文介绍)和ULMFiT(介绍)利用了(bi)LSTM,由于GPT和BERT的背书,今后的工作中恐怕transformer会成为当仁不让的主流模型。

第二个共同点是大数据加超大模型。具体的数据不再赘述了,原论文里都有。我觉得能够使大数据加大模型训练成为可能,得益于两点,一是计算能力的不断提升,另一个在于足够复杂的模型(特别是transformer)能够消化巨大的数据。

再看一下不同的地方。最大的不同点应该是pretrain的方法。GPT用的是LM, 而BERT用的是Masked LM + Next Sentence。这个不同直接导致在做下游的任务时,GPT需要针对句子对类型的任务(句子相似性,QA等等)做多次编码,因为它的预训练方式导致它不能理解多个句子并存作为输入的情况。对照看一下GPT论文中的配图:
在这里插入图片描述
BERT因为它的Next Sentence的预训练方法,它能够理解作为输入的句子对。原论文关于输入的图示:
在这里插入图片描述

它的jointly-trainining得到的Segment Embeddings以及token [SEP]都能够帮助模型理解和区别不同的句子。所以在针对下游任务时,BERT可以自然的处理句子对类型。如下图:
在这里插入图片描述
简单说,对BERT来讲,一次编码就可以解决句子对问题。

痛点

有很多文本生成类的任务比如machine translation,text summarization,conversational response generation都依赖一个Sequence to Sequence的框架。对于GPT和BERT这样的结构来讲,充其量只能做一个编码器或者解码器,不能支撑一个Seq2Seq的结构。除非做两次预训练,一次做编码器,另一次做解码器。但这样做编码-注意力-解码的联合训练机制就不存在了。MASS就是针对这个问题而提出的方案。

MASS模型

模型解释

MASS希望能够兼顾两点:

  1. 仍然采取文本生成类任务表现最优秀的编码-注意力-解码模型。
  2. 为了在少样本甚至零样本的任务中取得好成绩,也为了表现出很好的迁移学习的能力,同时容纳GPT和 BERT的预训练方式。

一图顶万言:
在这里插入图片描述

这是MASS的模型框架。Encoder和Decoder都利用transformer作为基础模型。Encoder端有连续的几个"_"代表被masked输入token [M]。直觉上看,这有点像BERT里的Masked LM, 因为整体来讲,在Decoder那一段我们希望利用两边的信息预测被Masked的部分(即图中的利用x1,x2和x7,x8来预测x3,x4,x5,x6)。唯一的区别在于BERT仅仅是利用两端的信息预测一个Masked token,这里是在预测一连串的tokens。

注意,在这个框架中“两边的信息”来自于Encoder,而不是Decoder。因为我们看到在Decoder那一端x1,x2,x7,x8都是Masked。这样做的好处体现在编码和解码两个方面:

  1. MASS迫使Encoder学会对Unmasked部分进行很好的理解和编码,以帮助Decoder进行正确的预测。
  2. 为进行正确的预测,Decoder会更加依赖于来自于Encoder的输入,而这导致了更好的Encoder-Attention-Decoder联合训练。

在k=1和k=m(句子输入长度)时,我们可以观察到BERT的Unmaksed LM和GPT的LM在MASS上分别“复活”:

在这里插入图片描述

k=1的时候,如前所述,本质上正是BERT的Maksed LM。
k=m的时候,Encoder那一段没有任何实质性的信息,而Decoder那一端回归到标准的LM模型!因为transformer+LM恰恰是GPT的预训练方式。

可以想象,k在1和m之间的时候称为GPT和BERT的过渡形式。如下表:
在这里插入图片描述

思想根源

这个框架非常漂亮的整合了GPT和BERT最核心的预训练方法,其实验(后面会略述)结果也达到顶尖水准。我个人觉得我今年看到最好的文章。如此优美的做法,如果结果不好反而会让人觉得说不过去。:)

不过,如果我们切换一下角度,单从文本生成问题比如machine translation的研究看,可以观察到一些相似的思想的闪光。某种程度上,如果我们把这里Encoder的输入看成是一个corrupted版本的对输入的抽样的话,MASS其实可以看成是一个Denosing Auto-Encoder。

追述一下Lample在其PBSMT(曾经的Unsupervised NMT的SOTA,现在被MASS超过)实践过的一个做法。

为了在无监督的情况下做machine translation, 文章希望用encoder-decoder的框架做LM(注意这个需要是和MASS一样的)。具体方法就是利用denoising auto-encoding:

L l m = E x S [ log P s s ( x C ( x ) ) ] + E y T [ log P t t ( y C ( y ) ) ] L^{lm} = E_{x\sim S}[-\log P_{s\rightarrow s}(x|C(x))] + E_{y\sim T}[-\log P_{t\rightarrow t}(y|C(y))]

C C 是一个噪音模型,一般可以通过drop某些token或者shuffle句子来达到目的。 P s s P_{s\rightarrow s} P t t P_{t\rightarrow t} 分别指在源语言和目标语言领域的"翻译模型"。解释一下:这个翻译模型也包含两部分即encoder和decoder,特殊之处在于其输入和输出都是同样一种语言(即汉语译汉语,英语译英语),为了避免在attention module的强力加持下,产生逐字照搬的记忆式翻译的情况,这里故意使用了噪音模型 C C

如果在这里我们只考虑一种语言,而且规定噪音模型 C C 只能随机的drop掉句子中连续的tokens,那么这个方法会变得很接近MASS的做法。不同地方在于在DAE的decoder那一端不存在任何masked tokens。有趣的是,论文也有意在实验中实现了DAE(denoising auto-encoder)的做法,并进行了比较。Anyways,Seq2Seq的框架下MASS采取了这样相似的做法,不算很奇怪。

实验

限于篇幅这里介绍一下MASS在Unsupervised NMT里的表现。

在预训练的数据方面,MASS用了WMT News Crawl datasets的monolingual data, 具体有英法德三国语言各50M的句子,也包含了2.9M的低资源语言罗马尼亚语。经过试验表明,k的长度大概为50%的句子长度时效果最好。

在Unsupervised NMT任务中, 模型利用了同样的monolingual data来做fine tuning。具体的做法还是推荐阅读经典论文PBSMT,以后有机会也可以介绍一下这篇论文。

下表是一些实验结果:
在这里插入图片描述另外一个有趣的实验是使用不同的encoder和decoder,比如利用BERT里的Unmaske LM来预训练encoder,用LM来预训练decoder。再比如直接用前文提到的DAE即denoising auto-encoder来预训练encoder+decoder。下面是实验结果:
在这里插入图片描述不出意外MASS的效果要好。作者的解释令人信服:DAE的decoder可以把整个句子都作为输入来预测下一个token,不存在从encder那里提取有用的表征的压力。这导致模型的信息提取能力相对MASS较弱。

结语

MASS很好的把GPT和BERT的训练方法内嵌在了Seq2Seq模型里。实验效果上也超过了过去的SOTA。这也是一次"跨领域"(其实这个领域跨度不算大,但是方法的融合度很高。) 不同方法的成功结合。

关注公众号《没啥深度》有关自然语言处理的深度学习应用,偶尔也有关强化学习。
这里写图片描述