【NLP】UNILM粗讀

上週講了一個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

  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。code

然而UNILM和MASS沒有作相同的實驗,沒法直接對比,我的以爲在簡單些的生成式任務中能夠用UNILM,但較難的翻譯任務,尤爲是缺乏訓練語料的狀況下,MASS應該更合適。orm


端午快樂!cdn

相關文章
相關標籤/搜索