BERT框架
BERT有兩部分:pre-training和fine-tuning。在pre-training階段,會在沒有標注數(shù)據(jù)且不同預(yù)訓(xùn)練任務(wù)上訓(xùn)練模型;在fine-tuning階段,BERT會根據(jù)預(yù)訓(xùn)練模型的參數(shù)初始化,然后在下游任務(wù)的標注數(shù)據(jù)進行fine-tuned。
BERT是一個多層雙向的transformer encoder模型。是的,BERT中的transformer只有encoder,沒有decoder!??!

模型輸入輸出表示
BERT模型中使用的是WordPiece embeddings,最后一層隱藏層的向量會作為每個token的表示。另外,有3個特殊字符如下:
- [CLS]:用于分類任務(wù)中每個序列的第一個token
- [SEP]:作為句子對(A,B)的分割符,句子首尾都有,具體可看輸入輸出表示部分。
-
[MASK]:用于masked ML中word的替換
輸入輸出表示
還需要說明的是,BERT模型中sentence并不是語義層面的句子,可以是連續(xù)的文本。sequence指的是token 序列,可以是單個sentence也可以是合在一起的 two sentences。
部分小疑問
- 輸入不管有幾個sentence,總和的maxlength是固定的,與其他訓(xùn)練任務(wù)一樣
- segment可以有多種(可以大于2,只是比較少見),如果只有一種那么Segment embedding只有一個
預(yù)訓(xùn)練(pre-training)BERT
相比之前的預(yù)訓(xùn)練模型,BERT在預(yù)訓(xùn)練階段做了兩個無監(jiān)督任務(wù):MLM(masked LM)和next sentence prediction(NSP)。
通過源碼能看到:
- MLM和NSP任務(wù)的輸入都是一樣的,即輸入中都會有masked token
- 在masked LM任務(wù)中只會預(yù)測masked token,其他token不做預(yù)測。
- 由于是多任務(wù)學(xué)習(xí),最終的
Task1: MLM
我沒明白為什么傳統(tǒng)模型無法雙向訓(xùn)練,而用masked LM可以解決雙向訓(xùn)練的問題:
Unfortunately, standard conditional language models can only be trained left-to-right or right-to-left, since bidirec- tional conditioning would allow each word to in- directly “see itself”, and the model could trivially predict the target word in a multi-layered context.
某文章的解釋是:
從圖中可以看到經(jīng)過兩層的雙向操作,每個位置上的輸出就已經(jīng)帶有了原本這個位置上的詞的信息了。這樣的“窺探”會導(dǎo)致模型預(yù)測詞的任務(wù)變得失去意義,因為模型已經(jīng)看到每個位置上是什么詞了。ref: 《Semi-supervised sequence tagging with bidirectional language models》.
masked LM的做法:
- 隨機選擇一定比例的token隨機masked,然后再預(yù)測這些token。這個比例作者選的是15%,另外文中提到“In contrast to denoising auto-encoders (Vincent et al., 2008), we only predict the masked words rather than recon- structing the entire input.”
- 因為[MASK] token不出現(xiàn)在fine-tuning階段,因此在pre-training階段,對mask做了點其他處理:如果某個token被選擇mask,那么80%的情況是被替換成[MASK],10%的情況是被隨機替換成其他token,10%保持原token不替換。
在masked LM任務(wù)中只會預(yù)測masked token,其他token不做預(yù)測。
Task2: NSP
有一些任務(wù)比如問答(QA)和自然語言推理(NLI)都是對兩句話關(guān)系的理解,但是語言模型無法捕捉這種信息。為了讓訓(xùn)練的模型能獲取句子之間的關(guān)系,在預(yù)訓(xùn)練的時候多加了一個二值化的NSP任務(wù)。具體做法:
- 對每一個訓(xùn)練樣本(A,B)對,50%用真實的(A,B)對被標注為IsNext,50%用錯誤的(A,B')對標注為NotNext,其中B'隨機來自于語料。
- 目標函數(shù)與 Jernite et al. (2017) and (Logeswaran and Lee (2018))[] 比較相近。
對這部分我的疑問是:
- 如果不是QA和NLI類的任務(wù),那BERT是不是只有MLM任務(wù)?
Fine-tuning BERT
原文中不理解的地方:
For applications involving text pairs, a common pattern is to independently encode text pairs be- fore applying bidirectional cross attention, such as Parikh et al. (2016); Seo et al. (2017). BERT instead uses the self-attention mechanism to unify these two stages, as encoding a concatenated text pair with self-attention effectively includes bidi- rectional cross attention between two sentences.
