目錄
一、前言
二、如何理解BERT模型
三、BERT模型解析
1、論文的主要貢獻(xiàn)
2、模型架構(gòu)
3、關(guān)鍵創(chuàng)新
3、實(shí)驗(yàn)結(jié)果
四、BERT模型的影響
五、對(duì)BERT模型的觀點(diǎn)
六、參考文獻(xiàn)
一、前言
最近谷歌搞了個(gè)大新聞,公司AI團(tuán)隊(duì)新發(fā)布的BERT模型,在機(jī)器閱讀理解頂級(jí)水平測(cè)試SQuAD1.1中表現(xiàn)出驚人的成績(jī):全部?jī)蓚€(gè)衡量指標(biāo)上全面超越人類(lèi),并且還在11種不同NLP測(cè)試中創(chuàng)出最佳成績(jī),包括將GLUE基準(zhǔn)推至80.4%(絕對(duì)改進(jìn)7.6%),MultiNLI準(zhǔn)確度達(dá)到86.7% (絕對(duì)改進(jìn)率5.6%)等。可以預(yù)見(jiàn)的是,BERT將為NLP帶來(lái)里程碑式的改變,也是NLP領(lǐng)域近期最重要的進(jìn)展。
谷歌團(tuán)隊(duì)的Thang Luong直接定義:BERT模型開(kāi)啟了NLP的新時(shí)代!
從現(xiàn)在的大趨勢(shì)來(lái)看,使用某種模型預(yù)訓(xùn)練一個(gè)語(yǔ)言模型看起來(lái)是一種比較靠譜的方法。從之前AI2的 ELMo,到 OpenAI的fine-tune transformer,再到Google的這個(gè)BERT,全都是對(duì)預(yù)訓(xùn)練的語(yǔ)言模型的應(yīng)用。
BERT這個(gè)模型與其它兩個(gè)不同的是:
1、它在訓(xùn)練雙向語(yǔ)言模型時(shí)以減小的概率把少量的詞替成了Mask或者另一個(gè)隨機(jī)的詞。我個(gè)人感覺(jué)這個(gè)目的在于使模型被迫增加對(duì)上下文的記憶。至于這個(gè)概率,我猜是Jacob拍腦袋隨便設(shè)的。
2、增加了一個(gè)預(yù)測(cè)下一句的loss。這個(gè)看起來(lái)就比較新奇了。
BERT模型具有以下兩個(gè)特點(diǎn):
第一,是這個(gè)模型非常的深,12層,并不寬(wide),中間層只有1024,而之前的Transformer模型中間層有2048。這似乎又印證了計(jì)算機(jī)圖像處理的一個(gè)觀點(diǎn)——深而窄 比 淺而寬 的模型更好。
第二,MLM(Masked Language Model),同時(shí)利用左側(cè)和右側(cè)的詞語(yǔ),這個(gè)在ELMo上已經(jīng)出現(xiàn)了,絕對(duì)不是原創(chuàng)。其次,對(duì)于Mask(遮擋)在語(yǔ)言模型上的應(yīng)用,已經(jīng)被Ziang Xie提出了(我很有幸的也參與到了這篇論文中):[1703.02573] Data Noising as Smoothing in Neural Network Language Models。這也是篇巨星云集的論文:Sida Wang,Jiwei Li(香儂科技的創(chuàng)始人兼CEO兼史上發(fā)文最多的NLP學(xué)者),Andrew Ng,Dan Jurafsky都是Coauthor。但很可惜的是他們沒(méi)有關(guān)注到這篇論文。用這篇論文的方法去做Masking,相信BRET的能力說(shuō)不定還會(huì)有提升。
二、如何理解BERT模型
1、BERT 要解決什么問(wèn)題?
通常情況 transformer 模型有很多參數(shù)需要訓(xùn)練。譬如 BERT BASE 模型: L=12, H=768, A=12, 需要訓(xùn)練的模型參數(shù)總數(shù)是 12 * 768 * 12 = 110M。這么多參數(shù)需要訓(xùn)練,自然需要海量的訓(xùn)練語(yǔ)料。如果全部用人力標(biāo)注的辦法,來(lái)制作訓(xùn)練數(shù)據(jù),人力成本太大。
受《A Neural Probabilistic Language Model》論文的啟發(fā),BERT 也用 unsupervised 的辦法,來(lái)訓(xùn)練 transformer 模型。神經(jīng)概率語(yǔ)言模型這篇論文,主要講了兩件事兒,1. 能否用數(shù)值向量(word vector)來(lái)表達(dá)自然語(yǔ)言詞匯的語(yǔ)義?2. 如何給每個(gè)詞匯,找到恰當(dāng)?shù)臄?shù)值向量?
這篇論文寫(xiě)得非常精彩,深入淺出,要言不煩,而且面面俱到。經(jīng)典論文,值得反復(fù)咀嚼。很多同行朋友都熟悉這篇論文,內(nèi)容不重復(fù)說(shuō)了。常用的中文漢字有 3500 個(gè),這些字組合成詞匯,中文詞匯數(shù)量高達(dá) 50 萬(wàn)個(gè)。假如詞向量的維度是 512,那么語(yǔ)言模型的參數(shù)數(shù)量,至少是 512 * 50萬(wàn) = 256M
模型參數(shù)數(shù)量這么大,必然需要海量的訓(xùn)練語(yǔ)料。從哪里收集這些海量的訓(xùn)練語(yǔ)料?《A Neural Probabilistic Language Model》這篇論文說(shuō),每一篇文章,天生是訓(xùn)練語(yǔ)料。難道不需要人工標(biāo)注嗎?回答,不需要。
我們經(jīng)常說(shuō),“說(shuō)話不要顛三倒四,要通順,要連貫”,意思是上下文的詞匯,應(yīng)該具有語(yǔ)義的連貫性。基于自然語(yǔ)言的連貫性,語(yǔ)言模型根據(jù)前文的詞,預(yù)測(cè)下一個(gè)將出現(xiàn)的詞。如果語(yǔ)言模型的參數(shù)正確,如果每個(gè)詞的詞向量設(shè)置正確,那么語(yǔ)言模型的預(yù)測(cè),就應(yīng)該比較準(zhǔn)確。天下文章,數(shù)不勝數(shù),所以訓(xùn)練數(shù)據(jù),取之不盡用之不竭。
深度學(xué)習(xí)四大要素,1. 訓(xùn)練數(shù)據(jù)、2. 模型、3. 算力、4. 應(yīng)用。訓(xùn)練數(shù)據(jù)有了,接下去的問(wèn)題是模型。
2、BERT 的五個(gè)關(guān)鍵詞 Pre-training、Deep、Bidirectional、Transformer、Language Understanding 分別是什么意思?
《A Neural Probabilistic Language Model》這篇論文講的 Language Model,嚴(yán)格講是語(yǔ)言生成模型(Language Generative Model),預(yù)測(cè)語(yǔ)句中下一個(gè)將會(huì)出現(xiàn)的詞匯。語(yǔ)言生成模型能不能直接移用到其它 NLP 問(wèn)題上去?
譬如,淘寶上有很多用戶評(píng)論,能否把每一條用戶轉(zhuǎn)換成評(píng)分?-2、-1、0、1、2,其中 -2 是極差,+2 是極好。假如有這樣一條用戶評(píng)語(yǔ),“買(mǎi)了一件鹿晗同款襯衫,沒(méi)想到,穿在自己身上,不像小鮮肉,倒像是廚師”,請(qǐng)問(wèn)這條評(píng)語(yǔ),等同于 -2,還是其它?
語(yǔ)言生成模型,能不能很好地解決上述問(wèn)題?進(jìn)一步問(wèn),有沒(méi)有 “通用的” 語(yǔ)言模型,能夠理解語(yǔ)言的語(yǔ)義,適用于各種 NLP 問(wèn)題?BERT 這篇論文的題目很直白,《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,一眼看去,就能猜得到這篇文章會(huì)講哪些內(nèi)容。
這個(gè)題目有五個(gè)關(guān)鍵詞,分別是 Pre-training、Deep、Bidirectional、Transformers、和 Language Understanding。其中 pre-training 的意思是,作者認(rèn)為,確實(shí)存在通用的語(yǔ)言模型,先用文章預(yù)訓(xùn)練通用模型,然后再根據(jù)具體應(yīng)用,用 supervised 訓(xùn)練數(shù)據(jù),精加工(fine tuning)模型,使之適用于具體應(yīng)用。為了區(qū)別于針對(duì)語(yǔ)言生成的 Language Model,作者給通用的語(yǔ)言模型,取了一個(gè)名字,叫語(yǔ)言表征模型 Language Representation Model。
能實(shí)現(xiàn)語(yǔ)言表征目標(biāo)的模型,可能會(huì)有很多種,具體用哪一種呢?作者提議,用 Deep Bidirectional Transformers 模型。假如給一個(gè)句子 “能實(shí)現(xiàn)語(yǔ)言表征[mask]的模型”,遮蓋住其中“目標(biāo)”一詞。從前往后預(yù)測(cè)[mask],也就是用“能/實(shí)現(xiàn)/語(yǔ)言/表征”,來(lái)預(yù)測(cè)[mask];或者,從后往前預(yù)測(cè)[mask],也就是用“模型/的”,來(lái)預(yù)測(cè)[mask],稱之為單向預(yù)測(cè) unidirectional。單向預(yù)測(cè),不能完整地理解整個(gè)語(yǔ)句的語(yǔ)義。于是研究者們嘗試雙向預(yù)測(cè)。把從前往后,與從后往前的兩個(gè)預(yù)測(cè),拼接在一起 [mask1/mask2],這就是雙向預(yù)測(cè) bi-directional。細(xì)節(jié)參閱《Neural Machine Translation by Jointly Learning to Align and Translate》。
BERT 的作者認(rèn)為,bi-directional 仍然不能完整地理解整個(gè)語(yǔ)句的語(yǔ)義,更好的辦法是用上下文全向來(lái)預(yù)測(cè)[mask],也就是用 “能/實(shí)現(xiàn)/語(yǔ)言/表征/../的/模型”,來(lái)預(yù)測(cè)[mask]。BERT 作者把上下文全向的預(yù)測(cè)方法,稱之為 deep bi-directional。如何來(lái)實(shí)現(xiàn)上下文全向預(yù)測(cè)呢?BERT 的作者建議使用 Transformer 模型。這個(gè)模型由《Attention Is All You Need》一文發(fā)明。
這個(gè)模型的核心是聚焦機(jī)制,對(duì)于一個(gè)語(yǔ)句,可以同時(shí)啟用多個(gè)聚焦點(diǎn),而不必局限于從前往后的,或者從后往前的,序列串行處理。不僅要正確地選擇模型的結(jié)構(gòu),而且還要正確地訓(xùn)練模型的參數(shù),這樣才能保障模型能夠準(zhǔn)確地理解語(yǔ)句的語(yǔ)義。BERT 用了兩個(gè)步驟,試圖去正確地訓(xùn)練模型的參數(shù)。第一個(gè)步驟是把一篇文章中,15% 的詞匯遮蓋,讓模型根據(jù)上下文全向地預(yù)測(cè)被遮蓋的詞。假如有 1 萬(wàn)篇文章,每篇文章平均有 100 個(gè)詞匯,隨機(jī)遮蓋 15% 的詞匯,模型的任務(wù)是正確地預(yù)測(cè)這 15 萬(wàn)個(gè)被遮蓋的詞匯。通過(guò)全向預(yù)測(cè)被遮蓋住的詞匯,來(lái)初步訓(xùn)練 Transformer 模型的參數(shù)。
然后,用第二個(gè)步驟繼續(xù)訓(xùn)練模型的參數(shù)。譬如從上述 1 萬(wàn)篇文章中,挑選 20 萬(wàn)對(duì)語(yǔ)句,總共 40 萬(wàn)條語(yǔ)句。挑選語(yǔ)句對(duì)的時(shí)候,其中 210 萬(wàn)對(duì)語(yǔ)句,是連續(xù)的兩條上下文語(yǔ)句,另外 210 萬(wàn)對(duì)語(yǔ)句,不是連續(xù)的語(yǔ)句。然后讓 Transformer 模型來(lái)識(shí)別這 20 萬(wàn)對(duì)語(yǔ)句,哪些是連續(xù)的,哪些不連續(xù)。
這兩步訓(xùn)練合在一起,稱為預(yù)訓(xùn)練 pre-training。訓(xùn)練結(jié)束后的 Transformer 模型,包括它的參數(shù),是作者期待的通用的語(yǔ)言表征模型。
三、BERT模型解析
首先來(lái)看下谷歌AI團(tuán)隊(duì)做的這篇論文。
BERT的新語(yǔ)言表示模型,它代表Transformer的雙向編碼器表示。與最近的其他語(yǔ)言表示模型不同,BERT旨在通過(guò)聯(lián)合調(diào)節(jié)所有層中的上下文來(lái)預(yù)先訓(xùn)練深度雙向表示。因此,預(yù)訓(xùn)練的BERT表示可以通過(guò)一個(gè)額外的輸出層進(jìn)行微調(diào),適用于廣泛任務(wù)的最先進(jìn)模型的構(gòu)建,比如問(wèn)答任務(wù)和語(yǔ)言推理,無(wú)需針對(duì)具體任務(wù)做大幅架構(gòu)修改。
論文作者認(rèn)為現(xiàn)有的技術(shù)嚴(yán)重制約了預(yù)訓(xùn)練表示的能力。其主要局限在于標(biāo)準(zhǔn)語(yǔ)言模型是單向的,這使得在模型的預(yù)訓(xùn)練中可以使用的架構(gòu)類(lèi)型很有限。
在論文中,作者通過(guò)提出BERT:即Transformer的雙向編碼表示來(lái)改進(jìn)基于架構(gòu)微調(diào)的方法。
BERT 提出一種新的預(yù)訓(xùn)練目標(biāo):遮蔽語(yǔ)言模型(masked language model,MLM),來(lái)克服上文提到的單向性局限。MLM 的靈感來(lái)自 Cloze 任務(wù)(Taylor, 1953)。MLM 隨機(jī)遮蔽模型輸入中的一些 token,目標(biāo)在于僅基于遮蔽詞的語(yǔ)境來(lái)預(yù)測(cè)其原始詞匯 id。
與從左到右的語(yǔ)言模型預(yù)訓(xùn)練不同,MLM 目標(biāo)允許表征融合左右兩側(cè)的語(yǔ)境,從而預(yù)訓(xùn)練一個(gè)深度雙向 Transformer。除了遮蔽語(yǔ)言模型之外,本文作者還引入了一個(gè)“下一句預(yù)測(cè)”(next sentence prediction)任務(wù),可以和MLM共同預(yù)訓(xùn)練文本對(duì)的表示。
1、論文的主要貢獻(xiàn)
(1)證明了雙向預(yù)訓(xùn)練對(duì)語(yǔ)言表示的重要性。與之前使用的單向語(yǔ)言模型進(jìn)行預(yù)訓(xùn)練不同,BERT使用遮蔽語(yǔ)言模型來(lái)實(shí)現(xiàn)預(yù)訓(xùn)練的深度雙向表示。
(2)論文表明,預(yù)先訓(xùn)練的表示免去了許多工程任務(wù)需要針對(duì)特定任務(wù)修改體系架構(gòu)的需求。 BERT是第一個(gè)基于微調(diào)的表示模型,它在大量的句子級(jí)和token級(jí)任務(wù)上實(shí)現(xiàn)了最先進(jìn)的性能,強(qiáng)于許多面向特定任務(wù)體系架構(gòu)的系統(tǒng)。
(3)BERT刷新了11項(xiàng)NLP任務(wù)的性能記錄。本文還報(bào)告了 BERT 的模型簡(jiǎn)化研究(ablation study),表明模型的雙向性是一項(xiàng)重要的新成果。相關(guān)代碼和預(yù)先訓(xùn)練的模型將會(huì)公布在goo.gl/language/bert上。
BERT目前已經(jīng)刷新的11項(xiàng)自然語(yǔ)言處理任務(wù)的最新記錄包括:將GLUE基準(zhǔn)推至80.4%(絕對(duì)改進(jìn)7.6%),MultiNLI準(zhǔn)確度達(dá)到86.7% (絕對(duì)改進(jìn)率5.6%),將SQuAD v1.1問(wèn)答測(cè)試F1得分紀(jì)錄刷新為93.2分(絕對(duì)提升1.5分),超過(guò)人類(lèi)表現(xiàn)2.0分。
論文的核心:詳解BERT模型架構(gòu)
本節(jié)介紹BERT模型架構(gòu)和具體實(shí)現(xiàn),并介紹預(yù)訓(xùn)練任務(wù),這是這篇論文的核心創(chuàng)新。
2、模型架構(gòu)
BERT的模型架構(gòu)是基于Vaswani et al. (2017) 中描述的原始實(shí)現(xiàn)multi-layer bidirectional Transformer編碼器,并在tensor2tensor庫(kù)中發(fā)布。由于Transformer的使用最近變得無(wú)處不在,論文中的實(shí)現(xiàn)與原始實(shí)現(xiàn)完全相同,因此這里將省略對(duì)模型結(jié)構(gòu)的詳細(xì)描述。
在這項(xiàng)工作中,論文將層數(shù)(即Transformer blocks)表示為L(zhǎng),將隱藏大小表示為H,將self-attention heads的數(shù)量表示為A。在所有情況下,將feed-forward/filter 的大小設(shè)置為 4H,即H = 768時(shí)為3072,H = 1024時(shí)為4096。論文主要報(bào)告了兩種模型大小的結(jié)果:
為了進(jìn)行比較,論文選擇了BERT LARGE ,它與OpenAI GPT具有相同的模型大小。然而,重要的是,BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個(gè)token只能處理其左側(cè)的上下文。研究團(tuán)隊(duì)注意到,在文獻(xiàn)中,雙向 Transformer 通常被稱為“Transformer encoder”,而左側(cè)上下文被稱為“Transformer decoder”,因?yàn)樗梢杂糜谖谋旧伞ERT,OpenAI GPT和ELMo之間的比較如圖1所示。
圖1:預(yù)訓(xùn)練模型架構(gòu)的差異。BERT使用雙向Transformer。OpenAI GPT使用從左到右的Transformer。ELMo使用經(jīng)過(guò)獨(dú)立訓(xùn)練的從左到右和從右到左LSTM的串聯(lián)來(lái)生成下游任務(wù)的特征。三個(gè)模型中,只有BERT表示在所有層中共同依賴于左右上下文。
輸入表示(input representation)
論文的輸入表示(input representation)能夠在一個(gè)token序列中明確地表示單個(gè)文本句子或一對(duì)文本句子(例如, [Question, Answer])。對(duì)于給定token,其輸入表示通過(guò)對(duì)相應(yīng)的token、segment和position embeddings進(jìn)行求和來(lái)構(gòu)造。圖2是輸入表示的直觀表示:
圖2:BERT輸入表示。輸入嵌入是token embeddings, segmentation embeddings 和position embeddings 的總和。
具體如下:
(1)使用WordPiece嵌入(Wu et al., 2016)和30,000個(gè)token的詞匯表。用##表示分詞。
(2)使用學(xué)習(xí)的positional embeddings,支持的序列長(zhǎng)度最多為512個(gè)token。
每個(gè)序列的第一個(gè)token始終是特殊分類(lèi)嵌入([CLS])。對(duì)應(yīng)于該token的最終隱藏狀態(tài)(即,Transformer的輸出)被用作分類(lèi)任務(wù)的聚合序列表示。對(duì)于非分類(lèi)任務(wù),將忽略此向量。
(3)句子對(duì)被打包成一個(gè)序列。以兩種方式區(qū)分句子。首先,用特殊標(biāo)記([SEP])將它們分開(kāi)。其次,添加一個(gè)learned sentence A嵌入到第一個(gè)句子的每個(gè)token中,一個(gè)sentence B嵌入到第二個(gè)句子的每個(gè)token中。
(4)對(duì)于單個(gè)句子輸入,只使用 sentence A嵌入。
3、關(guān)鍵創(chuàng)新:預(yù)訓(xùn)練任務(wù)
與Peters et al. (2018) 和 Radford et al. (2018)不同,論文不使用傳統(tǒng)的從左到右或從右到左的語(yǔ)言模型來(lái)預(yù)訓(xùn)練BERT。相反,使用兩個(gè)新的無(wú)監(jiān)督預(yù)測(cè)任務(wù)對(duì)BERT進(jìn)行預(yù)訓(xùn)練。
任務(wù)1: Masked LM
從直覺(jué)上看,研究團(tuán)隊(duì)有理由相信,深度雙向模型比left-to-right 模型或left-to-right and right-to-left模型的淺層連接更強(qiáng)大。遺憾的是,標(biāo)準(zhǔn)條件語(yǔ)言模型只能從左到右或從右到左進(jìn)行訓(xùn)練,因?yàn)殡p向條件作用將允許每個(gè)單詞在多層上下文中間接地“see itself”。
為了訓(xùn)練一個(gè)深度雙向表示(deep bidirectional representation),研究團(tuán)隊(duì)采用了一種簡(jiǎn)單的方法,即隨機(jī)屏蔽(masking)部分輸入token,然后只預(yù)測(cè)那些被屏蔽的token。論文將這個(gè)過(guò)程稱為“masked LM”(MLM),盡管在文獻(xiàn)中它經(jīng)常被稱為Cloze任務(wù)(Taylor, 1953)。
在這個(gè)例子中,與masked token對(duì)應(yīng)的最終隱藏向量被輸入到詞匯表上的輸出softmax中,就像在標(biāo)準(zhǔn)LM中一樣。在團(tuán)隊(duì)所有實(shí)驗(yàn)中,隨機(jī)地屏蔽了每個(gè)序列中15%的WordPiece token。與去噪的自動(dòng)編碼器(Vincent et al., 2008)相反,只預(yù)測(cè)masked words而不是重建整個(gè)輸入。
雖然這確實(shí)能讓團(tuán)隊(duì)獲得雙向預(yù)訓(xùn)練模型,但這種方法有兩個(gè)缺點(diǎn)。首先,預(yù)訓(xùn)練和finetuning之間不匹配,因?yàn)樵趂inetuning期間從未看到[MASK]token。為了解決這個(gè)問(wèn)題,團(tuán)隊(duì)并不總是用實(shí)際的[MASK]token替換被“masked”的詞匯。相反,訓(xùn)練數(shù)據(jù)生成器隨機(jī)選擇15%的token。例如在這個(gè)句子“my dog is hairy”中,它選擇的token是“hairy”。然后,執(zhí)行以下過(guò)程:
數(shù)據(jù)生成器將執(zhí)行以下操作,而不是始終用[MASK]替換所選單詞:
80%的時(shí)間:用[MASK]標(biāo)記替換單詞,例如,my dog is hairy → my dog is [MASK]
10%的時(shí)間:用一個(gè)隨機(jī)的單詞替換該單詞,例如,my dog is hairy → my dog is apple
10%的時(shí)間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向于實(shí)際觀察到的單詞。
Transformer encoder不知道它將被要求預(yù)測(cè)哪些單詞或哪些單詞已被隨機(jī)單詞替換,因此它被迫保持每個(gè)輸入token的分布式上下文表示。此外,因?yàn)殡S機(jī)替換只發(fā)生在所有token的1.5%(即15%的10%),這似乎不會(huì)損害模型的語(yǔ)言理解能力。
使用MLM的第二個(gè)缺點(diǎn)是每個(gè)batch只預(yù)測(cè)了15%的token,這表明模型可能需要更多的預(yù)訓(xùn)練步驟才能收斂。團(tuán)隊(duì)證明MLM的收斂速度略慢于 left-to-right的模型(預(yù)測(cè)每個(gè)token),但MLM模型在實(shí)驗(yàn)上獲得的提升遠(yuǎn)遠(yuǎn)超過(guò)增加的訓(xùn)練成本。
任務(wù)2:下一句預(yù)測(cè)
許多重要的下游任務(wù),如問(wèn)答(QA)和自然語(yǔ)言推理(NLI)都是基于理解兩個(gè)句子之間的關(guān)系,這并沒(méi)有通過(guò)語(yǔ)言建模直接獲得。
在為了訓(xùn)練一個(gè)理解句子的模型關(guān)系,預(yù)先訓(xùn)練一個(gè)二進(jìn)制化的下一句測(cè)任務(wù),這一任務(wù)可以從任何單語(yǔ)語(yǔ)料庫(kù)中生成。具體地說(shuō),當(dāng)選擇句子A和B作為預(yù)訓(xùn)練樣本時(shí),B有50%的可能是A的下一個(gè)句子,也有50%的可能是來(lái)自語(yǔ)料庫(kù)的隨機(jī)句子。例如:
Input = [CLS] the man went to [MASK] store [SEP]
he bought a gallon [MASK] milk [SEP]
Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP]
penguin [MASK] are flight ##less birds [SEP]
Label = NotNext
團(tuán)隊(duì)完全隨機(jī)地選擇了NotNext語(yǔ)句,最終的預(yù)訓(xùn)練模型在此任務(wù)上實(shí)現(xiàn)了97%-98%的準(zhǔn)確率。
4、實(shí)驗(yàn)結(jié)果
如前文所述,BERT在11項(xiàng)NLP任務(wù)中刷新了性能表現(xiàn)記錄!在這一節(jié)中,團(tuán)隊(duì)直觀呈現(xiàn)BERT在這些任務(wù)的實(shí)驗(yàn)結(jié)果,具體的實(shí)驗(yàn)設(shè)置和比較請(qǐng)閱讀原論文.
圖3:我們的面向特定任務(wù)的模型是將BERT與一個(gè)額外的輸出層結(jié)合而形成的,因此需要從頭開(kāi)始學(xué)習(xí)最小數(shù)量的參數(shù)。在這些任務(wù)中,(a)和(b)是序列級(jí)任務(wù),而(c)和(d)是token級(jí)任務(wù)。在圖中,E表示輸入嵌入,Ti表示tokeni的上下文表示,[CLS]是用于分類(lèi)輸出的特殊符號(hào),[SEP]是用于分隔非連續(xù)token序列的特殊符號(hào)。
圖4:GLUE測(cè)試結(jié)果,由GLUE評(píng)估服務(wù)器給出。每個(gè)任務(wù)下方的數(shù)字表示訓(xùn)練樣例的數(shù)量。“平均”一欄中的數(shù)據(jù)與GLUE官方評(píng)分稍有不同,因?yàn)槲覀兣懦擞袉?wèn)題的WNLI集。BERT 和OpenAI GPT的結(jié)果是單模型、單任務(wù)下的數(shù)據(jù)。所有結(jié)果來(lái)自https://gluebenchmark.com/leaderboard和https://blog.openai.com/language-unsupervised/
圖5:SQuAD 結(jié)果。BERT 集成是使用不同預(yù)訓(xùn)練檢查點(diǎn)和fine-tuning seed的 7x 系統(tǒng)。
圖6:CoNLL-2003 命名實(shí)體識(shí)別結(jié)果。超參數(shù)由開(kāi)發(fā)集選擇,得出的開(kāi)發(fā)和測(cè)試分?jǐn)?shù)是使用這些超參數(shù)進(jìn)行五次隨機(jī)重啟的平均值。
四、BERT模型的影響
BERT是一個(gè)語(yǔ)言表征模型(language representation model),通過(guò)超大數(shù)據(jù)、巨大模型、和極大的計(jì)算開(kāi)銷(xiāo)訓(xùn)練而成,在11個(gè)自然語(yǔ)言處理的任務(wù)中取得了最優(yōu)(state-of-the-art, SOTA)結(jié)果。或許你已經(jīng)猜到了此模型出自何方,沒(méi)錯(cuò),它產(chǎn)自谷歌。估計(jì)不少人會(huì)調(diào)侃這種規(guī)模的實(shí)驗(yàn)已經(jīng)基本讓一般的實(shí)驗(yàn)室和研究員望塵莫及了,但它確實(shí)給我們提供了很多寶貴的經(jīng)驗(yàn):
1、深度學(xué)習(xí)就是表征學(xué)習(xí) (Deep learning is representation learning)
"We show that pre-trained representations eliminate the needs of many heavily engineered task-specific architectures". 在11項(xiàng)BERT刷出新境界的任務(wù)中,大多只在預(yù)訓(xùn)練表征(pre-trained representation)微調(diào)(fine-tuning)的基礎(chǔ)上加一個(gè)線性層作為輸出(linear output layer)。在序列標(biāo)注的任務(wù)里(e.g. NER),甚至連序列輸出的依賴關(guān)系都先不管(i.e. non-autoregressive and no CRF),照樣秒殺之前的SOTA,可見(jiàn)其表征學(xué)習(xí)能力之強(qiáng)大。
2、規(guī)模很重要(Scale matters)
"One of our core claims is that the deep bidirectionality of BERT, which is enabled by masked LM pre-training, is the single most important improvement of BERT compared to previous work". 這種遮擋(mask)在語(yǔ)言模型上的應(yīng)用對(duì)很多人來(lái)說(shuō)已經(jīng)不新鮮了,但確是BERT的作者在如此超大規(guī)模的數(shù)據(jù)+模型+算力的基礎(chǔ)上驗(yàn)證了其強(qiáng)大的表征學(xué)習(xí)能力。這樣的模型,甚至可以延伸到很多其他的模型,可能之前都被不同的實(shí)驗(yàn)室提出和試驗(yàn)過(guò),只是由于規(guī)模的局限沒(méi)能充分挖掘這些模型的潛力,而遺憾地讓它們被淹沒(méi)在了滾滾的paper洪流之中。
3、預(yù)訓(xùn)練價(jià)值很大(Pre-training is important)
"We believe that this is the first work to demonstrate that scaling to extreme model sizes also leads to large improvements on very small-scale tasks, provided that the model has been sufficiently pre-trained". 預(yù)訓(xùn)練已經(jīng)被廣泛應(yīng)用在各個(gè)領(lǐng)域了(e.g. ImageNet for CV, Word2Vec in NLP),多是通過(guò)大模型大數(shù)據(jù),這樣的大模型給小規(guī)模任務(wù)能帶來(lái)的提升有幾何,作者也給出了自己的答案。BERT模型的預(yù)訓(xùn)練是用Transformer做的,但我想換做LSTM或者GRU的話應(yīng)該不會(huì)有太大性能上的差別,當(dāng)然訓(xùn)練計(jì)算時(shí)的并行能力就另當(dāng)別論了。
五、對(duì)BERT模型的觀點(diǎn)
high-performance的原因其實(shí)還是歸結(jié)于兩點(diǎn),除了模型的改進(jìn),更重要的是用了超大的數(shù)據(jù)集(BooksCorpus 800M + English Wikipedia 2.5G單詞)和超大的算力(對(duì)應(yīng)于超大模型)在相關(guān)的任務(wù)上做預(yù)訓(xùn)練,實(shí)現(xiàn)了在目標(biāo)任務(wù)上表現(xiàn)的單調(diào)增長(zhǎng)
這個(gè)模型的雙向和Elmo不一樣,大部分人對(duì)他這個(gè)雙向在novelty上的contribution 的大小有誤解,我覺(jué)得這個(gè)細(xì)節(jié)可能是他比Elmo顯著提升的原因。Elmo是拼一個(gè)左到右和一個(gè)右到左,他這個(gè)是訓(xùn)練中直接開(kāi)一個(gè)窗口,用了個(gè)有順序的cbow。
可復(fù)現(xiàn)性差:有錢(qián)才能為所欲為(Reddit對(duì)跑一次BERT的價(jià)格討論)
For TPU pods:
4 TPUs * ~$2/h (preemptible) * 24 h/day * 4 days = $768 (base model)
16 TPUs = ~$3k (large model)
For TPU:
16 tpus * $8/hr * 24 h/day * 4 days = 12k
64 tpus * $8/hr * 24 h/day * 4 days = 50k
最后他問(wèn)到:For GPU:"BERT-Large is 24-layer, 1024-hidden and was trained for 40 epochs over a 3.3 billion word corpus. So maybe 1 year to train on 8 P100s? " ,然后這個(gè)就很interesting了。
六、參考文獻(xiàn)
知乎:如何評(píng)價(jià)谷歌最新的BERT模型
華爾街見(jiàn)聞:NLP歷史突破
OPENAI-Improving Language Understanding with Unsupervised Learning
作者:刺客五六柒
來(lái)源:CSDN
編輯:奇點(diǎn)機(jī)智
原文:https://blog.csdn.net/qq_39521554/article/details/83062188