BERT-Google Code
Pre-training of Deep Bidirectional Transformers for Language Understanding
? ? ? ?EMLo的熱度還沒(méi)降下來(lái)(涼了),緊接著OpenAI GPT和ELMo的Google BERT,在很多個(gè)NLP任務(wù)中都獲得了大幅度的提升,又成了NLP的一個(gè)牛逼瘋了大熱點(diǎn) 。
? ? ? ?下面記錄一下對(duì)論文的理解和筆記。
1、相關(guān)知識(shí)
? ? ? ?預(yù)訓(xùn)練模型,BERT是一個(gè)預(yù)訓(xùn)練模型。簡(jiǎn)單的來(lái)說(shuō)就是一個(gè)模型通過(guò)大數(shù)據(jù)集A來(lái)訓(xùn)練,學(xué)習(xí)到一個(gè)關(guān)于數(shù)據(jù)集A的參數(shù)。當(dāng)進(jìn)行數(shù)據(jù)集B的任務(wù)時(shí),先調(diào)用關(guān)于A的參數(shù)作為初始參數(shù),然后再通過(guò)數(shù)據(jù)集B進(jìn)行再訓(xùn)練,并調(diào)整參數(shù),逐漸調(diào)整成為適合數(shù)據(jù)集B的模型,也就是“fine-tuning(微調(diào))”。
? ? ? ?這個(gè)特性的特點(diǎn)就是可以用很少的數(shù)據(jù)集B就能訓(xùn)練得到很好的訓(xùn)練參數(shù),即,一定程度上的繼承了在數(shù)據(jù)集A訓(xùn)練好的參數(shù),通過(guò)微調(diào)使之快速適應(yīng)數(shù)據(jù)集B。而且通常這樣做,會(huì)得到比只用數(shù)據(jù)B訓(xùn)練得到的模型參數(shù)更好。
2、BERT
? ? ? ?主要貢獻(xiàn):雙向預(yù)訓(xùn)練對(duì)語(yǔ)言表示的重要性,使用MLM(Masked Language Model,遮蔽語(yǔ)言模型),語(yǔ)句級(jí)訓(xùn)練NextSentence任務(wù)
? ? ? ?論文提出了兩種不同Size的BERT模型:
? ? ? ?? ? ? ?BERTbase:L=12,H=768,A=12,TotalParams = 110M(Base版本的提出意在與GPT模型有相同的模型size,用以對(duì)比參照)
? ? ? ?? ? ? ?BERTlarge:L=24,H=1024,A=16,TotalParams = 340M
L:指網(wǎng)絡(luò)的層數(shù)
H:指隱層的單元數(shù)
A:指使用的自注意力的頭數(shù)(Attention Is All You Need)
? ? ? ? 兩者的差別就是大小不同,在后面的實(shí)驗(yàn)結(jié)果部分,BERTlarge版本大概比base版本要再高約1% ~ 2%左右,在CoLA數(shù)據(jù)集差8%左右,RTE在4%左右。
? ? ? ?模型結(jié)構(gòu)對(duì)比

? ? ? ?OpenAI GPT就是只用到了從左往右的上下文信息來(lái)做訓(xùn)練。

? ? ? ?而ELMo使用的是兩個(gè)獨(dú)立的單向LSTM來(lái)做訓(xùn)練。據(jù)說(shuō)ELMo使用時(shí)效率比較低,而且很快又被提出的BERT強(qiáng)勢(shì)壓在頭上,所以ELMo小火之后,就沒(méi)然后了。

? ? ? ?BERT的結(jié)構(gòu)主要是基于多層多個(gè)雙向Transformer(從左到右和從右到左)。Transformer在Attention論文中應(yīng)用MT(機(jī)器翻譯)任務(wù)時(shí)用了6層的Transformer。從結(jié)構(gòu)上來(lái)講,Transformer之間用的是Residual Connection,并且有batch normarlization這種“常規(guī)操作”,所以得以實(shí)現(xiàn)多層網(wǎng)絡(luò)。而疑問(wèn)在于多層的網(wǎng)絡(luò)結(jié)構(gòu)可以在NLP任務(wù)中學(xué)習(xí)到什么特征?有論點(diǎn)認(rèn)為低層網(wǎng)絡(luò)偏向于語(yǔ)法特征學(xué)習(xí),高層網(wǎng)絡(luò)偏向于語(yǔ)義特征學(xué)習(xí),但這還沒(méi)有得到論證。
? ? ? ?Task1:MLM(遮蔽語(yǔ)言模型)
? ? ? ?BERT創(chuàng)新性的一個(gè)亮點(diǎn)就是對(duì)輸入數(shù)據(jù)的處理,“MLM”,即遮蔽語(yǔ)言模型。BERT通過(guò)對(duì)輸入句子15%的token進(jìn)行隨機(jī)遮蔽(隨機(jī)遮蔽的原因是為了減少未來(lái)fine-tuning時(shí)遇到未見(jiàn)詞的可能性),然后將masked token的位置輸出的最終隱層向量送到softmax,來(lái)預(yù)測(cè)masked token。而對(duì)于遮蓋住的token在NLP下游任務(wù)中不存在這種Mask標(biāo)記,因此為了解決這個(gè)問(wèn)題,作者按照一定的比例來(lái)進(jìn)行輸入原詞或者輸入某個(gè)隨機(jī)詞。
文中例如:My dog is hairy
- 80%概率:用[mask] 標(biāo)記替換:My dog is hairy -->My dog is [mask]
- 10%概率:隨機(jī)詞替換要標(biāo)記位置:My dog is hairy -->My dog is pig.
- 10%概率:不做替換操作:My dog is hairy -->My dog is hairy. (無(wú)替換)
? ? ? ?Transformer
? ? ? ?Transformer已經(jīng)提到,是來(lái)自于同是Google提出的《Attention Is All You Need》,是一種可以替代CNN和RNN的新架構(gòu),用來(lái)實(shí)現(xiàn)MT任務(wù)。CNN處理文本的缺陷是,卷積操作先天不適合用于文本序列操作,RNN沒(méi)有并行化,很容易超出內(nèi)存限制。
Transformer 結(jié)構(gòu)
? ? ? ?上圖就是Transformer的結(jié)構(gòu)圖,分成左邊Nx的encoder部分和右邊Nx的decoder部分,相比較于RNN+Attention常見(jiàn)的encoder-decoder之間的Attention,還多出encoder和decoder內(nèi)部的self-attention。每個(gè)Attention都有Multi-Head特征,最后通過(guò)Position encoding加入沒(méi)有考慮過(guò)的位置信息。
? ? ? ?Multi - Head Attention
? ? ? ?將一個(gè)詞的vector,切分成h個(gè)維度,求attention相似度(點(diǎn)積、cosine、MLP)時(shí)每個(gè)h維度計(jì)算。由于單詞映射在高維空間作為向量形式,每一維空間都可以學(xué)習(xí)到不同的特征,相鄰空間所學(xué)到的結(jié)果更相似,相較于全體空間放到一起更具合理性。比如對(duì)于vector-size = 512的詞向量,取h=8,每64個(gè)空間做一個(gè)Attention,學(xué)到的結(jié)果更細(xì)化,更合理(即高維空間中的相鄰維度具有的聯(lián)系更緊密,我猜)。
? ? ? ?Self - Attention
? ? ? ?每個(gè)詞位置的詞都可以無(wú)視距離和方向,有機(jī)會(huì)和句子詞序列中的每個(gè)詞進(jìn)行encoding。兩個(gè)詞的聯(lián)系越強(qiáng),self-attention的值越大。
? ? ? ?Position Encoding
? ? ? ?因?yàn)門(mén)ransformer既沒(méi)有RNN的循環(huán)單元也沒(méi)有CNN的卷積操作,但序列順序信息是非常重要的特征。
? ? ? ?Transformer計(jì)算token的位置信息(這里使用正弦波),類(lèi)似信號(hào)的周期性變化。這樣的循環(huán)函數(shù)可以一定程度上增加模型的泛化能力。
? ? ? ?? ? ? ?PE (pos,2i) = sin(pos/10000 2i/d model )
? ? ? ?? ? ? ?PE (pos,2i+1) = cos(pos/10000 2i/d model )
? ? ? ?但BERT直接訓(xùn)練一個(gè)Position Embedding 來(lái)保留位置信息,每個(gè)位置隨機(jī)初始化一個(gè)向量,加入模型訓(xùn)練,最后就得到一個(gè)包含位置信息的embedding(emmmm)。BERT最后這個(gè)Position Embedding 和 Word Embedding選擇使用 直接拼接。
? ? ? ?Task2:Next Sentence Prediction
? ? ? ?句子級(jí)別的連續(xù)性預(yù)測(cè)任務(wù),即預(yù)測(cè)輸入BERT的兩端文本是否為連續(xù)的文本。訓(xùn)練時(shí),輸入模型的第二句以50%的概率從全部文本中隨機(jī)抽取,剩下50%的概率選取第一個(gè)句子的后續(xù)一個(gè)句子作為輸入。(其實(shí)就是做句子級(jí)匹配的二分類(lèi))
即如下:
? ? ? ?[Input]:[CLS]太陽(yáng)天[mask]照[SEP]我[mask]去學(xué)校[SEP]
? ? ? ?[Label]:IsNext
? ? ? ?[Input]:[CLS]太陽(yáng)天[mask]照[SEP]交給警察[mask]叔手里面[SEP]
? ? ? ?[Label]:NotNext
(雖然這個(gè)訓(xùn)練任務(wù)非常的簡(jiǎn)單,但是后來(lái)證明這項(xiàng)訓(xùn)練任務(wù)對(duì)QA和NLI都極有幫助)
? ? ? ?Segment Embedding
BERT Input Representation

? ? ? ?The input embeddings is the sum of the token embeddings, the segmentation embeddings and position embeddings.
? ? ? ?即直接拼接各個(gè)Embedding組合。
3、遷移策略
下游NLP任務(wù)分類(lèi):
a). 序列標(biāo)注:分詞、NER、語(yǔ)義標(biāo)注…
b).分類(lèi)任務(wù):文本分類(lèi)、情感識(shí)別…
c).句子關(guān)系判斷:QA、自然語(yǔ)言推理、文本蘊(yùn)含…
d).生成式任務(wù):機(jī)器翻譯、文本摘要、文本生成…
? ? ? ?BERT 將傳統(tǒng)大量在下游具體的NLP任務(wù)中做的操作轉(zhuǎn)移到預(yù)訓(xùn)練詞向量中,在獲得BERT詞向量后,最終只需要在詞向量上加簡(jiǎn)單的MLP或線(xiàn)性分類(lèi)器即可。
4、GLUE語(yǔ)料集
實(shí)驗(yàn)數(shù)據(jù)以及對(duì)應(yīng)的NLP任務(wù)
- MNLI:蘊(yùn)含關(guān)系推斷
- QQP:問(wèn)題對(duì)是否等價(jià)
- QNLI:句子是都回答問(wèn)句
- SST-2:情感分析
- CoLA:句子語(yǔ)言性判斷
- STS-B:語(yǔ)義相似
- MRPC:句子對(duì)是都語(yǔ)義等價(jià)
- RTE:蘊(yùn)含關(guān)系推斷
- WNLI:蘊(yùn)含關(guān)系推斷
References:
? ? ? ?BERT Paper
? ? ? ?Attention Paper
? ? ? ?Attention Is All You Need 閱讀筆記
? ? ? ?BERT的理解
? ? ? ?徹底搞懂BERT
? ? ? ?BERT介紹
