Bert不完全手冊2. Bert不能做NLG?MASS/UNILM/BART
Bert通過雙向LM處理語言理解問題,GPT則通過單向LM解決生成問題,那如果既想擁有BERT的雙向理解能力,又想做生成嘞?成年人才不要做選擇!這類需求,主要包括seq2seq中生成對輸入有強依賴的場景,例如翻譯,生成式問答,文本摘要等等
最初Transformer的Encoder+Deocder結構是在機器翻譯領域,Encoder的部分通過雙向LM來抽取輸入的全部上下文資訊,Decoder通過單向LM在Encoder抽取資訊的基礎上完成生成任務。但後續的預訓練模型,Bert和GPT各自選取了Transformer的一部分來實現各自的目標。Bert只用了Encoder,核心是基於AutoEncoding reconstruction loss的雙向LM,適用於NLU任務。GPT只用了Decoder,核心是基於AutoRegression perplexity loss的單向語言模型,適用於NLG任務。那想要兼顧雙向理解和生成能力,就要探索如何能讓AE和AR在訓練過程進行夢幻聯動,以下分別介紹3種不同的方案
UNILM 1.0
UNILM完美詮釋了MASK在手,要啥都有的極簡設計原理。通過三種不同的attention MASK,使用Multitask的訓練方式在相同的Transformer backbone裡面實現了三種任務的融合,分別是雙向LM(BERT),單向LM(GPT),seq2seqLM(transformer)。管你是Encoder還是Decoder本質只是Attention計算中可見資訊的差異,那調整MASK就完事了~
預訓練任務
UNILM的預訓練任務,都是基於AE的reconstruction任務,和Bert相同的是,都是隨機MASK15%的token,其中80%會被MASK替換,10%保留原始token,10%隨機token。不同的是UNILM在80%的情況下會MASK1個token,剩餘情況下會隨機遮蓋bigran或者trigram。
那同樣是AE,UNILM是如何做到學到AR相關的資訊的呢?這和UNILM的訓練方式有關,它採用了Multitask的訓練方式,在一個batch的樣本中,採用三種不同的attention mask,讓相同的模型參數分別學習單向,雙向,seq2seq的語言資訊,包括
- \(\frac{1}{3}\)的時間訓練雙向LM: 和BERT相同使用self-attention MASK,並且在以上的MLM任務上,同時也加入了NSP任務
- \(\frac{1}{3}\)訓練seq2seq LM:segment1使用self-attention MASK, segment2使用Future MASK,同樣是對MASK進行還原
- \(\frac{1}{6}\)的時間訓練從左->右單向LM,\(\frac{1}{6}\)的時間訓練從右->左單向LM:只不過這裡沒有使用對整個sequence進行還原的perplexity loss,而同樣是對MASK進行還原,只不過只使用單向資訊
這裡感覺雖然UNLIM實現了單向的資訊傳遞,但和AR之間還是有本質差異的,因為並不是對連續token進行遞歸預測,而依舊條件獨立的對MASK token進行還原,雖然引入了bigram和trigram的MASK,但是效果有限,感覺這裡限制了生成的效果。所以有沒有可能在共享參數的前提下,直接引入perplexity loss進行訓練呢?🤔️🤔️🤔️
針對以上三種任務的輸入略有差異,其中單向LM只有1個segment 」[SOS] s1 [EOS]「,雙向LM和seq2seq LM都是2個segment 「[SOS] s1 [EOS] s2 [EOS]」
這裡會發現以上EOS token,除了和BERT相同起到分割兩個segment的作用,在單向LM任務中還會起到停止符的作用,所以其實在不同LM任務中EOS的作用不同,所以這裡作者在不同的LM任務中採用了不同的segment Embedding。
預訓練階段,UNILM的參數使用了Bert Large進行初始化,在以上的三個任務重參數是共享的
下游任務Finetune
在下游fientune中,針對NLU任務,遷移方式和Bert相同,例如對分類任務,UNILM會輸出[SOS]token對應的Embedding,後接softmax。針對NLG任務,會隨機MASK第二個segment中的token進行還原。
整體效果GLUE Benchmark比Bert略好一丟丟,在生成式問答和摘要上提升更大。哈哈具體數值就不貼了,因為馬上就要被下面會提到的BART超越,可以直接在下面BART的對比結果中看UNILM的效果了。。。
MASS
MASS則完美詮釋了世界是個圈,Bert和GPT費勁吧啦把Encoder和Decoder拆開,MASS又給拼了回來。所以MASS的模型結構就是經典的Encoder+Decoder的Transformer。MASS通過改良MASK機制和訓練目標增強了Encoder和Decoder在預訓練階段的交互
預訓練任務
MASS創新了預訓練目標,結合了生成和掩碼。在Encoder側隨機選取連續K個token,這裡k是MASS的超參數,Decoder側採用互補MASK,遮蓋所有在Encoder側未遮蓋的token,使用Auto Regression遞歸預測這k個token。這種互補掩碼的方式,有效增強了Decoder對Encoder的資訊依賴,避免Decoder直接依賴上文資訊進行預測,進而也推動了Encoder部分去學習上下文雙向資訊。
都是對連續token進行MASK,和SpanBert不同的是MASS採用的是固定長度,作者測試了k的不同取值對模型效果的影響。整體上K的取值是總長度的50%左右的時候效果最好。哈哈其實感覺如果用一個均值=50%的分布來取樣,可能也有效果提升???
有意思的點在於,這裡k的取值其實反映了MASS對Bert和GPT的融合權重,當K=1的時候,MASS其實等同於每次只MASK1個token的BERT模型,這時Decoder全部被MASK沒有任何資訊,而Encoder包含除MASK的一個token之外其餘上下文資訊。當K=seq_len的時候,MASS其實等同於GPT,這時Encoder沒有任何資訊,而Decoder部分就是傳統的AR。在開頭看到MASS的掩碼還覺得有些摸不著頭腦,看到這裡感覺如果從loss function融合的角度來看,MASS的預訓練目標其實可以類比Loss融合,和Huber Loss融合RMSE和MAE,以及Generalized Cross Entropy融合Cross Entropy和MAE,有著同一個世界同一個味道~~~
預訓練和遷移細節這裡就不多說了,因為MASS本身是為NMT翻譯任務設計的,所以不管是評估還是訓練都是for翻譯任務的,和其他兩個模型無法直接比較。不過AR和AE的融合思路設計的很巧妙,而且也不局限於NMT任務
BART
BART的模型結構和MASS相同也是Encoder+Decoder的配置,但是和MASS探索的方向不同,BART主要針對reconstruction任務中對輸入資訊擾動方式的探索,BERT使用的MASK本身也是一種擾動方式。
預訓練任務
BART的預訓練目標是reconstruction loss,通過對輸入進行擾動,Encoder的輸入是corrupted Sentence,然後Decoder的部分負責還原真實文本,這裡只對Decoder的預測計算reconstruction loss。於是當Encoder側的擾動是刪除全部token時,BART->GPT
BART訓練策略的設計和MASS相比,對Encoder和Decoder的資訊交互要求並不嚴格,如果Deocder依賴單向資訊就能很好完成任務的話,感覺Encoder部分資訊會不會變得不太重要???
擾動方式作者嘗試了以下方案
- Token Masking: 和Bert一樣對token進行隨機Mask,模型需要判斷根據上下文還原MASK部分的語義資訊
- Token Deletion:隨機刪除部分token,和MASK的區別在於模型需要去判斷哪些位置丟失了資訊
- Token Infilling:隨機取樣0~n個token,用一個MASK進行替換,模型除了學習MASKing部分缺失的語義,還要學習缺失token的數量,其實一定程度上是MASKing和Deletion的組合
- Token Rotation:對句子順序進行rotate
- Token Shuffling :對句子順序進行隨機shuffle
整體評估如下,rotation和shuffling的表現最差,這個也在預料之中如果對所有語料都完全改變順序,模型其實就不知道正常文本順序是什麼樣子的了。而Deletion比Masking在生成任務上的表現更好,一定程度上是Deletion推進模型更多focus在位置資訊上,綜合各個任務單一擾動機制,Infilling的效果最優。最終作者選擇了Infilling+Shuffling相結合的擾動機制,Infilling會MASK30%的token,並同時對整個句子進行隨機打亂。
作者還對比了不同的預訓練目標的影響,注意這裡和原始的模型存在出入,作者只是使用了訓練目標的部分,得到以下幾點結論
- 不同訓練目標在不同任務下差異較大,多數任務上BART表現略好
- 在生成任務上,尤其是輸入和輸出關聯性較低的ELI5,單向語言模型一騎絕塵
- 對閱讀理解,推理任務,MASK策略對應的雙向語言模型表現顯著更好
訓練細節參考了Roberta,更大的Batch Size訓練更多steps,不過因為BART本身是Encoder+Decoder所以參數量級基本上翻了一倍
下游任務遷移
BART同樣可以靈活遷移到下游包括分類,序列標註,文本生成等諸多任務,微調方式各有不同。
- 分類任務:Encoder輸入,Decoder遞歸,用BART在Decoder的末尾加入了[END]token的Embedding作為文本表徵
- 序列標註任務:Encoder輸入,Decoder每個位置的輸出作為序列標註任務的輸入
- 生成任務:Encoder輸入,直接使用Decoder部分進行遞歸生成
- 翻譯任務:翻譯任務略有差異,是把BART的Embedding輸入替換成一個隨機初始化的Encoder,這個Encoder使得翻譯任務可以使用和原始BART模型Vocab不同的輸入。當然random init的部分需要先進行獨立訓練,再和BART一同已經微調。不過感覺這部分的調整其實和BART沒啥非常緊密的聯繫~
整體效果,在生成任務包括摘要生成和生成式問答上BART的效果都要顯著超過之前的模型。
再來關注下閱讀理解任務,整體上BART和Roberta效果不相上下,所以BART在生成能力上的提高並沒有以犧牲雙向理解能力為代價
效果上BART自然是力壓群雄,但是Encoder+Decoder的設計不管是訓練還是推理都比較沉重,相比之下UNILM共享參數的設計感覺更加巧妙,所以如果能進一步在UNILM上提升效果,感覺就完美了~~
Ref
- MASS: Masked Sequence to Sequence Pre-training for Language Generation, 2019
- UNLIM, Unified Language Model Pre-training for Natural Language Understanding and Generation, 2019
- BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension, 2019
- 蘇劍林. (Sep. 18, 2019). 《從語言模型到Seq2Seq:Transformer如戲,全靠Mask 》[Blog post]. Retrieved from //spaces.ac.cn/archives/6933
- //www.jiqizhixin.com/articles/2020-09-24