1. 程式人生 > >文獻閱讀筆記—BERT: Pretraining of Deep Bidirectional Transformers for Language Understanding

文獻閱讀筆記—BERT: Pretraining of Deep Bidirectional Transformers for Language Understanding

這篇paper對細節描述的很清楚,建議直接看原文!!!建議直接看原文!!!

一、問題描述

nlp任務一般分為兩類:

        sentence-level:預測句子間的關係,如natural language inference和paraphrasing。

        token-level:需要在token層面上生成輸出,如named entity recognition和SQuAD question answering。

遷移學習在nlp的應用主要是採用無標註資料預訓練language representation,分為兩類:

        feature-based:

將預訓練的language representation用作額外的輸入和原詞向量拼接在一起,不參與整個task模型的fine-tuning,不同的task有自己的模型,如ELMO

        fine-tuning:在預訓練的language representation後面加上一層全連線和softmax組成分類器,用有標註資料fine-tuning整個分類器,這樣的話不同task都可以使用類似的模型,不同的部分比較少,如openAI GPT

這篇google的神作,語言模型是採用Transformer encoder(openAI GPT使用的是Transformer decoder,所以只能從左到右),引入masked LM促成雙向深層語言模型(每一層都可以利用雙向context,而不像

ELMO一樣只是在最後一層concat雙向context),採用雙向LM對token-level的任務很有效使用了next sentence prediction模擬以句子對為輸入的情況。並且在sentence-level和token-level共11個問題上做了實驗。

二、模型

1. 輸入詞向量(input representation)

 和openAI GPT類似處理輸入句子之間的連線,注意起始這個[CLS]的最後一層hidden state,在分類任務中是用這個hidden state作為整個輸入的表示輸入到全連線層的。

圖中token embedding就是普通的詞向量啦,segment embedding是句子A中所有token用的是學到的句子A的embedding(這個具體是用什麼恐怕要看程式碼),句子B中所有token用的是學到的句子B的embedding,position embedding就是token位於句子的第幾個單詞。將這三種embedding加起來即可。

2. 雙向語言模型(masked LM)

隨機將輸入中15%的token換成[mask]這個字元,相應的也使用這個字元的詞向量,在這個字元的最後一層接上全連線+softmax預測原本的token的概率,使這個概率最大(這就是語言模型啦)。只需預測換成[mask]的token,不用像ELMO和openAI GPT一樣預測所有token。但是這樣的話在inference的時候[mask]從來不會出現在輸入中,這樣就不同分佈了,怎麼辦呢?

80%的時間將token換成[mask],10%的時間換成其他某個token,10%還是這個token。

那這樣需要更多的迭代會收斂嗎?看下面的實驗結果。

至於為什麼transformer encoder可以利用雙向context,而transformer decoder不行,看attention is all you need

3. 下一個句子預測(next sentence prediction)

從一篇文件中,找出句子對,其中50%一個句子是另一個句子的下一句,50%不是。就用語言模型預測句子對是不是下一個這種關係。這樣語言模型可以學到句子間的關係。

 4. 最後整個模型的fine-tuning

如上圖所示,藍色的框是語言模型,如圖a、b,對於分類模型,將[CLS]的最後一層hidden state,作為整個input的表示輸入到全連線層,後面跟softmax輸出屬於某一類的概率。如圖c,對於需要輸出答案的start和end位置,是token level,預測start時,將所有paragraph token的最後一層hidden state送入全連線層,得到一個值,比如共有500個token,那麼就有500個值,將這500個值送入softmax輸出start屬於某一token的概率,end也是一樣預測,只是end的全連線和start的全連線權重不共享。在inference時,因為end的預測沒有依賴start,那麼需設一個限制end一定要在start之後。如圖d,命名實體識別,也是token level,將每個token的最後一層hidden state送入全連線層+softmax,得到輸入某個tag的概率,權重共享。

三、實驗

在11個task上效果都非常好,並且驗證了雙向模型的有效性以及transformer相對於lstm的優越性。

模型越深,效果越好(即使模型以及很深了,效果依然有提升)。

masked 語言模型雖然收斂略微慢一點點,但是效果好很多。

 BERT像ELMO一樣用作feature效果也比較好(也就是說語言模型不參與最後整個task模型的fine-tuning或者只有少數層參與)

最後的fine-tining對於task資料較少的不友好,資料量大的對超引數的變化不太敏感。