上週講了一個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矩陣(其實圖比我說的清楚)。

基本原理很好懂,主要是在論文裏細看一下訓練時的細節。

2. Pre-training

  1. Input representation:這裡和BERT一樣使用了三個Embedding,但是參考WordPiece把token都處理成了subword,增強了生成模型的表現能力。另外,作者強調了segment embedding可以幫助區分不同的LM。
  2. Transformer:沒有變化,只是強調了會通過不同的Mask矩陣控制LM任務。
  3. 單向LM:只輸入單句。其他單向LM是計算每一個token預測的損失,而作者依舊採用Masked LM的思路,只計算Mask的token損失。個人認為是由於BERT為了實現BiLM,在預訓練時都是做完形填空(給[MASK]預測當前應有的編碼),顯然不適合給x1預測x2的情形。因此為了統一單向LM和BiLM的結構,採用了Masked left-to-right LM這種方式。
  4. Seq2Seq LM:輸入兩句。第一句採用BiLM的編碼方式,第二句採用單向LM的方式。同時訓練encoder(BiLM)和decoder(Uni-LM)。處理輸入時同樣也是隨機mask掉一些token。
  5. 同樣包含了Next sentence任務。
  6. 訓練時,在一個batch裏,優化目標的分配是1/3的時間採用BiLM和Next sentence,1/3的時間採用Seq2Seq LM,1/6的時間分別給從左到右和從右到左的LM。這裡我沒懂具體如何實現的,是一個batch裏放不同的數據?懂得童鞋們說一下~
  7. 參數是從BERT-large初始化的。
  8. 加Mask的頻率和BERT一樣,但是對於加Mask,80%的時間隨機mask一個,20%時間會mask一個bigram或trigram,增加模型的預測能力。

3. Fine-tunning

  1. NLU:參考BERT
  2. NLG:在精調期間只mask S2 句子中的token,而且S2的[SEP]也會被隨機mask,讓模型學習如何停止。

4. 實驗

  1. 生成式摘要:增加了抽取式摘要作為輔助任務,根據first token預測input sentence是否出現在抽取式數據中。
  2. 問答(閱讀理解):在抽取式任務SQuAD和CoQA上都超越了BERT;在生成式問答上表現尤其好,比2018年的一個PGNet提升了小40個點
  3. 問題生成:利用生成的問題,把SQuAD結果提升了4個點。
  4. GLUE:在大部分任務上>=BERT,最終提升了0.3個點。

5. 總結

UNILM和MASS的目標一樣,都是想統一BERT和生成式模型,但我個人認為UNILM更加優雅。首先UNILM的統一方法更加簡潔,從mask矩陣的角度出發改進,而MASS還是把BERT往Seq2Seq的結構改了,再做其他任務時只會用到encoder,不像UNILM一個結構做所有事情。UNILM給出了較多的結果,尤其是生成式問答有巨大的提升,而且也保證了總體效果和BERT相當,而MASS沒有太注重自己的encoder。

然而UNILM和MASS沒有做相同的實驗,無法直接對比,個人覺得在簡單些的生成式任務中可以用UNILM,但較難的翻譯任務,尤其是缺少訓練語料的情況下,MASS應該更合適。

端午快樂!

推薦閱讀:

相關文章