Bert解析,state of the art的語言模型

2019-11-14     AI公園

作者:Rani Horev

編譯:ronghuaiyang

導讀

對bert的解析,很簡單,也很清楚,重要的是很好理解,讓你一下子抓住重點。

BERT是最近由研究人員在谷歌AI語言上發表的論文。它通過在各種NLP任務(包括問答(SQuAD v1.1)、自然語言推理(MNLI)等)中展示最先進的結果,在機器學習社區中引起了轟動。

BERT的關鍵技術創新是將目前流行的注意力模型Transformer的雙向訓練應用到語言模型中。這與之前的研究形成了對比,之前的研究著眼於從左到右的文本序列,或者結合從左到右和從右到左的訓練。研究結果表明,雙向訓練的語言模型比單向訓練的語言模型具有更強的語言語境感。在這篇論文中,研究人員詳細介紹了一種新技術Masked LM (MLM),它允許在模型中進行雙向訓練,這在以前是不可能的。

背景

在計算機視覺領域,研究人員已經反覆展示了遷移學習的價值——在已知任務(例如ImageNet)上預先訓練一個神經網絡模型,然後進行微調——使用訓練過的神經網絡作為新的特定目標模型的基礎。近年來,研究人員已經證明,類似的技術可以在許多自然語言任務中發揮作用。

另一種方法是基於特徵的訓練,這種方法在NLP任務中也很流行,最近的ELMo論文中對此進行了說明。在這種方法中,一個預訓練的神經網絡產生單詞嵌入,然後作為NLP模型的特徵。

BERT工作原理

BERT使用了Transformer,這是一種注意力機制,可以學習文本中單詞(或子單詞)之間的上下文關係。Transformer的基本形式包括兩種獨立的機制——讀取文本輸入的編碼器和為任務生成預測的解碼器。由於BERT的目標是生成語言模型,因此只需要編碼器機制。谷歌在一篇論文中描述了Transformer的詳細工作原理。

與按順序讀取文本輸入(從左到右或從右到左)的方向模型相反,Transformer編碼器一次讀取整個單詞序列。因此它被認為是雙向的,儘管更準確地說它是無方向性的。這個特性允許模型基於一個單詞的所有環境(單詞的左、右)來學習該單詞的上下文。

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

當訓練語言模型時,定義一個預測目標是一個挑戰。許多模型預測下一個單詞的順序(例如「the child came home from」),這是一種方向性的方法,從本質上限制了上下文學習。為了克服這個挑戰,BERT使用了兩種訓練策略:

Masked LM (MLM)

在將單詞序列輸入BERT之前,每個序列中15%的單詞被替換為[MASK]令牌。然後,該模型試圖根據序列中其他非屏蔽詞提供的上下文來預測屏蔽詞的原始值。在技術方面,預測產出單詞需要:

  1. 在編碼器輸出的頂部添加一個分類層。
  2. 將輸出向量乘以嵌入矩陣,將其轉換為詞彙表維數。
  3. 用softmax計算詞彙表中每個單詞的機率。

BERT損失函數隻考慮掩碼值的預測,而忽略了非掩碼詞的預測。因此,模型收斂速度比方向模型慢,這一特性被其增強的上下文感知所抵消。

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

預測下一個句子

在BERT訓練過程中,模型接收成對的句子作為輸入,並學習預測這對句子中的第二句是否為原文檔中的第二句。在訓練過程中,50%的輸入是一對輸入,其中第二句是原文檔中的第二句,而在另50%的輸入中,從語料庫中隨機抽取一個句子作為第二句。假設隨機的句子將與第一個句子斷開。

為了幫助模型在訓練中區分這兩句話,在輸入模型之前,對輸入進行如下處理:

  1. 在第一個句子的開頭插入一個[CLS]令牌,在每個句子的末尾插入一個[SEP]令牌。
  2. 在每個標記中添加一個嵌套句,指示句A或句B。句子嵌入在概念上類似於詞彙表為2的標記嵌入。
  3. 將位置嵌入添加到每個令牌中,以指示其在序列中的位置。Transformer的論文介紹了位置嵌入的概念和實現。

為了預測第二句話是否確實與第一句相連,執行以下步驟:

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

在訓練BERT模型時,將Masked LM和 Next Sentence Prediction同時訓練,目標是使兩種策略的組合損失函數最小。

如何使用BERT(Fine-tuning)

將BERT用於特定的任務相對簡單:

BERT可以用於各種各樣的語言任務,而只在核心模型中添加一個小層:

  1. 分類任務(例如情感分析),通過在[CLS]令牌的Transformer輸出之上添加一個分類層,執行方式與Next Sentence Prediction類似。
  2. 回答問題的任務(例如SQuAD v1.1)中,軟體接收到一個關於文本序列的問題,並需要在序列中標記答案。使用BERT,可以通過學習兩個額外的向量來訓練問答模型,這兩個向量表示答案的開始和結束。
  3. 在命名實體識別(NER)中,軟體接收一個文本序列,並需要標記文本中出現的各種類型的實體(人員、組織、日期等)。使用BERT,可以通過將每個令牌的輸出向量輸入預測NER標籤的分類層來訓練NER模型。

在finetune訓練中,大部分超參數與BERT訓練保持一致,本文對需要調整的超參數給出了具體的指導(第3.5節)。BERT團隊已經使用這種技術在各種具有挑戰性的自然語言任務上取得了最先進的成果,詳細內容見文章的第4部分。

注意:BERT的預訓練模型也可以用於生成文本嵌入,類似於許多其他基於特徵的模型,比如doc2vec和ELMo。通過將編碼器的最後四層串聯起來,可以得到最佳的嵌入效果。

要點

  1. 模型大小很重要,即使是在大規模的情況下。 BERTLARGE擁有3.45億個參數,是同類模型中最大的。它在小規模任務上明顯優於BERTBASE,後者使用相同的架構,「只有」1.1億個參數。
  2. 有了足夠的訓練數據,更多的訓練步驟==更高的準確性。例如,在MNLI任務中,當訓練1M步(128,000個單詞的批大小)時,BERTBASE的準確率比訓練相同批大小的500K步提高1.0%。
  3. BERT的雙向訓練方法(MLM)收斂速度慢於從左到右的方法(因為每批訓練只預測15%的單詞),但經過少量的訓練前步驟後,雙向訓練仍然優於從左到右的訓練。

計算配置(訓練和部署)

總結

BERT無疑是機器學習用於自然語言處理方面的一個突破。事實上,它是可用的,並允許快速微調,並且可能應用在未來廣泛的實際應用中。在本摘要中,我們試圖描述本文的主要思想,同時又不沉溺於過多的技術細節。對於那些希望深入研究的人,我們強烈建議閱讀全文和其中引用的輔助文章。另一個有用的參考資料是BERT原始碼和模型,它們涵蓋103種語言,並且由研究團隊慷慨地作為開放源碼發布。

英文原文:https://www.lyrn.ai/2018/11/07/explained-bert-state-of-the-art-language-model-for-nlp/

請長按或掃描二維碼關注本公眾號

文章來源: https://twgreatdaily.com/zh/CawVb24BMH2_cNUgv-vb.html