BERT模型

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模型

模型輸入輸出表示

BERT模型中使用的是WordPiece embeddings,最后一層隱藏層的向量會作為每個token的表示。另外,有3個特殊字符如下:

  • [CLS]:用于分類任務(wù)中每個序列的第一個token
  • [SEP]:作為句子對(A,B)的分割符,句子首尾都有,具體可看輸入輸出表示部分。
  • [MASK]:用于masked ML中word的替換


    輸入輸出表示

還需要說明的是,BERT模型中sentence并不是語義層面的句子,可以是連續(xù)的文本。sequence指的是token 序列,可以是單個sentence也可以是合在一起的 two sentences。

部分小疑問
  1. 輸入不管有幾個sentence,總和的maxlength是固定的,與其他訓(xùn)練任務(wù)一樣
  2. segment可以有多種(可以大于2,只是比較少見),如果只有一種那么Segment embedding只有一個E_A

預(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í),最終的loss = loss_{MLM} + loss_{NSP}
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.

學(xué)習(xí)資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容