上周讲了一个MASS模型,我以为挺好的,参考BERT提出了新的Seq2Seq任务的预训练方法,今天要讲的是另外一个BERT-based生成模型-UNILM,也是微软出的。学习
论文连接 优化
UNILM全名Unified Language Model Pre-training for Natural Language Understanding and Generation,其实也是提出了一种预训练方法,并且很简洁,直接复用BERT的结构和参数就好。NLU直接用BERT作,NLG直接把BERT的 S1 [SEP] S2 当成 encoder-decoder,虽然没有那个结构,可是心中有那个思想。编码
1. 模型结构
做者很巧妙的抓住了MASK这个点,认为不论是什么LM,本质都是在训练时能获取到什么信息,在实现层面其实就是mask什么输入的问题。因此彻底能够把Seq2Seq LM整合到BERT里,在 S1 [SEP] S2 [SEP] 中,S1用encoder编码,S2中的token只能获取S1和本身以前的token信息,如上图最下面那个mask矩阵(其实图比我说的清楚)。spa
基本原理很好懂,主要是在论文里细看一下训练时的细节。翻译
2. Pre-training
Input representation:这里和BERT同样使用了三个Embedding,可是参考WordPiece把token都处理成了subword,加强了生成模型的表现能力。另外,做者强调了segment embedding能够帮助区分不一样的LM。
Transformer:没有变化,只是强调了会经过不一样的Mask矩阵控制LM任务。
单向LM:只输入单句。其余单向LM是计算每个token预测的损失,而做者依旧采用Masked LM的思路,只计算Mask的token损失。我的认为是因为BERT为了实现BiLM,在预训练时都是作完形填空(给[MASK]预测当前应有的编码),显然不适合给x1预测x2的情形。所以为了统一单向LM和BiLM的结构,采用了Masked left-to-right LM这种方式。
Seq2Seq LM:输入两句。第一句采用BiLM的编码方式,第二句采用单向LM的方式。同时训练encoder(BiLM)和decoder(Uni-LM)。处理输入时一样也是随机mask掉一些token。
一样包含了Next sentence任务。
训练时,在一个batch里,优化目标的分配是1/3的时间采用BiLM和Next sentence,1/3的时间采用Seq2Seq LM,1/6的时间分别给从左到右和从右到左的LM。这里我没懂具体如何实现的,是一个batch里放不一样的数据?懂得童鞋们说一下~
参数是从BERT-large初始化的。
加Mask的频率和BERT同样,可是对于加Mask,80%的时间随机mask一个,20%时间会mask一个bigram或trigram,增长模型的预测能力。
3. Fine-tunning
NLU:参考BERT
NLG:在精调期间只mask S2 句子中的token,并且S2的[SEP]也会被随机mask,让模型学习如何中止。
4. 实验
生成式摘要:增长了抽取式摘要做为辅助任务,根据first token预测input sentence是否出如今抽取式数据中。
问答(阅读理解):在抽取式任务SQuAD和CoQA上都超越了BERT;在生成式问答上表现尤为好,比2018年的一个PGNet提高了小40个点 。
问题生成:利用生成的问题,把SQuAD结果提高了4个点。
GLUE:在大部分任务上>=BERT,最终提高了0.3个点。
5. 总结
UNILM和MASS的目标同样,都是想统一BERT和生成式模型,但我我的认为UNILM更加优雅。首先UNILM的统一方法更加简洁,从mask矩阵的角度出发改进,而MASS仍是把BERT往Seq2Seq的结构改了,再作其余任务时只会用到encoder,不像UNILM一个结构作全部事情。UNILM给出了较多的结果,尤为是生成式问答有巨大的提高,并且也保证了整体效果和BERT至关,而MASS没有太注重本身的encoder。code
然而UNILM和MASS没有作相同的实验,没法直接对比,我的以为在简单些的生成式任务中能够用UNILM,但较难的翻译任务,尤为是缺乏训练语料的状况下,MASS应该更合适。orm
端午快乐!cdn