1. 程式人生 > >Bert-一種基於深度雙向Transform的語言模型預訓練策略

Bert-一種基於深度雙向Transform的語言模型預訓練策略

今天的部落格主要參考了論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。這篇paper是Google公司下幾個研究員發表的,而且在NLP領域引起了很大的轟動(在多個NLP任務集上都打破了之前最好的記錄)。

其實,這個Bert利用了遷移學習的思想,把針對語言模型任務設計出的網路引數進行預訓練,然後遷移到了下層的任務中進行進一步的fine-tuning。只不過在進行訓練語言模型的時候,利用的是自己提出的子結構Transformer layer+ feed forward layer(詳情參看論文《Attention is all you need》)。最終模型引數是12個Transformer layer+ feed forward 層,head個數是12,hidden state維度是768。

在進行詞語Embedding表徵的時候,每個詞語都提取了三個維度的資訊,如下圖所示:
在這裡插入圖片描述
其中Token Embedding就是原始概念中對應的詞向量,其中的 E C L S E_{CLS}

標識了每一個句子的開始資訊, E S E P E_{SEP} 標識了兩個句子的分割資訊;Segment Embedding是為進行sentence pair任務的訓練,其中 E
A E_A
E B E_B 會隨著模型進行訓練,如果是針對只有一個句子的下游任務,那麼只會有 E A E_A ;Position Embedding是用來標識詞向量位置資訊.三者相加構成了模型的輸入部分。

接下來,通過Masked LM和Next Sentence Prediction對模型進行預訓練。
所謂Masked LM就是按照一定的概率(15%)隨機的把一個句子中的某些詞語用mask進行替換,然後任務是預測這些被mask掉的詞語,相當於完形填空的任務。比方說:my dog is hairy → my dog is [MASK]。這些 [MASK]也會對應一個Embedding,並隨著模型一起訓練。其實在實做的時候,大約有80%的情況會使用 [MASK]替換,剩下的10%詞語會被隨機選出的其他詞語進行替換,10%詞語保持詞語不動。
所謂Next Sentence Prediction就是為了應對下游任務利用Sentence pair之間相互關聯的任務而設定的,比方說問答任務,推理任務等。這個sentence pair中有50%的是真正的在原始語料中是連續存在的兩個句子,有50%是隨機挑選的沒有關聯關係的兩個句子。有關聯關係的句子被標註為1類,沒有關聯關係的句子被標註為0。

需要注意的是,如果是利用sentece level的表徵,那麼就使用模型最後一層針對 E C L S E_{CLS} 表徵來作為整個句子的代表。在訓練好了這些語言模型之中用到的引數之後,就會很方便的遷移到下游的任務中去,如下圖所示:
在這裡插入圖片描述
需要注意的是,如果下游任務只是針對一個句子的任務,比方說單獨句子的分類,那麼就不需要構造Next Sentence Prediction,只需要使用Masked LM即可;如果下游任務需要利用到兩個句子之間的相關關係,比方說閱讀理解,自動問答等,就需要同時使用Masked LM和Next Sentence Prediction。

作者通過一系列在各個任務和資料集上的實驗,充分地說明了Bert模型的有效性;有時候即使下游任務不fine tune上游的任務網路引數,直接把上游的輸出作為feature輸入到下層任務的網路中去,最終的結果依然會比之前所有模型要好。