基於Transformer的雙向編碼器表示(BERT)——結構和訓練

摘要:BERT是當前NLP領域效果最好的模型之一。本文對BERT的來由、結構和訓練方式,以及關鍵環節的動機和細節,進行了簡單的介紹。

1. 引言

BiDirectional Encoder Rpresentation From Transformers(基於變形金剛的雙向編碼器表示,BERT)可能是2019年以來,NLP領域影響力最大的算法之一。

從名字就能看出來,BERT和Transformer有非常密切的關係(關於Transformer的介紹,可以參考https://zhuanlan.zhihu.com/p/122977440)。實際上,BERT是一種神經網絡結構,以Transformer為文本特徵提取器,還配套了訓練數據集構建方法、模型訓練方法、神隊特定任務的結構修改策略等等,以支撐BERT處理我們所知道的任何一種NLP任務(文本分類、序列標註、文本匹配等等)。

Devlin J等人(2019)在論文[1]裡間接指出,BERT唯一重視的對手,是Alec Radford等人(2019)提出的GPT[2]。BERT在思想和方法上參考了較早出現的GPT ,因此二者在結構、訓練策略等方面非常相似。Devlin J等人在介紹BERT的時候,也藉助了GPT的部分內容。因此瞭解GPT,有助於更好地理解BERT(GPT的相關介紹,可以參考https://zhuanlan.zhihu.com/p/125139937)。

2. BERT是什麼

2.1. BERT是怎麼來的

Jacob Devlin等人比較直爽,在論文中直接指出:他們從若干種結構、若干種訓練方案、若干種參數規模,等等等等中,選出最好的一個組合,然後基於其結構特點其名為“BERT”。這種模型結構探索方式,似乎很流行。

2.2. BERT是一套完整的NLP解決方案

BERT實際上是一套完整的NLP解決方案,是從訓練數據集構建到針對具體任務微調的方法、模型綜合體。它的主要內容包括:(1)基於Transformer的模型結構;(2)預訓練;(3)微調;(4)推斷。其中推斷階段和樸素貝葉斯之類的模型區別不大,這裡不做介紹。

2.3. BERT的總體結構

如圖2-1,是Devlin等人在論文中給出的BERT結構示意圖。BERT的輸入是token序列對應的嵌入向量序列。在生命週期的不同階段,輸出是不同的:

在預訓練階段,BERT採用多任務策略,輸出包括“下一個詞語”和“是否為下一句”。

在微調和推斷階段,BERT(針對具體的任務)輸出NER標籤、答案位置等等。

這個示意圖非常概括,BERT內部細節比較模糊。後面進行更詳細的介紹。

基於Transformer的雙向編碼器表示(BERT)——結構和訓練

圖 2-1 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中提供的BERT結構原圖

2.4. BERT的基石——Transformer

圖2-1中隱去了BERT內部的結構,即Transformers。BERT與GPT在使用Transformer時最大的不同在於,前者使用了Transformer的encoder部分,而後者使用了Transformer的decoder部分。GPT認為時間循環結構有助於模型更好地刻畫類似文本這樣的序列數據;而BERT認為,GPT是一個“單向模型”,沒有充分發揮Transformer的特徵提取能力。BERT使用Transformer的encoder部分,即放棄了時間循環結構,完全依賴位置編碼來輔助模型刻畫序列數據中的時空關聯信息。

失之東隅收之桑榆,BERT放棄了時間循環結構,也因此獲得了一個機會:它可以同時處理整個輸入序列,而不需要想GPT那樣“掃描”。這樣的結果就是,相對於GPT,BERT的並行化程度更高、計算速度更快。

基於Transformer的雙向編碼器表示(BERT)——結構和訓練

圖 2-2 Transformer的結構

2.5. BERT的預訓練

在預訓練中,BERT需要同時完成兩個任務:(1)隨機遮蔽詞語預測;(2)“是否下一句”二分類。

2.5.1. 隨機遮蔽詞語預測——BERT是雙向語言模型

在RNN時代,我們會用Bi-RNN或Bi-LSTM來“同時從左到右、從右到左掃描序列數據”。Bi-RNN是一種雙向語言模型,刻畫了正反兩個方向上,序列數據中的時空依賴信息。雙向語言模型,相比RNN等單向模型,可以提取更多的信息,模型潛力也更大。

Transformer也可以用來構建雙向語言模型。最粗暴的方式,就是Bi-Transformer,即讓2個Transformer分別從左到右和從右到左掃描輸入序列。當然,這樣做的話,模型參數太多,訓練和推斷階段耗時會比較大。

BERT沒有在Transformer的結構上費工夫,而是採用特別的訓練策略,迫使模型像雙向模型一樣思考。這種訓練策略就是隨機遮蔽詞語預測,其流程如圖2-3。BERT會對一個句子的token序列的一部分(15%)進行處理:(1)以80%的概率遮蔽掉;(2)以10%的概率替換為其他任意一個token;(3)以10%的概率保持。“遮蔽”具體是怎麼操作的呢?設定一個專門的token叫做”[MASK]”,將目標token替換為“[MASK]”即可。

基於Transformer的雙向編碼器表示(BERT)——結構和訓練

圖 2-3 BERT的隨機遮蔽預處理流程

然後,BERT會基於未被遮蔽的一部分(剩下85%)預測被遮蔽的tokens。假設輸入的token序列是“[start]我是中國人。[end]”,經過隨機遮蔽處理成為” [start]我[MASK]中[MASK]人。[end]”,那麼BERT就需要輸出”是國”這個token序列。這就決定了,BERT使用了被遮蔽token左右兩邊的輸入序列片段,即所謂“雙向”。這個建模方式,有點類似word2vec模型。

注意,輸出是被遮蔽的token序列。

2.5.2. “是否下一句”二分類

為了讓模型具有理解句子關係,以更好地支持文本匹配這樣的下游任務,BERT在與訓練時,還要完成一個二分類任務,即判斷句子B是否為句子A的下一句。

這個任務可以逼迫BERT學習如何輸出更好地句子表示。

2.6. 微調

微調比較簡單:添加符合任務要求的輸出層,然後基於標註數據訓練整個BERT。

3. 結語

從GPT和BERT出現開始,NLP領域進入了“大力出奇跡”時代。在這個時代裡,大數據、大規模參數是構建一個好模型的基礎——這還需要大量的計算資源。土豪們在NLP領域的裝備優勢越來越大了。不過也不用氣餒,我們無需投入幾百個GPU去跑一個不知道好不好使的結構,因為機器學習領域已經逐漸形成一種生態:高水平機構負責創造和訓練基準模型,廣大普通從業者基於基準模型做進一步的工作。

參考文獻

[1] Devlin J , Chang M W , Lee K , et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. 2018.

[2] https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf

注意:本文為李鵬宇(知乎個人主頁https://www.zhihu.com/people/py-li-34)原創作品,受到著作權相關法規的保護。如需引用、轉載,請註明來源信息:(1)作者名,即“李鵬宇”;(2)原始網頁鏈接,即https://zhuanlan.zhihu.com/p/125655365。如有疑問,可發郵件至我的郵箱:[email protected]


分享到:


相關文章: