BERT模型詳解

1 簡介

  • BERT全稱Bidirectional Enoceder Representations from Transformers,即雙向的Transformers的Encoder。是谷歌於2018年10月提出的一個語言表示模型(language representation model)。

1.1 創新點

  • 預訓練方法(pre-trained):
    • 用Masked LM學習詞語在上下文中的表示;
    • 用Next Sentence Prediction來學習句子級表示。

1.2 成功

  • 強大,效果好。出來之時,在11種天然語言處理任務上霸榜。
  • image

2 模型

2.1 基本思想

  • Bert以前的幾年,人們經過DNN對語言模型進行「預訓練」,獲得詞向量,而後在一些下游NLP任務(問題回答,天然語言推斷,情感分析等)上進行了微調,取得了很好的效果。函數

  • 對於下游任務,一般並非直接使用預訓練的語言模型,而是使用語言模型的副產物--詞向量。實際上,預訓練語言模型一般是但願獲得「每一個單詞的最佳上下文表示」。若是每一個單詞只能看到本身「左側的上下文」,顯然會缺乏許多語境信息。所以須要訓練從右到左的模型。這樣,每一個單詞都有兩個表示形式:從左到右和從右到左,而後就能夠將它們串聯在一塊兒以完成下游任務了。性能

  • 綜上,從直覺上講,若是能夠訓練一個高度雙向的語言模型,那將很是棒。學習

2.2 建模目標

能夠和同是雙向的ELMo對比一下:編碼

  • ELMo:
  • \(P(w_i|w_1, w_2, ..., w_{i-1})\)\(P(w_i|w_{i+1}, w_{i+2},...,w_n)\)做爲目標函數,獨立訓練處兩個representation而後拼接。
  • BERT的目標函數:
  • \(P(w_i|w_1, ..., w_{i-1}, w_{i+1},...,w_n)\)以此訓練LM。

2.3 詞嵌入(Embedding)

-imagespa

  • Bert的Embedding由三種Embedding求和而成。
  • Token Embeddings 是指的詞(字)向量。第一個單詞是CLS標誌,能夠用於以後的分類任務。????
  • Segment Embeddings用來區別兩種句子,預訓練除了LM,還須要作判斷兩個句子前後順序的分類任務。
  • Position Embeddings和Transformer的Position Embeddings不同,在Transformer中使用的是公式法在bert這裏是經過訓練獲得的。

2.4 預訓練任務(Pre-training Task)

2.4.1 Task 1: Masked LM

  • 在將單詞序列輸入給 BERT 以前,每一個序列中有 15% 的單詞被 [MASK] token 替換。而後模型嘗試基於序列中其餘未被 mask 的單詞的上下文來預測被mask的原單詞。最終的損失函數只計算被mask掉那個token。code

  • 若是一直用標記[MASK]代替(在實際預測時是碰不到這個標記的)會影響模型,具體的MASK是有trick的:orm

  • 隨機mask的時候10%的單詞會被替代成其餘單詞,10%的單詞不替換,剩下80%才被替換爲[MASK]。做者沒有說明什麼緣由,應該是基於實驗效果?blog

  • 要注意的是Masked LM預訓練階段模型是不知道真正被mask的是哪一個詞,因此模型每一個詞都要關注。token

  • 訓練技巧:序列長度太大(512)會影響訓練速度,因此90%的steps都用seq_len=128訓練,餘下的10%步數訓練512長度的輸入。文檔

  • 具體實現注意:

    • i) 在encoder的輸出上添加一個分類層。
    • ii) 用嵌入矩陣乘以輸出向量,將其轉換爲詞彙的維度。
    • iii) 用softmax計算詞彙表中每一個單詞的機率。
  • BERT的損失函數只考慮了mask的預測值,忽略了沒有掩蔽的字的預測。這樣的話,模型要比單向模型收斂得慢,不過結果的情境意識增長了。

2.4.2 Task 2: Next Sentence Prediction

  • LM存在的問題是,缺乏句子之間的關係,這對許多NLP任務很重要。爲預訓練句子關係模型,bert使用一個很是簡單的二分類任務:將兩個句子A和B連接起來,預測原始文本中句子B是否排在句子A以後。
  • 具體訓練的時候,50%的輸入對在原始文檔中是先後關係,另外50%中是從語料庫中隨機組成的,而且是與第一句斷開的。
  • 爲了幫助模型區分開訓練中的兩個句子,輸入在進入模型以前要按如下方式進行處理:
  • 在第一個句子的開頭插入 [CLS] 標記,在每一個句子的末尾插入 [SEP] 標記。
  • 將表示句子 A 或句子 B 的一個句子 embedding 添加到每一個 token 上,即前文說的Segment Embeddings。
  • 給每一個token添加一個位置embedding,來表示它在序列中的位置。
  • 爲了預測第二個句子是不是第一個句子的後續句子,用下面幾個步驟來預測:
  • 整個輸入序列輸入給 Transformer 模型用一個簡單的分類層將[CLS]標記的輸出變換爲 2×1 形狀的向量。
  • 用 softmax 計算 IsNextSequence 的機率
  • 在訓練BERT模型時,Masked LM和 Next Sentence Prediction 是一塊兒訓練的,目標就是要最小化兩種策略的組合損失函數。

2.5 微調(Fine-tunning)

  • 對於不一樣的下游任務,咱們僅須要對BERT不一樣位置的輸出進行處理便可,或者直接將BERT不一樣位置的輸出直接輸入到下游模型當中。具體的以下:
    • 對於情感分析等單句分類任務,能夠直接輸入單個句子(不須要[SEP]分隔雙句),將[CLS]的輸出直接輸入到分類器進行分類
    • 對於句子對任務(句子關係判斷任務),須要用[SEP]分隔兩個句子輸入到模型中,而後一樣僅須將[CLS]的輸出送到分類器進行分類
    • 對於問答任務,將問題與答案拼接輸入到BERT模型中,而後將答案位置的輸出向量進行二分類並在句子方向上進行softmax(只需預測開始和結束位置便可)
    • 對於命名實體識別任務,對每一個位置的輸出進行分類便可,若是將每一個位置的輸出做爲特徵輸入到CRF將取得更好的效果。
    • 對於常規分類任務中,須要在 Transformer 的輸出之上加一個分類層

3 優缺點

3.1 優勢

  • 效果好,橫掃了11項NLP任務。bert以後基本全面擁抱transformer。微調下游任務的時候,即便數據集很是小(好比小於5000個標註樣本),模型性能也有不錯的提高。

3.2 缺點

做者在文中主要提到的就是MLM預訓練時的mask問題:

  • [MASK]標記在實際預測中不會出現,訓練時用過多[MASK]影響模型表現
  • 每一個batch只有15%的token被預測,因此BERT收斂得比left-to-right模型要慢(它們會預測每一個token)
  • BERT的預訓練任務MLM使得可以藉助上下文對序列進行編碼,但同時也使得其預訓練過程與中的數據與微調的數據不匹配,難以適應生成式任務
  • BERT沒有考慮預測[MASK]之間的相關性,是對語言模型聯合機率的有偏估計
  • 因爲最大輸入長度的限制,適合句子和段落級別的任務,不適用於文檔級別的任務(如長文本分類)

4 參考文獻

相關文章
相關標籤/搜索