1. 程式人生 > >BERT總結:最先進的NLP預訓練技術

BERT總結:最先進的NLP預訓練技術

BERT(Bidirectional Encoder Representations from Transformers)是谷歌AI研究人員最近發表的一篇論文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding。它通過在各種各樣的NLP任務中呈現最先進的結果,包括問答(SQuAD v1.1)、自然語言推理(MNLI)等,在機器學習社群中引起了轟動。

BERT的關鍵技術創新是將Transformers雙向訓練作為一種流行的注意力模型應用到語言建模中。這與之前研究文字序列(從左到右或從左到右和從右到左的組合訓練)的結果相反。結果表明,雙向訓練的語言模型比單向訓練的語言模型對上下文有更深的理解。在這篇論文中,研究人員詳細介紹了一種名為Masked LM (MLM)的新技術,這種技術允許在以前不可能實現的模型中進行雙向訓練。

1. 背景

在計算機視覺領域,研究人員反覆展示了在已知任務(如ImageNet)上對神經網路模型進行遷移學習預訓練的價值,然後使用經過預訓練的神經網路作為新的特定目的基模型進行引數微調。近年來,研究人員已經證明,類似的技術在許多自然語言任務中都是有用的。

另一種方法是基於特徵的訓練,這種方法在NLP任務中也很流行,最近的ELMo論文就是一個例子。在這種方法中,一個預先訓練的神經網路產生了詞嵌入,然後在NLP模型中用作特徵。

2. BERT的工作方式

BERT使用了Transformer,它是一種學習文字中單詞(或子單詞)之間上下文關係的注意力機制。通常,Transformer包括兩個獨立的機制:一個是讀取文字輸入的編碼器,另一個是生成任務預測的解碼器。由於BERT的目標是生成語言模型,所以只需要編碼器機制。谷歌的論文:

Attention Is All You Need 詳細描述了Transformer的工作原理。

BERT建立在最近的關於預訓練表達研究工作的基礎上,包括Semi-supervised Sequence LearningGenerative Pre-TrainingELMoULMFit然而,與之前研究的模型不同的是,BERT是第一個深度雙向的、無監督的語言表示,只使用純文字語料庫進行預訓練。

預訓練的詞嵌入向量表達可以是上下文無關的,也可以是上下文相關的,而且上下文相關的表示還可以是單向的或雙向的。舉例說明:

  • 上下文無關的模型(如word2vec或GloVe)為詞彙表中的每個單詞生成一個詞嵌入向量。例如,“bank”一詞在“bank account”和“bank of the river”中將具有相同的上下文無關表示
  • 上下文單向模型會根據句子中的其他單詞,生成每個單詞的表示。例如,在句子“I accessed the bank account”中,單向上下文模型將根據“I accessed the bank account”而不是“account”表示“bank”。
  • 上下文雙向模型(BERT)在表達單詞“bank”時,使用它的前一個和下一個上下文—— “I accessed the ... account”,從一個很深的神經網路的最底部開始,使它被雙向讀取。

與以往最先進的上下文預訓練方法相比,BERT神經網路體系結構的視覺化如下所示。箭頭表示資訊從一層流向另一層。頂部的綠色框表示每個輸入詞的最終上下文表示:其中BERT是深度雙向的,OpenAI GPT是單向的,ELMo是淺雙向的。

為什麼以前沒有對雙向性做這樣的研究?這是因為考慮到單向模型是有效訓練,通過預測每個詞在句子中的前一個詞。然而,僅僅根據每個單詞的前一個和下一個單詞來訓練雙向模型是不可能的,因為這將允許被預測的單詞在多層模型中間接地“看到自己”

為了解決這個問題,我們使用了一種直接的技術,即遮蔽輸入中的一些單詞,然後對每個單詞進行雙向條件化,以預測遮蔽(MSAK)掉的單詞。例如:

 

雖然這個想法已經存在很長時間了,但BERT是第一次成功地用它來訓練深層神經網路。

此外,BERT對任何文字語料庫都可以生成的一個非常簡單的任務進行預訓練來學習並模擬句子之間的關係:給定兩個句子A和B, B是實際的在語料庫A之後的下一個句子,此外還會產生一個隨機的句子,例如:

下面的圖表是Transformer編碼器的高階描述。輸入是一個token序列,它首先嵌入到向量中,然後在神經網路中進行處理。輸出是大小為H的向量序列,其中每個向量對應於具有相同索引的輸入token。

 

在訓練語言模型時,定義預測目標是一個挑戰。許多模型預測一個序列中的下一個單詞(例如,“The child came home from ___”),這是一種天生限制上下文學習的定向方法。為了克服這個挑戰,BERT使用了兩種訓練策略:

3. Masked LM (MLM)

在向BERT輸入單詞序列之前,每個序列中有15%的單詞被[MASK]token替換。然後,該模型試圖根據序列中其他非MASK詞提供的上下文來預測MASK詞的原始值。在技術上,輸出詞的預測要求:

  1. 在編碼器輸出之上新增一個分類層。
  2. 將輸出向量乘以嵌入矩陣,將它們轉換為詞彙表的維度。
  3. 使用softmax計算詞彙表中每個單詞的概率。

 

BERT損失函式只考慮了MASK值的預測,而忽略了非MASK詞的預測。因此,模型的收斂速度比單向模型慢。

注意:在實踐中,BERT實現稍微複雜一些,並沒有替換掉15%的偽裝詞。

4. Next Sentence Prediction (NSP)

在BERT訓練過程中,模型接收成對的句子作為輸入,並學習預測這對句子中的第二句是否為原始文件中的後續句。在訓練過程中,50%的輸入是一對句子組合,其中第二句是原文件中的後一句,而在其餘的50%中,從語料庫中隨機選擇一個句子作為第二句。假設隨機選擇的句子與第一個句子相互獨立。

為了幫助模型在訓練中區分這兩個句子,輸入在進入模型前按照以下方式進行處理:

  1. 在第一個句子的開頭插入[CLS]token,在每個句子的結尾插入[SEP]token。
  2. 在每個標記中新增一個表示句子A或句子B的嵌入句。句子嵌入在概念上類似於標記嵌入,詞彙表為2。
  3. 每個標記都添加了位置嵌入,以指示其在序列中的位置。(位置嵌入的概念和實現方法參考論文:Attention Is All You Need )。

要預測第二個句子是否確實與第一個句子有關聯,需要執行以下步驟:

  1. 整個輸入序列通過Transformer模型。
  2. [CLS]token的輸出使用一個簡單的分類層(學習權重和偏差矩陣)轉換為一個2 1形狀的向量。
  3. 用softmax計算IsNextSequence的概率。

在訓練BERT模型時,將MASK LM和下一個句子預測一起訓練,目的是最小化這兩種策略的組合損失函式。

5. 如何使用BERT (Fine-tuning)

使用BERT完成特定的任務相對簡單::BERT可以用於各種各樣的語言任務,但只在核心模型中添加了一個小層。

假設已經對資料進行了分類,可以使用BERT對預先訓練好的模型進行微調,方法是對輸入進行標記,將其輸入到BERT模型中,並使用[CLS]token(第一個token)輸出來預測分類。

  1. 通過在[CLS]token的Transformer輸出之上新增一個分類層,像情緒分析這樣的分類任務與下一個句子分類類似。
  2. 在問答系統的任務中,軟體接收到一個關於文字序列的問題,需要在序列中標記答案。使用BERT,一個問答模型可以通過學習兩個額外的向量來訓練,這兩個向量標記了答案的開始和結束。
  3. 在命名實體識別(NER)中,軟體接收到一個文字序列,並需要標記文字中出現的各種型別的實體(人員、組織、日期等)。通過使用BERT,可以通過將每個token的輸出向量放入一個預測NER標籤的分類層來訓練NER模型。

在微調訓練中,大多數超引數與BERT訓練保持一致,本文對需要調優的超引數給出了具體的指導(第3.5節)。BERT團隊使用這種技術在各種具有挑戰性的自然語言任務中取得了最先進的結果,本文第4部分對此進行了詳細介紹。

6. BERT_large與BERT_base

模型大小很重要,即使是大規模的。擁有3.45億個引數的BERT_large是同類模型中最大的一個。它在小規模任務上明顯優於BERT_base,後者使用相同的體系結構,“僅”使用1.1億個引數。

有足夠的訓練資料,更多的訓練步驟==更高的準確率。例如,在MNLI任務中,在1M步(128000字批量大小)上訓練的BERT_base準確率比在相同批量大小下訓練的500K步提高了1.0%。

BERT的雙向訓練方法(MLM)收斂速度慢於從左到右的訓練方法(因為每批預測的單詞只有15%),但是經過少量的預處理步驟後,雙向訓練仍然優於從左到右的訓練。

關於BERT_large和BERT_base的效能評估對比如下圖所示:

 

7. 總結

BERT無疑是利用機器學習進行自然語言處理的突破性進展。事實上,它是可接近的,並允許快速微調,將可能允許廣泛的實際應用在未來。本文儘量做到在不探究過多技術細節的情況下描述BERT的主要思想。對於那些希望更深入研究的人,我們強烈推薦閱讀全文和文章中引用的輔助文章。另一個有用的參考資料是BERT原始碼和模型

在BERT中訓練語言模型是通過預測輸入中隨機選擇的15%的標記來完成的。這些標記被預處理如下:80%被[MASK]標記替換,10%被隨機單詞替換,10%使用原始單詞。論文之所以選擇上述比例,主要是考慮以下幾點:

  • 如果我們100%地使用[MASK],模型就不會為非MASK字產生好的標記表示。非MASKtoken仍然用於上下文,但是模型是為預測掩碼詞而優化的。
  • 如果我們90%的時間使用[MASK], 10%的時間使用隨機單詞,這將教會模型觀察到的單詞永遠不會正確。
  • 如果我們90%的時間使用[MASK], 10%的時間使用相同的單詞,那麼模型就可以簡單地複製非上下文嵌入。沒有對這種方法的比率做消融,它可能在不同的比率下工作得更好。

此外,模型效能沒有通過簡單地遮蔽100%所選token進行測試。

8. 參考文獻

[1] Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing