【NLP】文本生成MASS粗读

距离上篇文章又一个月了。。。时光飞逝。。。再次立下一周一篇的flag优化

最近读了一篇专栏文章BERT时代与后时代的NLP,收获颇丰。算是做者的同行,最近也在作相似的东西,可是做者都给总结了起来,让我又从新串了一遍那些思想,查漏补缺。另外最近没怎么追踪前沿,看到做者又列举了两篇我一直关注的transformer系文章,赶忙打出来看了,顺便写篇文章记录下收获。编码

1. MASS模型

MASS的主要贡献是提出一种新的Pre-train seq2seq任务的方法。spa

BERT的成功把nlp带向了pretrain+finetune时代,而对于文本生成任务(机器翻译、文本摘要、生成问答),因为语料对较少,更须要使用pretrain的模型来减小标注代价。翻译

看到这里的读者能够先本身想一下如何pretrain seq2seq的任务。你们首先能想到的估计就是BERT+LM,由于BERT的编码能力比其余BiLM的能力强一些。但这样pretrain的问题就是,若是咱们的语料是unsupervised,就要分开预训练encoder和decoder,可能会致使二者的分布不一致。code

因而MASS的做者就借鉴了Masked LM的思想,只用一句话就让encoder和decoder同时训练。具体作法是mask掉句子的一部分x,再用decoder去预测x,以下图:orm

注意,在经典的seq2seq结构中,decoder的输入都是完整的,而这里只输入应该被预测的token,做者的解释是这样可让decoder依赖于encoder的编码,让二者更好地共同训练。cdn

以后,做者更进一步,竟然把BERT和GPT统一了起来:blog

图a): 可能会有同窗以为decoder不是双向的,无法把encoder和decoder当作BERT,但其实只把encoder当作BERT就能够,decoder看做classifier层。token

图b): 单向LM(GPT),从左到右进行预测,encoder没有给decoder任何信息。get

2. 实验细节

  1. 语言:由于要应用到机器翻译任务,因此预训练模型采用4种语言,做者把四种语言同时进行Byte-Pair Encoding,生成一个60k的词表。在预训练的时候也是同时用四种语言的语料,即一个batch是32*4个句子。
  2. Mask策略:从随机一个位置开始,连续mask掉句子长度50%的tokens(通过实验验证较优)。且参考BERT的策略,80%的时间用[M],10%用随机的token,10%保留原token。
  3. Decoder优化:由于预测的token都是连续的,在训练decoder时能够直接把padding去掉,但要注意保留positional encoding,这样能够节省50%的时间。
  4. 预训练LR=1e-4,NMT的精调LR=1e-4。(感受精调的LR应该小一些吧)

3. 结论

  1. MASS达到了机器翻译的新SOTA
  2. MASS > BERT+LM式的预训练
  3. mask掉连续的token,能够获得更好的语言建模能力(已实验验证)
  4. 只让decoder从encoder侧获取信息,获得的模型效果更好(已实验验证)

整体来说,MASS仍是给我开阔了新的思路(毕竟我没什么思路),其实仔细想这个想法也是不难想出来的,关键仍是要动手去验证,而且花心思去提高效果,细节见英雄。

相关文章
相关标签/搜索