今天,NLP領(lǐng)域取得最重大突破!谷歌AI團(tuán)隊(duì)新發(fā)布的BERT模型,在機(jī)器閱讀理解頂級(jí)水平測(cè)試SQuAD1.1中表現(xiàn)出驚人的成績:全部兩個(gè)衡量指標(biāo)上全面超越人類,并且還在11種不同NLP測(cè)試中創(chuàng)出最佳成績。毋庸置疑,BERT模型開啟了NLP的新時(shí)代!
今天請(qǐng)記住BERT模型這個(gè)名字。
谷歌AI團(tuán)隊(duì)新發(fā)布的BERT模型,在機(jī)器閱讀理解頂級(jí)水平測(cè)試SQuAD1.1中表現(xiàn)出驚人的成績:全部兩個(gè)衡量指標(biāo)上全面超越人類!并且還在11種不同NLP測(cè)試中創(chuàng)出最佳成績,包括將GLUE基準(zhǔn)推至80.4%(絕對(duì)改進(jìn)7.6%),MultiNLI準(zhǔn)確度達(dá)到86.7% (絕對(duì)改進(jìn)率5.6%)等。
谷歌團(tuán)隊(duì)的Thang Luong直接定義:BERT模型開啟了NLP的新時(shí)代!
本文從論文解讀、BERT模型的成績以及業(yè)界的評(píng)價(jià)三方面做介紹。
硬核閱讀:認(rèn)識(shí)BERT的新語言表示模型
首先來看下谷歌AI團(tuán)隊(duì)做的這篇論文。
論文地址:
https://arxiv.org/abs/1810.04805
BERT的新語言表示模型,它代表Transformer的雙向編碼器表示。與最近的其他語言表示模型不同,BERT旨在通過聯(lián)合調(diào)節(jié)所有層中的上下文來預(yù)先訓(xùn)練深度雙向表示。因此,預(yù)訓(xùn)練的BERT表示可以通過一個(gè)額外的輸出層進(jìn)行微調(diào),適用于廣泛任務(wù)的最先進(jìn)模型的構(gòu)建,比如問答任務(wù)和語言推理,無需針對(duì)具體任務(wù)做大幅架構(gòu)修改。
論文作者認(rèn)為現(xiàn)有的技術(shù)嚴(yán)重制約了預(yù)訓(xùn)練表示的能力。其主要局限在于標(biāo)準(zhǔn)語言模型是單向的,這使得在模型的預(yù)訓(xùn)練中可以使用的架構(gòu)類型很有限。
在論文中,作者通過提出BERT:即Transformer的雙向編碼表示來改進(jìn)基于架構(gòu)微調(diào)的方法。
BERT 提出一種新的預(yù)訓(xùn)練目標(biāo):遮蔽語言模型(masked language model,MLM),來克服上文提到的單向性局限。MLM 的靈感來自 Cloze 任務(wù)(Taylor, 1953)。MLM 隨機(jī)遮蔽模型輸入中的一些 token,目標(biāo)在于僅基于遮蔽詞的語境來預(yù)測(cè)其原始詞匯 id。
與從左到右的語言模型預(yù)訓(xùn)練不同,MLM 目標(biāo)允許表征融合左右兩側(cè)的語境,從而預(yù)訓(xùn)練一個(gè)深度雙向 Transformer。除了遮蔽語言模型之外,本文作者還引入了一個(gè)“下一句預(yù)測(cè)”(next sentence prediction)任務(wù),可以和MLM共同預(yù)訓(xùn)練文本對(duì)的表示。
論文的核心:詳解BERT模型架構(gòu)
本節(jié)介紹BERT模型架構(gòu)和具體實(shí)現(xiàn),并介紹預(yù)訓(xùn)練任務(wù),這是這篇論文的核心創(chuàng)新。
模型架構(gòu)
BERT的模型架構(gòu)是基于Vaswani et al. (2017) 中描述的原始實(shí)現(xiàn)multi-layer bidirectional Transformer編碼器,并在tensor2tensor庫中發(fā)布。由于Transformer的使用最近變得無處不在,論文中的實(shí)現(xiàn)與原始實(shí)現(xiàn)完全相同,因此這里將省略對(duì)模型結(jié)構(gòu)的詳細(xì)描述。
在這項(xiàng)工作中,論文將層數(shù)(即Transformer blocks)表示為L,將隱藏大小表示為H,將self-attention heads的數(shù)量表示為A。在所有情況下,將feed-forward/filter 的大小設(shè)置為 4H,即H = 768時(shí)為3072,H = 1024時(shí)為4096。論文主要報(bào)告了兩種模型大小的結(jié)果:
: L=12, H=768, A=12, Total Parameters=110M
: L=24, H=1024, A=16, Total Parameters=340M
為了進(jìn)行比較,論文選擇,它與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)樗梢杂糜谖谋旧?。BERT,OpenAI GPT和ELMo之間的比較如圖1所示。
圖1:預(yù)訓(xùn)練模型架構(gòu)的差異。BERT使用雙向Transformer。OpenAI GPT使用從左到右的Transformer。ELMo使用經(jīng)過獨(dú)立訓(xùn)練的從左到右和從右到左LSTM的串聯(lián)來生成下游任務(wù)的特征。三個(gè)模型中,只有BERT表示在所有層中共同依賴于左右上下文。
輸入表示(input representation)
論文的輸入表示(input representation)能夠在一個(gè)token序列中明確地表示單個(gè)文本句子或一對(duì)文本句子(例如, [Question, Answer])。對(duì)于給定token,其輸入表示通過對(duì)相應(yīng)的token、segment和position embeddings進(jìn)行求和來構(gòu)造。圖2是輸入表示的直觀表示:
圖2:BERT輸入表示。輸入嵌入是token embeddings, segmentation embeddings 和position embeddings 的總和。
具體如下:
使用WordPiece嵌入(Wu et al., 2016)和30,000個(gè)token的詞匯表。用##表示分詞。
使用學(xué)習(xí)的positional embeddings,支持的序列長度最多為512個(gè)token。
每個(gè)序列的第一個(gè)token始終是特殊分類嵌入([CLS])。對(duì)應(yīng)于該token的最終隱藏狀態(tài)(即,Transformer的輸出)被用作分類任務(wù)的聚合序列表示。對(duì)于非分類任務(wù),將忽略此向量。
句子對(duì)被打包成一個(gè)序列。以兩種方式區(qū)分句子。首先,用特殊標(biāo)記([SEP])將它們分開。其次,添加一個(gè)learned sentence A嵌入到第一個(gè)句子的每個(gè)token中,一個(gè)sentence B嵌入到第二個(gè)句子的每個(gè)token中。
對(duì)于單個(gè)句子輸入,只使用 sentence A嵌入。
關(guān)鍵創(chuàng)新:預(yù)訓(xùn)練任務(wù)
與Peters et al. (2018) 和 Radford et al. (2018)不同,論文不使用傳統(tǒng)的從左到右或從右到左的語言模型來預(yù)訓(xùn)練BERT。相反,使用兩個(gè)新的無監(jiān)督預(yù)測(cè)任務(wù)對(duì)BERT進(jìn)行預(yù)訓(xùn)練。
任務(wù)1: Masked LM
從直覺上看,研究團(tuán)隊(duì)有理由相信,深度雙向模型比left-to-right 模型或left-to-right and right-to-left模型的淺層連接更強(qiáng)大。遺憾的是,標(biāo)準(zhǔn)條件語言模型只能從左到右或從右到左進(jìn)行訓(xùn)練,因?yàn)殡p向條件作用將允許每個(gè)單詞在多層上下文中間接地“see itself”。
為了訓(xùn)練一個(gè)深度雙向表示(deep bidirectional representation),研究團(tuán)隊(duì)采用了一種簡單的方法,即隨機(jī)屏蔽(masking)部分輸入token,然后只預(yù)測(cè)那些被屏蔽的token。論文將這個(gè)過程稱為“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è)問題,團(tuán)隊(duì)并不總是用實(shí)際的[MASK]token替換被“masked”的詞匯。相反,訓(xùn)練數(shù)據(jù)生成器隨機(jī)選擇15%的token。例如在這個(gè)句子“my dog is hairy”中,它選擇的token是“hairy”。然后,執(zhí)行以下過程:
數(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ì)損害模型的語言理解能力。
使用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)超過增加的訓(xùn)練成本。
任務(wù)2:下一句預(yù)測(cè)
許多重要的下游任務(wù),如問答(QA)和自然語言推理(NLI)都是基于理解兩個(gè)句子之間的關(guān)系,這并沒有通過語言建模直接獲得。
在為了訓(xùn)練一個(gè)理解句子的模型關(guān)系,預(yù)先訓(xùn)練一個(gè)二進(jìn)制化的下一句測(cè)任務(wù),這一任務(wù)可以從任何單語語料庫中生成。具體地說,當(dāng)選擇句子A和B作為預(yù)訓(xùn)練樣本時(shí),B有50%的可能是A的下一個(gè)句子,也有50%的可能是來自語料庫的隨機(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ù)訓(xùn)練模型在此任務(wù)上實(shí)現(xiàn)了97%-98%的準(zhǔn)確率。
實(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é)合而形成的,因此需要從頭開始學(xué)習(xí)最小數(shù)量的參數(shù)。在這些任務(wù)中,(a)和(b)是序列級(jí)任務(wù),而(c)和(d)是token級(jí)任務(wù)。在圖中,E表示輸入嵌入,Ti表示tokeni的上下文表示,[CLS]是用于分類輸出的特殊符號(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)槲覀兣懦擞袉栴}的WNLI集。BERT 和OpenAI GPT的結(jié)果是單模型、單任務(wù)下的數(shù)據(jù)。所有結(jié)果來自https://gluebenchmark.com/leaderboard和https://blog.openai.com/language-unsupervised/
圖5:SQuAD 結(jié)果。BERT 集成是使用不同預(yù)訓(xùn)練檢查點(diǎn)和微調(diào)種子(fine-tuning seed)的 7x 系統(tǒng)。
圖6:CoNLL-2003 命名實(shí)體識(shí)別結(jié)果。超參數(shù)由開發(fā)集選擇,得出的開發(fā)和測(cè)試分?jǐn)?shù)是使用這些超參數(shù)進(jìn)行五次隨機(jī)重啟的平均值。
超過人類表現(xiàn),BERT刷新了11項(xiàng)NLP任務(wù)的性能記錄
論文的主要貢獻(xiàn)在于:
證明了雙向預(yù)訓(xùn)練對(duì)語言表示的重要性。與之前使用的單向語言模型進(jìn)行預(yù)訓(xùn)練不同,BERT使用遮蔽語言模型來實(shí)現(xiàn)預(yù)訓(xùn)練的深度雙向表示。
論文表明,預(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)。
BERT刷新了11項(xiàng)NLP任務(wù)的性能記錄。本文還報(bào)告了 BERT 的模型簡化研究(ablation study),表明模型的雙向性是一項(xiàng)重要的新成果。相關(guān)代碼和預(yù)先訓(xùn)練的模型將會(huì)公布在goo.gl/language/bert上。
BERT目前已經(jīng)刷新的11項(xiàng)自然語言處理任務(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問答測(cè)試F1得分紀(jì)錄刷新為93.2分(絕對(duì)提升1.5分),超過人類表現(xiàn)2.0分。
BERT模型重要意義:宣告NLP范式的改變
北京航空航天大學(xué)計(jì)算機(jī)專業(yè)博士吳俁在知乎上寫道:BERT模型的地位類似于ResNet在圖像,這是里程碑式的工作,宣告著NLP范式的改變。以后研究工作估計(jì)很多都要使用他初始化,就像之前大家使用word2vec一樣自然。
BERT一出,那幾個(gè)他論文里做實(shí)驗(yàn)的數(shù)據(jù)集全被轟平了,大家洗洗睡了。心疼swag一秒鐘,出現(xiàn)3月,第一篇做這個(gè)數(shù)據(jù)集的算法,在超了baseline 20多點(diǎn)的同時(shí)也超過人了。
通過BERT模型,吳俁有三個(gè)認(rèn)識(shí):
1、Jacob在細(xì)節(jié)上是一等一的高手
這個(gè)模型的雙向和Elmo不一樣,大部分人對(duì)論文作者之一Jacob的雙向在novelty上的contribution 的大小有誤解,我覺得這個(gè)細(xì)節(jié)可能是他比Elmo顯著提升的原因。Elmo是拼一個(gè)左到右和一個(gè)右到左,他這個(gè)是訓(xùn)練中直接開一個(gè)窗口,用了個(gè)有順序的cbow。
2、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
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? "
3、不幸的是,基本無法復(fù)現(xiàn),所以模型和數(shù)據(jù)誰更有用也不好說。
BERT的成功也說明,好的深度學(xué)習(xí)研究工作的三大條件: 數(shù)據(jù),計(jì)算資源,工程技能點(diǎn)很高的研究員(Jacob在微軟時(shí)候,就以單槍匹馬搭大系統(tǒng),而中外聞名)。
-
編碼器
+關(guān)注
關(guān)注
45文章
3655瀏覽量
134883 -
nlp
+關(guān)注
關(guān)注
1文章
489瀏覽量
22064
原文標(biāo)題:NLP歷史突破!谷歌BERT模型狂破11項(xiàng)紀(jì)錄,全面超越人類!
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論