BERT框架
BERT有兩部分:pre-training和fine-tuning捎谨。在pre-training階段濒生,會(huì)在沒有標(biāo)注數(shù)據(jù)且不同預(yù)訓(xùn)練任務(wù)上訓(xùn)練模型商源;在fine-tuning階段寂诱,BERT會(huì)根據(jù)預(yù)訓(xùn)練模型的參數(shù)初始化癣缅,然后在下游任務(wù)的標(biāo)注數(shù)據(jù)進(jìn)行fine-tuned栈戳。
BERT是一個(gè)多層雙向的transformer encoder模型岂傲。是的,BERT中的transformer只有encoder子檀,沒有decoderD饕础!命锄!
模型輸入輸出表示
BERT模型中使用的是WordPiece embeddings堰乔,最后一層隱藏層的向量會(huì)作為每個(gè)token的表示。另外脐恩,有3個(gè)特殊字符如下:
- [CLS]:用于分類任務(wù)中每個(gè)序列的第一個(gè)token
- [SEP]:作為句子對(duì)(A镐侯,B)的分割符,句子首尾都有,具體可看輸入輸出表示部分苟翻。
-
[MASK]:用于masked ML中word的替換
輸入輸出表示
還需要說明的是韵卤,BERT模型中sentence并不是語義層面的句子,可以是連續(xù)的文本崇猫。sequence指的是token 序列沈条,可以是單個(gè)sentence也可以是合在一起的 two sentences。
部分小疑問
- 輸入不管有幾個(gè)sentence诅炉,總和的maxlength是固定的蜡歹,與其他訓(xùn)練任務(wù)一樣
- segment可以有多種(可以大于2,只是比較少見)涕烧,如果只有一種那么Segment embedding只有一個(gè)
預(yù)訓(xùn)練(pre-training)BERT
相比之前的預(yù)訓(xùn)練模型月而,BERT在預(yù)訓(xùn)練階段做了兩個(gè)無監(jiān)督任務(wù):MLM(masked LM)和next sentence prediction(NSP)。
通過源碼能看到:
- MLM和NSP任務(wù)的輸入都是一樣的议纯,即輸入中都會(huì)有masked token
- 在masked LM任務(wù)中只會(huì)預(yù)測(cè)masked token父款,其他token不做預(yù)測(cè)。
- 由于是多任務(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)過兩層的雙向操作,每個(gè)位置上的輸出就已經(jīng)帶有了原本這個(gè)位置上的詞的信息了阀参。這樣的“窺探”會(huì)導(dǎo)致模型預(yù)測(cè)詞的任務(wù)變得失去意義肝集,因?yàn)槟P鸵呀?jīng)看到每個(gè)位置上是什么詞了。ref: 《Semi-supervised sequence tagging with bidirectional language models》.
masked LM的做法:
- 隨機(jī)選擇一定比例的token隨機(jī)masked结笨,然后再預(yù)測(cè)這些token包晰。這個(gè)比例作者選的是15%,另外文中提到“In contrast to denoising auto-encoders (Vincent et al., 2008), we only predict the masked words rather than recon- structing the entire input.”
- 因?yàn)閇MASK] token不出現(xiàn)在fine-tuning階段炕吸,因此在pre-training階段伐憾,對(duì)mask做了點(diǎn)其他處理:如果某個(gè)token被選擇mask,那么80%的情況是被替換成[MASK]赫模,10%的情況是被隨機(jī)替換成其他token树肃,10%保持原token不替換。
在masked LM任務(wù)中只會(huì)預(yù)測(cè)masked token瀑罗,其他token不做預(yù)測(cè)胸嘴。
Task2: NSP
有一些任務(wù)比如問答(QA)和自然語言推理(NLI)都是對(duì)兩句話關(guān)系的理解,但是語言模型無法捕捉這種信息斩祭。為了讓訓(xùn)練的模型能獲取句子之間的關(guān)系劣像,在預(yù)訓(xùn)練的時(shí)候多加了一個(gè)二值化的NSP任務(wù)。具體做法:
- 對(duì)每一個(gè)訓(xùn)練樣本(A摧玫,B)對(duì)耳奕,50%用真實(shí)的(A,B)對(duì)被標(biāo)注為IsNext,50%用錯(cuò)誤的(A屋群,B')對(duì)標(biāo)注為NotNext闸婴,其中B'隨機(jī)來自于語料。
- 目標(biāo)函數(shù)與 Jernite et al. (2017) and (Logeswaran and Lee (2018))[] 比較相近芍躏。
對(duì)這部分我的疑問是:
- 如果不是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.