安排!微軟UniLM 2.0 淺讀
寫在前面
本文首發於微信公眾號:NewBeeNLP
刷arxiv看到了之前比較喜歡的一個工作UNILM的續集,這不得提高優先順序先來品品(雖然還有一大堆TODO)。關於UNILM 1。0 在之前的文章中已經有介紹了,見站在BERT肩膀上的NLP新秀們(PART II),這種NLU和NLG簡潔統一的框架真的是非常贊!
論文地址:
https://
arxiv。org/abs/2002。1280
4
原始碼地址:
https://
github。com/microsoft/un
ilm
目前NLP預訓練模型主要採取兩大類預訓練目標來進行語言模型訓練:Auto-encoding(如BERT等)和Auto-regressive(如GPT/XLNEet等)。如下圖,簡單來說Auto-encoding就是類似BERT那樣的透過[MASK]標記來獲取前向和後向的資訊;而Auto-regressive呢就是自左向右或者自右向左地對文字進行語言建模,它的好處是對生成任務有天然的優勢,缺點呢就是隻能得到單向的資訊不能同時利用上下文的資訊。
而本文使用的
Partially Auto-Regressive
則可以認為是對
Auto-regressive
的擴充套件,將token級別擴充套件到了span級別,並且不限制方向性。
模型預訓練
UNILM 2。0的模型框架沒有什麼好說的,骨架網路就是Transformer,跟主流的都差不多,論文的亮點在於預訓練目標。在一個統一的BERT式的網路基礎上,設計了兩種預訓練目標,
「自編碼」
和
「部分自迴歸」
,分別對應雙向語言模型和seq2seq語言模型, 然後進行聯合訓練:
自編碼
上圖中左半部分,自編碼(Auto Encoding,AE)就像BERT一樣,利用已知的上下文資訊來單獨地計算被MASK掉的token的機率。
其中,
為被mask詞集合,
表示出去mask詞集的其他詞,
則表示被mask詞,
表示訓練語料集合。
部分自迴歸
上圖中右半部分,部分自迴歸(Partially AutoRegressive,PAR )在每一步因式分解的時候可以選擇預測單個token或多個tokens(為連續的span),當所有步均選擇預測一個token時,則會變為自迴歸模式。
其中,
表示第
步需要預測的token,
表示還沒有預測出的詞(每一步都不一樣)。所以部分自迴歸預訓練損失可以表示為:
其中,
是分解的期望,但是在預訓練中只隨機採用一種分解。
關於Mask的策略
對於輸入,隨機取樣15%作為mask集合,這其中40%的機率mask掉長度為2到6的n-gram連續span,60%的機率mask單獨一個token。
偽掩碼語言模型
正如前面提到的,如果要用部分自迴歸的話,每一步預測時可用的tokens是不一樣的,因此如果直接使原始BERT中的MLM,必須為每個分解步驟構建一個新的Cloze例項,這將導致部分自迴歸的預訓練不可行。
為此提出了一種
「Pseudo-Masked LM(PMLM)」
的訓練方式,簡單來說就是對masked token額外新增一個帶對應位置編碼資訊的標記[P],用於在部分自迴歸預訓練時預測的placeholder。
舉個栗子,對於第一幅圖中的最後一個例子,即
4,5——>2
,下圖為PMLM進行部分自迴歸預測的流程。
Step 1:透過計算
來同時 預測
和
,為了避免資訊洩露,這一步attend的元素為
以及
和
。
Step 2:透過計算
來預測
,這一步可以獲取上一步得出的結果,即這一步attend的元素為
以及
具體實現的話,基本思想還是跟UNILM 1。0一樣的,即
Self-Attention Masks
,來控制計算某一個token時其他元素可以attend的許可權。以上圖為例,其Self-Attention Masks矩陣為,
可以看到,[M]和已知的
可以被全域性attend。[M] 對AE 部分來說,因為是bidirectional,所以互相都允許attend;對PAR部分,可以提供”完整“的context(比如對P4/P5來說,就可以看到M2),這樣避免了之前autoregressive不能看future context,導致一些位置被完全masked。
模型輸入
在預訓練階段,模型輸入形式為:
[SOS] S1 [EOS] S2 [EOS]
,其中S1和S2是連續的文字,[SOS] 和[EOS] 是表示文字起始以及結束的特殊標記,輸入token的表示是word embedding, absolute position embedding以及 segment embedding的加和。
在微調階段,不同任務的輸入形式不同:
對於NLU任務,輸入為
“[SOS] TEXT [EOS]
,然後用
[SOS]
作為text的表示用於下游任務;
對於NLG任務,輸入為
[SOS] SRC [EOS] TGT [EOS]
,一旦解碼出
[EOS]
,則停止解碼,解碼階段使用beam search;
實驗部分
論文中也展示了很多具體實驗,QA、GLUE、Abstractive Summarization、Question Generation,就不展開,粗瞄一眼效果都很不錯的樣子,感興趣的自行閱讀~
消融性實驗比較有趣,作者在多個任務上對UNILN2。0的元件進行拆解,各模型表現如下表。
隨便嘮嘮
UNILM1。0剛出來的時候同期還有一個MASS,也是微軟的,MASS的做法是顯式地設計一個Encoder和一個Decoder來做seq2seq生成。而UNILM1。0是使用了一個更為優雅的設計,即透過attention mask矩陣來達到在一個單獨的BERT中實現seq2seq任務,不顯式區分encoder和decoder。
UNILM2。0是對1。0中的seq2seq預訓練任務進行了最佳化,引入了部分自迴歸訓練目標,可能是受了XLNet的啟發,PMLM中的特殊標記[P]的作用有點類似於XLNet中的雙流自注意力機制。
「來自論文作者董神
@董力
」
:有點兒 三流注意力(真實、mask、pseudo mask)的意思,motivation就是最大限度重用計算的hidden states,來實現 unified language model pretraining 裡的 bidirectional AE (bert) 和 seq2seq PAR (bart)
另外在預訓練過程中,輸入文字的上下文表示會被AE和PAR重複利用,避免了無關計算。
更多關於NLP的乾貨資源,歡迎關注
微信公眾號NewBeeNLP
一起交流!