一、BERT整體結構
BERT主要用了Transformer的Encoder,而沒有用其Decoder,我想是因為BERT是一個預訓練模型,只要學到其中語義關系即可,不需要去解碼完成具體的任務。整體架構如下圖:
多個Transformer Encoder一層一層地堆疊起來,就組裝成了BERT了,在論文中,作者分別用12層和24層Transformer Encoder組裝了兩套BERT模型,兩套模型的參數總數分別為110M和340M。
二、再次理解Transformer中的Attention機制
Attention機制的中文名叫“注意力機制”,顧名思義,它的主要作用是讓神經網絡把“注意力”放在一部分輸入上,即:區分輸入的不同部分對輸出的影響。這里,我們從增強字/詞的語義表示這一角度來理解一下Attention機制。
我們知道,一個字/詞在一篇文本中表達的意思通常與它的上下文有關。比如:光看“鵠”字,我們可能會覺得很陌生(甚至連讀音是什么都不記得吧),而看到它的上下文“鴻鵠之志”后,就對它立馬熟悉了起來。因此,字/詞的上下文信息有助於增強其語義表示。同時,上下文中的不同字/詞對增強語義表示所起的作用往往不同。比如在上面這個例子中,“鴻”字對理解“鵠”字的作用最大,而“之”字的作用則相對較小。為了有區分地利用上下文字信息增強目標字的語義表示,就可以用到Attention機制。
Attention機制主要涉及到三個概念:Query、Key和Value。在上面增強字的語義表示這個應用場景中,目標字及其上下文的字都有各自的原始Value,Attention機制將目標字作為Query、其上下文的各個字作為Key,並將Query與各個Key的相似性作為權重,把上下文各個字的Value融入目標字的原始Value中。如下圖所示,Attention機制將目標字和上下文各個字的語義向量表示作為輸入,首先通過線性變換獲得目標字的Query向量表示、上下文各個字的Key向量表示以及目標字與上下文各個字的原始Value表示,然后計算Query向量與各個Key向量的相似度作為權重(最終形成每個目標字與其上下文的字的權重關系,權重和為1),加權融合目標字的Value向量和各個上下文字的Value向量(其實就是做了點乘),作為Attention的輸出,即:目標字的增強語義向量表示。
圖示展示了第二個字,即目標字的整個Attention計算流程。
三、BERT的預訓練結構
BERT實際上是一個語言模型。語言模型通常采用大規模、與特定NLP任務無關的文本語料進行訓練,其目標是學習語言本身應該是什么樣的。BERT模型其預訓練過程就是逐漸調整模型參數,使得模型輸出的文本語義表示能夠刻畫語言的本質,便於后續針對具體NLP任務作微調。
1、Masked LM
Masked LM的任務描述為:給定一句話,隨機抹去這句話中的一個或幾個詞,要求根據剩余詞匯預測被抹去的幾個詞分別是什么,如下圖所示
具體來說,文章作者在一句話中隨機選擇15%的詞匯用於預測。對於在原句中被抹去的詞匯,80%情況下采用一個特殊符號[MASK]替換,10%情況下采用一個任意詞替換,剩余10%情況下保持原詞匯不變。這么做的主要原因是:在后續微調任務中語句中並不會出現[MASK]標記,而且這么做的另一個好處是:預測一個詞匯時,模型並不知道輸入對應位置的詞匯是否為正確的詞匯(10%概率),這就迫使模型更多地依賴於上下文信息去預測詞匯,並且賦予了模型一定的糾錯能力。
2、NextSentence Prediction
任務描述為:給定一篇文章中的兩句話,判斷第二句話在文本中是否緊跟在第一句話之后,如下圖所示:
四、BERT的整體輸入/輸出
BERT模型預訓練文本語義表示的過程就好比我們在高中階段學習語數英、物化生等各門基礎學科,夯實基礎知識;而模型在特定NLP任務中的參數微調就相當於我們在大學期間基於已有基礎知識、針對所選專業作進一步強化,從而獲得能夠應用於實際場景的專業技能。
從上圖中可以看出,BERT模型通過查詢字向量表將文本中的每個字轉換為一維向量,作為模型輸入;模型輸出則是輸入各字對應的融合全文語義信息后的向量表示。此外,模型輸入除了字向量,還包含另外兩個部分:
1. 文本向量:該向量的取值在模型訓練過程中自動學習,用於刻畫文本的全局語義信息,並與單字/詞的語義信息相融合
2. 位置向量:由於出現在文本不同位置的字/詞所攜帶的語義信息存在差異(比如:“我愛你”和“你愛我”),因此,BERT模型對不同位置的字/詞分別附加一個不同的向量以作區分
最后,BERT模型將字向量、文本向量和位置向量的加和作為模型輸入。特別地,在目前的BERT模型中,文章作者還將英文詞匯作進一步切割,划分為更細粒度的語義單位(WordPiece),例如:將playing分割為play和##ing;此外,對於中文,目前作者尚未對輸入文本進行分詞,而是直接將單字作為構成文本的基本單位。
五、具體NLP任務上的fine-tune
在具體的NLP任務上,BERT模型的輸入輸出會有細微的差別。
1)文本分類任務
單文本分類任務:對於文本分類任務,BERT模型在文本前插入一個[CLS]符號,並將該符號對應的輸出向量作為整篇文本的語義表示,用於文本分類,如下圖所示。可以理解為:與文本中已有的其它字/詞相比,這個無明顯語義信息的符號會更“公平”地融合文本中各個字/詞的語義信息。
2)語句對分類任務
語句對分類任務:該任務的實際應用場景包括:問答(判斷一個問題與一個答案是否匹配)、語句匹配(兩句話是否表達同一個意思)等。對於該任務,BERT模型除了添加[CLS]符號並將對應的輸出作為文本的語義表示,還對輸入的兩句話用一個[SEP]符號作分割,並分別對兩句話附加兩個不同的文本向量以作區分,如下圖所示:
3)序列標注任務
該任務的實際應用場景包括:中文分詞&新詞發現(標注每個字是詞的首字、中間字或末字)、答案抽取(答案的起止位置)等。對於該任務,BERT模型利用文本中每個字對應的輸出向量對該字進行標注,如下圖所示(B、I、E分別表示一個詞的第一個字、中間字和最后一個字)。
參考:
https://cloud.tencent.com/developer/article/1389555
作者:騰訊Bugly