【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仍是給我開闊了新的思路(畢竟我沒什麼思路),其實仔細想這個想法也是不難想出來的,關鍵仍是要動手去驗證,而且花心思去提高效果,細節見英雄。

相關文章
相關標籤/搜索