雙向預訓練語言模型BERT
Google AI Language在2018.10釋出的論文,提出一種預訓練語言模型,在十多個NLP任務中取得了SOTA的效果。
1.現有的LM
兩種使用語言模型的方法:
Feature-based,Word2Vec、Glove、ELMo,把預訓練好的語言模型當做一個feature加到word embedding中。
fine-tuning,OpenAI-GPT,儘量不改動預訓練的語言模型,加輸出層並在下游的任務上fine-tune。
他們的共同點:
1.在預訓練的時候用的是同一個目標函式;
2.使用單向語言模型學習語言表示。其中,GPT在預訓練的時候,預測下一個詞只使用其左側的上下文,相當於使用了Transformer的Decoder的結構。而ELMo等語言模型雖然得到了雙向表示,但是是兩個獨立的目標函式下得到的雙向表示直接拼接起來。
2.亮點
結構:
每層都是雙向Context-Dependency。
目標函式:MLM(Masked Language Model) + Next Sentence Prediction。
結果:
不需要調整模型結構,只需要在預訓練的LM上加上一層輸出層並fine-tune就能應用在多種NLP任務。
3.細節
(1)輸入:
由詞向量+位置向量+Seg向量三個部分組成,
詞向量,第一個詞是CLS,如果是分類任務這個token對應的embedding可以作為學習到的句子表示。
可學習的位置向量,用來改善self-attention的效果。
對於Sentence-Pair輸入型別,採用和GPT類似的方式concat兩個句子,以Seg向量區分token所在的句子。
(2)Train Objective:
MLM:
為了改善單向LM問題,如果直接使用多層雙向那麼模型相當於直接看到了答案,所以使用類似Cloze的Masked Language Model。
訓練的時候如果只是把輸入中的一些單詞mask為一個特殊字元然後預測它們,那麼和使用的時候差別太大。為了減輕這個影響,使用了一些策略(mask 15%的單詞):80%的概率mask為mask字元,10%的概率替代為特殊字元,10%的概率使用原有單詞。
Next Sentence Prediction:
另一個pre-train的目標,預測句子之間是否是相鄰關係。這樣使LM在需要理解句子之間關係的下游任務中表現更好。
(3)Pre-train過程:
BookCorpus+Wiki資料的文件級別的語料,抽取出兩個sentence(50%抽取相鄰句子,50%抽取段落中隨機句子)。
(4)Fine-Tune過程:
對於句子級別的分類過程,取第一個token的最後一層作為表示,再加上一個全連線層。
對於span級別的分類過程(比如SQuAD),增加了一個Start Vector:
和End Vector:,用這兩個向量與所有token點乘的softmax作為每個token作為span的概率。
4.缺陷
MLM每個batch只需要預測15%的Mask Token,所以比之前的LM收斂要慢。