BERT:Pre-training of Deep Bidirectional Transformer for Language Understanding
谷歌AI團(tuán)隊發(fā)布,在機(jī)器閱讀理解SQuAD1.1跑出的成績,在兩個指標(biāo)上全面超越人類。
GLUE基準(zhǔn)80.04%(7.6%絕對提升),MultiNLI準(zhǔn)確率86.7%(5.6%絕對提升)
BERT= Bidirectional Encoder Representation from Transformers
Pre-training Objective : MLM(Masked Language Model), 隨機(jī)mask input中一些tokens,目標(biāo)就是根據(jù)context去預(yù)測mask位置原始的詞匯id
除了MLM,引入next sentence prediction 任務(wù)聯(lián)合訓(xùn)練pair級別的特征表示
貢獻(xiàn)點(diǎn):
1、證明了bidirectional對文本特征表示的重要性
2、證明了預(yù)訓(xùn)練的特征表示能夠消除很多繁重的任務(wù)相關(guān)的網(wǎng)絡(luò)結(jié)構(gòu)
3、11個NLP任務(wù)上,提升了state of art水平
應(yīng)用預(yù)訓(xùn)練模型的兩個方案:
1、Feature based
ELMo方法希望通過語言模型提取上下文敏感的表示特征,把任務(wù)相關(guān)的結(jié)構(gòu)和上下文word embedding結(jié)合起來.
2、Fine-tuning
在有監(jiān)督的fine-tune指定任務(wù)前,先通過語言模型LM的目標(biāo),預(yù)訓(xùn)練模型
BERT核心
模型架構(gòu)
雙向的叫Transfer Encoder
單向的叫Transfer Decoder
BERT vs OpenAI GPT vs ELMo

輸入表示Input Representation
多個Sentence可以拼成一個sentence
token Representation = token embedding + segment(句) + position embedding
1)tokens embedding用WordPiece embedding(Wu et al., 2016),3w token詞匯
2)positional embedding支持序列長度到512個tokens
3)Segment embedding,第一句所有token都用A代替,第二句都用B代替
Pre-training 任務(wù)
不用傳統(tǒng)的左向右或者右向左的LM來預(yù)訓(xùn)練 BERT,采用兩個新的無監(jiān)督的預(yù)測任務(wù)來實現(xiàn)預(yù)訓(xùn)練。
1)任務(wù)一:Masked LM
15%的比例,在每個sequence中,隨機(jī)的mask掉 WordPiece中的tokens;同時也只predict被mask掉的位置上的words
這個方法有2個缺點(diǎn)downsides:
A:因為[MASK]字符在fine-tuning階段根本不會存在,所以在pre-training階段用[MASK]代替原來的word參與訓(xùn)練,會到只pre-training和fine-tuning階段mismatch。
解決辦法是:在整體15%的隨機(jī)中,有80%用[MASK]替換選中的word,10%用一個隨機(jī)的word代替選中的word,剩下10%的比例保持選中的word不變
B:因為在每一輪訓(xùn)練(each batch)只有15%的tokens會被預(yù)測,pre-training階段的模型收斂就需要迭代更多的steps(相比于單向的模型,預(yù)測所有的word被預(yù)測)
2)任務(wù)二:Next Sentence Prediction
理解2個text sentence之間的relationship,這個relation是不能直接用LM模型學(xué)習(xí)到的。
構(gòu)建有一個2分類任務(wù)binarized next sentence prediction task,訓(xùn)練數(shù)據(jù)可以從任何一個單語種的語料庫中生成:對于AB兩個sentence,50%的概率B就是實際在A后面的sentence,另外50%的概率B是從語料中隨機(jī)選擇的一個sentence。
最終這個任務(wù)的Accuracy達(dá)到97%~98%
Pre-training過程
數(shù)據(jù):BooksCorpus(800M words) + English Wikipedia(2500M words)
Wikipedia的數(shù)據(jù)只取text段落,忽略列表、表格等
從語料中,抽樣2個spans作為sentence,第一個sentence作為A Embeding,第二個作為B Embeding;50%的概率B是實際的sentence,另外50% B是隨機(jī)sentence.
抽樣時保證A+B的長度<512 tokens
LM masking:在用wordpiece 分詞(tokenization)后,均勻按15%的比例(rate)mask掉其中的tokens。沒有任何特殊的操作。
batchsize = 256 sequence(256*512tokens = 128,000 tokens/batch)
steps=1,000,000 (40 epochs / 3.3 billion word corpus)
Adam lr=1e-4, beta1=0.9 beta2=0.999
L2 weight decay = 0.01
lr adj step = 10,000 steps, linear decay
dropout p=0.1 all layers
activation = gelu (不是relu)
Loss = mean masked LM Likelihood + mean next sentence prediction likelihood
Fine-tuning過程

A:sequence Level的分類任務(wù)
為了得到一個固定維度的整句特征表示,直接取第一個token([CLS])的final hidden state(Transformer output),記作C。后面唯一需要加一個分類層W
P= softmax(CW)
BERT 和 W的所有參數(shù),一起finetune
B:span-level 和 token-level的預(yù)測任務(wù)
需要針對任務(wù)做微小的調(diào)整
batch size、lr和 epochs不同,其他超參大部分相同
C:SQuAD v1.1——StandFord Question Answering Dataset
100K QA pairs
給定一個問題Q,以及一段包含答案A的文字段落paragraph,任務(wù)的目標(biāo)是預(yù)測在段落中,是答案文本段span
做法:
a)將question和paragraph合并成一個sequence的特征表示,Q用A Embeding,P用B Embeding。
b)需要學(xué)習(xí)的新參數(shù)是一個起始向量S,以及一個結(jié)束向量E。每個token對應(yīng)的Ti代表最后的hidden vector。
i是Answer起始位置的概率是P = softmax(S·T),對Ti和S的dot product做softmax
對結(jié)束位置的計算也用同樣的公式
fine-tune 3 epochs, lr = 5e-5, batchsize = 32
在Inference階段,因為end predict并不依賴start predict,所以需要加一個約束:end要在start之后。除了這個,再沒有其他啟發(fā)式heuristic的規(guī)則。
D:命名實體識別 CoNLL數(shù)據(jù)集
200k words,標(biāo)記為5個entity類別:Person、Organization、Location、Miscellaneous、Other
每個Ti單獨(dú)input進(jìn)一個分類layer,預(yù)測時不依賴兩邊其他詞的預(yù)測。