BERT精髓詳解

徹底搞懂BERT(NLP 詞向量訓練模型巔峯之作)

自google在2018年10月底公佈BERT在11項nlp任務中的卓越表現後,BERT(Bidirectional Encoder Representation from Transformers)就成爲NLP領域大火、整個ML界略有耳聞的模型,網上相關介紹也很多,但很多技術內容太少,或是寫的不全面半懂不懂,重複內容佔絕大多數。

一句話概括,BERT的出現,徹底改變了預訓練產生詞向量和下游具體NLP任務的關係,提出龍骨級的訓練詞向量概念。

目錄:

  詞向量模型:word2vec, ELMo, BERT比較
  BERT細則:Masked LM, Transformer, sentence-level
  遷移策略:下游NLP任務調用接口
  運行結果:破11項NLP任務最優紀錄

一、詞向量模型

這裏主要橫向比較一下word2vec,ELMo,BERT這三個模型,着眼在模型亮點與差別處。

傳統意義上來講,詞向量模型是一個工具,可以把真實世界抽象存在的文字轉換成可以進行數學公式操作的向量,而對這些向量的操作,纔是NLP真正要做的任務。因而某種意義上,NLP任務分成兩部分,預訓練產生詞向量,對詞向量操作(下游具體NLP任務)。

從word2vec到ELMo到BERT,做的其實主要是把下游具體NLP任務逐漸移到預訓練產生詞向量上。下面是一個大體概括,具體解釋後面會寫到。

1⃣️word2vec——>ELMo:

結果:上下文無關的static向量變成上下文相關的dynamic向量,比如‘blue’(藍色、憂鬱的)在不同語境的vector不同。

操作:encoder操作轉移到預訓練產生詞向量過程實現。

2⃣️ELMo——>BERT:

結果:訓練出的word-level向量變成sentence-level的向量,下游具體NLP任務調用更方便,修正了ELMo模型的潛在問題,。

操作:使用句子級負採樣獲得句子表示/句對關係,Transformer模型代替LSTM提升表達和時間上的效率,masked LM解決“自己看到自己”的問題。

1、word2vec

線性模型:

很神奇的地方,從而也說明高維空間映射的詞向量可以很好體現真實世界中token之間的關係。如:king-man = queen-woman

負採樣:

由於訓練詞向量模型的目標不是爲了得到一個多麼精準的語言模型,而是爲了獲得它的副產物——詞向量。所以要做到的不是在幾萬幾十萬個token中艱難計算softmax獲得最優的那個詞(就是預測的對於給定詞的下一詞),而只需能做到在幾個詞中找到對的那個詞就行,這幾個詞包括一個正例(即直接給定的下一詞),和隨機產生的噪聲詞(採樣抽取的幾個負例),就是說訓練一個sigmoid二分類器,只要模型能夠從中找出正確的詞就認爲完成任務。

這種負採樣思想也應用到之後的BERT裏,只不過從word-level變成sentence-level,這樣能獲取句子間關聯關係。

缺點是上下文無關(static):

因而爲了讓句子有一個整體含義(context),大家會在下游具體的NLP任務中基與詞向量的序列做encoding操作。

下面是一個比較表格,模型不細講了,預測目標這裏的next word下一個詞,是所有傳統語言模型都做的事——尋找下一個詞填什麼。在這裏插入圖片描述

2. ELMo

ELmo模型是AllenNLP在2018年8月發佈的一個上下文無關模型,甚至在9月10月BERT沒出來時,也小火了一把。但使用時很慢效率很低,再加上馬上就提出的強勢BERT,ELMo很快就被人們忘掉了。
這裏介紹ELMo的兩方面,一個是它的encoder模型Bi-LSTM,另一個是它和下游具體NLP任務的接口(遷移策略)。

Bi-LSTM做encoder實現上下文相關(context):

這裏就是之前說的把下游具體NLP任務放到預訓練產生詞向量裏面,從而達到獲得一個根據context不同不斷變化的dynamic詞向量。具體實現方法是使用雙向語言模型(BiLM)Bi-LSTM來實現,如下面左圖所示。從前到後和後到前分別做一遍LSTM的encoding操作,從而獲得兩個方向的token聯繫,進而獲得句子的context。

但這裏有兩個潛在問題,姑且稱作“不完全雙向”和“自己看見自己”。

首先,“不完全雙向”是指模型的前向和後向LSTM兩個模型是分別訓練的,從圖中也可以看出,對於一個序列,前向遍歷一遍獲得左邊的LSTM,後向遍歷一遍獲得右邊的LSTM,最後得到的隱層向量直接拼接得到結果向量(前向的hidden state1 + 後向的hidden state2 = 總的hidden state,+是concat),並且在最後的Loss function中也是前向和後向的loss function直接相加,並非完全同時的雙向計算。

另外,“自己看見自己”是指要預測的下一個詞在給定的序列中已經出現的情況。傳統語言模型的數學原理決定了它的單向性。從公式可以看出,傳統語言模型的目標是獲得在給定序列從頭到尾條件概率相乘後概率最大的下一詞,而雙向模型會導致預測的下一詞已經在給定序列中出現了的問題,這就是“自己看見自己”。如下面右圖所示(圖片從下往上看),最下行是訓練數據A B C D,經過兩個bi-lstm操作,需要預測某個詞位置的內容。比如第二行第二列A|CD這個結果是第一層bi-lstm在B位置輸出內容,包括正向A和反向CD,直接拼接成A|CD。比如第三行第二例ABCD這個結果是前向BCD和反向AB|D拼接結果,而當前位置需要預測的是B,已經在ABCD中出現了,這就會有問題。因而對於Bi-LSTM,只要層數增加,就是會存在“自己看見自己”的問題。
  在這裏插入圖片描述
  在這裏插入圖片描述
與下游具體NLP任務接口:

ELMo模型將context的encoding操作從下游具體NLP任務轉換到了預訓練詞向量這裏,但在具體應用時要做出一些調整。當bilstm有多層時,由於每層會學到不同的特徵,而這些特徵在具體應用中側重點不同,每層的關注度也不同。ELMo給原始詞向量層和每個RNN隱層都設置了一個可訓練參數,通過softmax層歸一化後乘到相應的層上並求和起到了加權作用。

比如,原本論文中設定了兩個隱層,第一隱層可以學到對詞性、句法等信息,對此有明顯需求的任務可以對第一隱層參數學到比較大的值;第二隱層更適合對詞義消歧有需求的任務,從而分配更高權重。

下面是 ELMo的比較表格。
在這裏插入圖片描述

3. BERT

在這裏插入圖片描述
BERT模型進一步增加詞向量模型泛化能力,充分描述字符級、詞級、句子級甚至句間關係特徵。

真正的雙向encoding:

Masked LM,類似完形填空,儘管仍舊看到所有位置信息,但需要預測的詞已被特殊符號代替,可以放心雙向encoding。

Transformer做encoder實現上下文相關(context):

使用transformer而不是bi-LSTM做encoder,可以有更深的層數、具有更好並行性。並且線性的Transformer比lstm更易免受mask標記影響,只需要通過self-attention減小mask標記權重即可,而lstm類似黑盒模型,很難確定其內部對於mask標記的處理方式。

提升至句子級別:

學習句子/句對關係表示,句子級負採樣。首先給定的一個句子,下一句子正例(正確詞),隨機採樣一句負例(隨機採樣詞),句子級上來做二分類(即判斷句子是當前句子的下一句還是噪聲),類似word2vec的單詞級負採樣。
 在這裏插入圖片描述

二、BERT細則

這裏主要介紹BERT的三個亮點Masked LM、transformer、sentence-level。

1、Masked Language Model

原本叫cloze test,是完形填空的意思。

隨機mask語料中15%的token,然後將masked token 位置輸出的最終隱層向量送入softmax,來預測masked token。

這樣輸入一個句子,每次只預測句子中大概15%的詞,所以BERT訓練很慢。(但是google 設備NB。)

而對於蓋住詞的特殊標記,在下游NLP任務中不存在。因此,爲了和後續任務保持一致,作者按一定的比例在需要預測的詞位置上輸入原詞或者輸入某個隨機的詞。如:my dog is hairy
有80%的概率用“[mask]”標記來替換——my dog is [MASK]
有10%的概率用隨機採樣的一個單詞來替換——my dog is apple
有10%的概率不做替換——my dog is hairy

2、Transformer —— attention is all you need
Transformer模型是2018年5月提出的,可以替代傳統RNN和CNN的一種新的架構,用來實現機器翻譯,論文名稱是attention is all you need。無論是RNN還是CNN,在處理NLP任務時都有缺陷。CNN是其先天的卷積操作不很適合序列化的文本,RNN是其沒有並行化,很容易超出內存限制(比如50tokens長度的句子就會佔據很大的內存)。

下圖是transformer模型一個結構,分成左邊Nx框框的encoder和右邊Nx框框的decoder,相較於RNN+attention常見的encoder-decoder之間的attention(上邊的一個橙色框),還多出encoder和decoder內部的self-attention(下邊的兩個橙色框)。每個attention都有multi-head特徵。最後,通過position encoding加入沒考慮過的位置信息。
在這裏插入圖片描述

下面從multi-head attention,self-attention, position encoding幾個角度介紹。

multi-head attention:
將一個詞的vector切分成h個維度,求attention相似度時每個h維度計算。由於單詞映射在高維空間作爲向量形式,每一維空間都可以學到不同的特徵,相鄰空間所學結果更相似,相較於全體空間放到一起對應更加合理。比如對於vector-size=512的詞向量,取h=8,每64個空間做一個attention,學到結果更細化。

self-attention:
每個詞位的詞都可以無視方向和距離,有機會直接和句子中的每個詞encoding。比如上面右圖這個句子,每個單詞和同句其他單詞之間都有一條邊作爲聯繫,邊的顏色越深表明聯繫越強,而一般意義模糊的詞語所連的邊都比較深。比如:law,application,missing,opinion。。。

position encoding:
因爲transformer既沒有RNN的recurrence也沒有CNN的convolution,但序列順序信息很重要,比如你欠我100萬明天要還和我欠你100萬明天要還的含義截然不同。
transformer計算token的位置信息這裏使用正弦波↓,類似模擬信號傳播週期性變化。這樣的循環函數可以一定程度上增加模型的泛化能力。

但BERT直接訓練一個position embedding來保留位置信息,每個位置隨機初始化一個向量,加入模型訓練,最後就得到一個包含位置信息的embedding(簡單粗暴。。),最後這個position embedding和word embedding的結合方式上,BERT選擇直接拼接。

3、sentence-level representation
在很多任務中,僅僅靠encoding是不足以完成任務的(這個只是學到了一堆token級的特徵),還需要捕捉一些句子級的模式,來完成SLI、QA、dialogue等需要句子表示、句間交互與匹配的任務。對此,BERT又引入了另一個極其重要卻又極其輕量級的任務,來試圖把這種模式也學習到。

句子級負採樣
句子級別的連續性預測任務,即預測輸入BERT的兩端文本是否爲連續的文本。訓練的時候,輸入模型的第二個片段會以50%的概率從全部文本中隨機選取,剩下50%的概率選取第一個片段的後續的文本。 即首先給定的一個句子(相當於word2vec中給定context),它下一個句子即爲正例(相當於word2vec中的正確詞),隨機採樣一個句子作爲負例(相當於word2vec中隨機採樣的詞),然後在該sentence-level上來做二分類(即判斷句子是當前句子的下一句還是噪聲)。

句子級表示

BERT是一個句子級別的語言模型,不像ELMo模型在與下游具體NLP任務拼接時需要每層加上權重做全局池化,BERT可以直接獲得一整個句子的唯一向量表示。它在每個input前面加一個特殊的記號[CLS],然後讓Transformer對[CLS]進行深度encoding,由於Transformer是可以無視空間和距離的把全局信息encoding進每個位置的,而[CLS]的最高隱層作爲句子/句對的表示直接跟softmax的輸出層連接,因此其作爲梯度反向傳播路徑上的“關卡”,可以學到整個input的上層特徵。

segment embedding

對於句對來說,EA和EB分別代表左句子和右句子;對於句子來說,只有EA。這個EA和EB也是隨模型訓練出來的。
如下圖所示,最終輸入結果會變成下面3個embedding拼接的表示。
在這裏插入圖片描述

三、遷移策略

下游具體NLP任務主要分爲4大類
  序列標註:分詞、實體識別、語義標註……
  分類任務:文本分類、情感計算……
  句子關係判斷:entailment、QA、自然語言推理
  生成式任務:機器翻譯、文本摘要
  
BERT將傳統大量在下游具體NLP任務中做的操作轉移到預訓練詞向量中,在獲得使用BERT詞向量後,最終只需在詞向量上加簡單的MLP或線性分類器即可。比如論文中所給的幾類任務:
在這裏插入圖片描述
對於左邊兩幅文本分類任務和文本匹配任務(文本匹配其實也是一種文本分類任務,只不過輸入是文本對)來說,只需要用得到的表示(即encoder在[CLS]詞位的頂層輸出)加上一層MLP就好

a——句子關係判斷(句對匹配):

MultiNLI文本蘊含識別(M推理出N,蘊含/矛盾/中立),QQP(文本匹配),QNLI(自然語言問題推理),STS-B(語義文本相似度1-5),MRPC(微軟研究釋義語料庫,判斷文本對語音信息是否等價)、RTE(同MNLI,小數據),SWAG(113k多項選擇問題組成的數據集,涉及豐富的基礎情境)

b——分類任務(文本匹配):

SST-2(斯坦福情感分類樹),CoLA(語言可接受性預測)

對於左三圖抽取式任務,用兩個線性分類器分別輸出span的起點和終點

c——序列標註(文本抽取):

SQuAD(斯坦福問答數據集,從phrase中選取answer)

對於左四圖序列標註任務,就只需要加softmax輸出層

d——序列標註:

NER命名實體識別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章