更新時(shí)間:2020-09-07 來源:黑馬程序員 瀏覽量:
本文的目的是向NLP愛好者們詳細(xì)解析一個(gè)著名的語言模型-BERT。 全文將分4個(gè)部分由淺入深的依次講解。
1.Bert簡介
BERT是2018年10月由Google AI研究院提出的一種預(yù)訓(xùn)練模型。
BERT的全稱是Bidirectional Encoder Representation from Transformers。BERT在機(jī)器閱讀理解頂級水平測試SQuAD1.1中表現(xiàn)出驚人的成績: 全部兩個(gè)衡量指標(biāo)上全面超越人類,并且在11種不同NLP測試中創(chuàng)出SOTA表現(xiàn),包括將GLUE基準(zhǔn)推高至80.4% (絕對改進(jìn)7.6%),MultiNLI準(zhǔn)確度達(dá)到86.7% (絕對改進(jìn)5.6%),成為NLP發(fā)展史上的里程碑式的模型成就。
2.關(guān)于Bert的模型架構(gòu)
總體架構(gòu):如下圖所示, 最左邊的就是BERT的架構(gòu)圖,可以很清楚的看到BERT采用了Transformer Encoder block進(jìn)行連接, 因?yàn)槭且粋€(gè)典型的雙向編碼模型。
3.1 關(guān)于Bert訓(xùn)練過程中的關(guān)鍵點(diǎn)
1)四大關(guān)鍵詞: Pre-trained, Deep, Bidirectional Transformer, Language Understanding
a. Pre-trained: 首先明確這是個(gè)預(yù)訓(xùn)練的語言模型,未來所有的開發(fā)者可以直接繼承!
整個(gè)Bert模型最大的兩個(gè)亮點(diǎn)都集中在Pre-trained的任務(wù)部分。
b. Deep
Bert_BASE:Layer = 12, Hidden = 768, Head = 12, Total Parameters = 110M
Bert_LARGE:Layer = 24, Hidden = 1024, Head = 16, Total Parameters = 340M
對比于Transformer: Layer = 6, Hidden = 2048, Head = 8,是個(gè)淺而寬,說明Bert這樣深而窄的模型效果更好(和CV領(lǐng)域的總體結(jié)論基本一致)。
C. Bidirectional Transformer: Bert的個(gè)創(chuàng)新點(diǎn),它是個(gè)雙向的Transformer網(wǎng)絡(luò)。
Bert直接引用了Transformer架構(gòu)中的Encoder模塊,并舍棄了Decoder模塊, 這樣便自動擁有了雙向編碼能力和強(qiáng)大的特征提取能力。
D. Language Understanding: 更加側(cè)重語言的理解,而不僅僅是生成(Language Generation)
3.2 Bert的語言輸入表示包含了3個(gè)組成部分: (見上面第二張圖)
詞嵌入張量: word embeddings
語句分塊張量: segmentation embeddings
位置編碼張量: position embeddings
最終的embedding向量是將上述的3個(gè)向量直接做加和的結(jié)果。
3.3: Bert的預(yù)訓(xùn)練中引入兩大核心任務(wù) (這兩個(gè)任務(wù)也是Bert原始論文的兩個(gè)最大的創(chuàng)新點(diǎn))
a 引入Masked LM(帶mask的語言模型訓(xùn)練)
a.1 在原始訓(xùn)練文本中,隨機(jī)的抽取15%的token作為即將參與mask的對象。
a.2 在這些被選中的token中,數(shù)據(jù)?生成器?并不不是把他們?nèi)孔兂蒣MASK],?而是有下列列3個(gè)選擇:
a.2.1 在80%的概率下,用[MASK]標(biāo)記替換該token, 比如my dog is hairy -> my dog is [MASK]
a.2.2 在10%的概率下, ??個(gè)隨機(jī)的單詞替換該token, 比如my dog is hairy -> my dog is apple
a.2.3 在10%的概率下, 保持該token不變, 比如my dog is hairy -> my dog is hairy
a.3 Transformer Encoder在訓(xùn)練的過程中, 并不知道它將要預(yù)測哪些單詞? 哪些單詞是原始的樣? 哪些單詞被遮掩成了[MASK]? 哪些單詞被替換成了其他單詞? 正是在這樣一種高度不確定的情況下, 反倒逼著模型快速學(xué)習(xí)該token的分布式上下文的語義, 盡最大努力學(xué)習(xí)原始語言說話的樣子!!! 同時(shí)因?yàn)樵嘉谋局兄挥?5%的token參與了MASK操作, 并不會破壞原語言的表達(dá)能力和語言規(guī)則!!!
b 引入Next Sentence Prediction (下?句話的預(yù)測任務(wù))
b.1 目的是為了服務(wù)問答,推理,句?主題關(guān)系等NLP任務(wù)。
b.2 所有的參與任務(wù)訓(xùn)練的語句都被選中參加。
·50%的B是原始?本中實(shí)際跟隨A的下?句話。(標(biāo)記為IsNext,代表正樣本)
·50%的B是原始?本中隨機(jī)抽取的?句話。(標(biāo)記為NotNext,代表負(fù)樣本)
b.3 在該任務(wù)中,Bert模型可以在測試集上取得97-98%的準(zhǔn)確率。
3.4 關(guān)于基于Bert的模型微調(diào)(fine-tuning)
只需要將特定任務(wù)的輸入,輸出插入到Bert中,利用Transformer強(qiáng)大的注意力機(jī)制就可以模擬很多下游任務(wù)。(句子對關(guān)系判斷,單文本主題分類,問答任務(wù)(QA),單句貼標(biāo)簽(命名實(shí)體識別))
微調(diào)的若干經(jīng)驗(yàn):
batch size:16,32
epochs:3,4
learning rate:2e-5,5e-5
全連接層添加:layers:1-3,hidden_size:64,128
4、Bert模型本身的優(yōu)點(diǎn)和缺點(diǎn)。
優(yōu)點(diǎn): Bert的基礎(chǔ)建立在transformer之上,擁有強(qiáng)大的語言表征能力和特征提取能力。在11項(xiàng) NLP基準(zhǔn)測試任務(wù)中達(dá)到了state of the art。同時(shí)再次證明了雙向語言模型的能力更加強(qiáng)大。
缺點(diǎn):
1)可復(fù)現(xiàn)性差,基本沒法做,只能拿來主義直接用!
2)訓(xùn)練過程中因?yàn)槊總€(gè)batch_size中的數(shù)據(jù)只有15%參與預(yù)測,模型收斂較慢,需要強(qiáng)大的算力支撐!
引申:
1)深度學(xué)習(xí)就是表征學(xué)習(xí) (Deep learning is representation learning)
·整個(gè)Bert在11項(xiàng)語言模型大賽中,基本思路就是雙向Transformer負(fù)責(zé)提取特征,然后整個(gè)網(wǎng)絡(luò)加一個(gè)全連接線性層作為fine-tuning微調(diào)。但即便如此傻瓜式的組裝,在NLP中著名的難任務(wù)-NER(命名實(shí)體識別)中,甚至直接去除掉了CRF層,照樣大超越BiLSTM + CRF的組合效果, 這去哪兒說理去???
2)規(guī)模的極端重要性 (Scale matters)
不管是Masked LM,還是下一句預(yù)測Next Sentence Prediction,都不是首創(chuàng)的概念,之前在其他的模型中也提出過,但是因?yàn)閿?shù)據(jù)規(guī)模+算力局限沒能讓世人看到這個(gè)模型的潛力,那些Paper也就不值錢了。但是到了谷歌手里, 不差錢的結(jié)果就是Paper值錢了!!
3)關(guān)于進(jìn)一步的研究展示了Bert在不同的層學(xué)習(xí)到了什么。
·低的網(wǎng)絡(luò)層捕捉到了短語結(jié)構(gòu)方面的信息。
·單詞和字的特征表現(xiàn)在3-4層,句法信息的特征表現(xiàn)在6-9層,句?語義信息的特征表現(xiàn)在10-12層。
·主謂一致的特征表現(xiàn)在8-9層 (屬于句法信息的一種)。
猜你喜歡: