BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

1. 簡介

大名鼎鼎的BERT,基于目前流行的transformer結(jié)構(gòu),一經(jīng)推出就刷新了11個NLP任務(wù)的SOTA。并且模型可以直接接入到下游任務(wù),從而受到廣大機器學(xué)習(xí)從業(yè)者的追捧涩金。那么bert到底是什么呢谱醇?
bert的作者聲稱,預(yù)訓(xùn)練的下游任務(wù)有兩種:
A. 整句級別的步做,關(guān)注句子之間關(guān)系的自然語言推斷和句子釋義副渴。
B. 單詞級別的,比如命名實體識別和問答全度。

預(yù)訓(xùn)練模型如何使用也有兩種流派:基于特征和基于精調(diào)煮剧。其中:
A. 基于特征的就是以elmo為代表,把預(yù)訓(xùn)練結(jié)果的單詞表示當做下游任務(wù)的一個額外特征将鸵。
B. 基于精調(diào)就類似GPT勉盅,直接把GPT作為底層模型,外加一個softmax或者其他什么直接做分類任務(wù)顶掉,讓整個模型重新訓(xùn)練草娜。

作者比較看好基于精調(diào)的模型,并且他們聲稱痒筒,當時的精調(diào)流派大都采用單向語言模型宰闰,這在單詞級別的下游任務(wù)中非常不利。因此作者以transformer的結(jié)構(gòu)為基礎(chǔ)簿透,利用mask技術(shù)[1]來達到雙向語言模型的效果移袍。并且在目標函數(shù)中整合單詞級別的預(yù)測和整句級別的上下文承接的損失函數(shù),同時兼顧兩種下游任務(wù)老充。作者將該模型命名為bert(Bidirectional Encoder Representations from Transformers)葡盗。該項目已經(jīng)開源,鏈接在這里.
下面就來看一下啡浊,作者是如何設(shè)計模型結(jié)構(gòu)的吧觅够。

2. 背景研究介紹

bert模型綜合了三個基準點:雙向語言模型、預(yù)訓(xùn)練模型+精調(diào)方法用于下游任務(wù)虫啥、單詞級別與整句級別的下游任務(wù)蔚约。這些idea都不是bert首創(chuàng)的,回顧這幾個方向的研究涂籽,有助于我們更好的理解bert模型。

2.1 無監(jiān)督+基于特征

很久以來砸抛,大家都在研究评雌,如何才能讓模型學(xué)習(xí)到一種非常的表示。大家嘗試過非神經(jīng)網(wǎng)絡(luò)的模型[2]直焙,神經(jīng)網(wǎng)絡(luò)模型[3]【岸現(xiàn)代NLP方法中,從不需要標記的文本中進行無監(jiān)督的預(yù)訓(xùn)練奔誓,得到單詞的嵌入表示斤吐,這是一種常見的方法了搔涝。這種方法極大的提升了各種NLP任務(wù)的表現(xiàn)。為了得到進行無監(jiān)督訓(xùn)練和措,常用來構(gòu)造損失函數(shù)的手法就是應(yīng)用從左到右的單向語言模型庄呈。
嵌入表示的方法不僅用于單詞,還應(yīng)用到了更粗力度的句子甚至段落上派阱。為了得到表示句子的嵌入向量诬留,之前用到過的目標函數(shù)有:pair-wise的句子排序的方法、給出左邊的句子向量贫母,生成右邊的句子文兑、降噪自編碼偏導(dǎo)[4](這個是啥完全看不懂)。
ELMO則開創(chuàng)了雙向語言模型腺劣,把兩個方向的向量concate起來绿贞,并且把每一層的隱變量拿出來做線性變換得到下游任務(wù)中的單詞表示。這種方法適用于上下文敏感的單詞表示場景橘原,不管是單詞級別的下游任務(wù)還是整句級別的下游任務(wù)籍铁。
還有研究表明,完形填空這種任務(wù)可以有效的提高文本生成模型的魯棒性[5]靠柑。

2.2 無監(jiān)督+精調(diào)

用無標簽的文本數(shù)據(jù)來構(gòu)造訓(xùn)練集進行無監(jiān)督的預(yù)訓(xùn)練寨辩,并且把預(yù)訓(xùn)練的結(jié)果套一層有監(jiān)督訓(xùn)練進行精調(diào)。這種上游模型用于下游的任務(wù)的方法也很流行歼冰,該方法的優(yōu)勢在于只有很少的參數(shù)需要學(xué)習(xí)靡狞。正是由于這個原因,GPT可以在整句級別的下游任務(wù)中取得新的SOTA隔嫡。這些模型的預(yù)訓(xùn)練部分大都采用從左到右的單向語言模型+自編碼的方式來構(gòu)造目標函數(shù)甸怕。

2.3 遷移學(xué)習(xí)

這種預(yù)訓(xùn)練模型用于下游任務(wù)+精調(diào)的方法也叫做遷移學(xué)習(xí)。這種做法不應(yīng)用在NLP領(lǐng)域腮恩,在CV領(lǐng)域也有應(yīng)用梢杭,比如Image-Net[6]。

3. BERT模型

bert模型分兩步:預(yù)訓(xùn)練和精調(diào)秸滴。本節(jié)的fine tuning 使用的是問答任務(wù)武契。bert模型的重要特點就是它的預(yù)訓(xùn)練是多任務(wù)的,這就使得bert可以廣泛用于不同的下游任務(wù)荡含。

3.1 bert模型結(jié)構(gòu)圖

image.png

bert所用的transformer結(jié)構(gòu)就是經(jīng)典transformer咒唆,這個結(jié)構(gòu)的論文可以看[7],代碼可以直接用tensorflow中的實現(xiàn)释液。
L表示使用了多少個transformer全释,H表示隱層大小, A表示多頭自注意力的個數(shù)误债,前饋層大小統(tǒng)一為4H浸船。
作者做了兩個規(guī)模的模型:BERTBASE (L=12, H=768, A=12, Total Parameters=110M) 和BERTLARGE (L=24, H=1024,A=16, Total Parameters=340M)妄迁。

3.2 輸入/輸出的表示

因為要用兩個句子作為輸入,所以序列可以指代一句李命,也可以指代兩個句子登淘。用了wordpiece,所以可以不是完整的單詞项戴。用兩種方式來標記一個序列中的兩個句子形帮,一是用分隔符< Sep > ,二是每個wordpiece都有標記它到底屬于A還是B周叮。E代表輸入向量辩撑,C代表最后一層的句子開始符<cls>,第i個token記為Ti仿耽。
最終的輸入是token合冀、segment和position embedding的加和,如圖2所示:


image.png

3.3 預(yù)訓(xùn)練

預(yù)訓(xùn)練有兩個目標:語言模型目標和下文預(yù)測目標
語言模型目標
雙向語言模型在預(yù)測當前詞的時候项贺,會用到其上下文信息(類似 word2vec 里的 CBOW 模式)君躺,而 transformer 自帶了全局的 self-attention,會將上下文的詞編碼到當前模型里开缎,所以在預(yù)測其他詞的時候棕叫,該詞的信息已經(jīng)包含在了前一層的網(wǎng)絡(luò)參數(shù)里,導(dǎo)致間接地『自己預(yù)測自己』


image.png

不嚴謹?shù)亟忉屜拢海ㄗ髨D)在預(yù)測 T1 的時候奕删,transformer 模塊(紅框所示)已經(jīng)將 T2 的信息編碼進去了俺泣,所以(右圖)在預(yù)測 T2 的時候,transformer 模塊里完残,已經(jīng)包含了 T2 的信息伏钠,也就是 Jacob 說的 『see themselves』。
為了解決雙向語言模型中可以間接看到自己的問題谨设,干脆把目標詞永遠替換成mask符號熟掂,然后反過來預(yù)測這些mask原來的詞。作者將這個稱之為mask lm(這不就是完形填空嗎)扎拣。正常的auto-encoder的損失函數(shù)為所有單詞自預(yù)測的損失赴肚,而我們的目標函數(shù)僅包含預(yù)測mask的損失。mask的比例為15%二蓝。
不過這樣做有個壞處尊蚁,就是會導(dǎo)致訓(xùn)練和預(yù)測時樣本結(jié)構(gòu)不一致(訓(xùn)練時如果一句話中恰好有兩個詞被替換了,那該樣本的輸入可能會有mask符號侣夷,而預(yù)測時則永遠不會有mask)。因此作者又做了一下妥協(xié)仑乌,把已經(jīng)選中要替換為mask的單詞(也就是會進入目標函數(shù)的部分)有10%的概率替換成其他單詞百拓,又有10%的概率保持不變琴锭。
不嚴謹?shù)恼f,在一段長度為200的語料中衙传,作者會選30個單詞作為自編碼的目標函數(shù)决帖,而這30個單詞中,3個單詞是保持原樣不變的(也就是可能會出現(xiàn)自己看到自己的問題蓖捶,如果某個句子中恰好包含了這3個單詞中的2個地回,其中一個是目標,另一個會作為輸入的一部分俊鱼,那就see-themselves了刻像,但是當做輸入或目標的話就沒問題),3個單詞是替換成其他單詞的(也就是說如果某個句子的輸入恰好包含了這3個單詞中的1個并闲,那其實就是拿異常的樣本去訓(xùn)練模型了细睡,但是如果當做輸出的話就沒什么影響)。剩下的24個全都換成mask符號(一旦被當做輸入帝火,就會出現(xiàn)前面說的跟預(yù)測時不一致的問題)溜徙。這樣可以稍微緩解一下訓(xùn)練樣本中出現(xiàn)mask的問題。
下一句子預(yù)測(next sentence prediction犀填,NSP)
許多NLP任務(wù)是需要判斷兩個句子的關(guān)系的蠢壹,比如問答和自然語言推斷。但是語言模型并不能很好的捕捉這樣的信息九巡。所以從語料中抽取樣本時图贸,作者抽取50%的樣本的兩個句子是連在一起,50%的概率是不連著的比庄。然后把C(最后一層的句子開始符)作為輸出層的輸入求妹。本文中nsp目標函數(shù)的構(gòu)建跟[8][9]是一樣的。區(qū)別是之前的研究下游任務(wù)僅僅利用句子的向量佳窑,bert模型需要把整個模型結(jié)構(gòu)和參數(shù)都接入到下游任務(wù)中(因為要fine-tune嘛)制恍。
預(yù)訓(xùn)練數(shù)據(jù)
BooksCorpus、English Wikipedia

3.4 fine-tune

作者說bert的fine-tune是非常簡單的神凑,只需要end to end的跑數(shù)據(jù)净神,調(diào)參就行了。(也許這也解釋了它為什么被大家追捧)溉委。根據(jù)下游任務(wù)的不同鹃唯,輸入為:
(1) sentence pairs in paraphrasing
(2) hypothesis-premise pairs in entailment
(3)question-passage pairs in question answering
(4) a degenerate text-? pair in text classification or sequence tagging
如果是序列標注或者問答任務(wù),就拿token級別的輸出再套一層輸出層瓣喊。
如果是上下文承接判斷或者情感分析坡慌,就把[CLS]的token拿出來放到輸出層。
在TPU上藻三,1小時就可以完成精調(diào)洪橘,用GPU也只需數(shù)小時跪者。

4. 數(shù)據(jù)實驗

4.1 GLUE數(shù)據(jù)集(General Language Understanding Evaluation benchmark)

image.png

作者用了3個epoch就能完成訓(xùn)練∠ㄇ螅可以看到渣玲,bertbase和bertlarge都明顯好于SOTA,分別取得了4.5%和7%的提升弟晚。注意bertbase并不會比GPT的模型更復(fù)雜忘衍,這充分說明了bert模型結(jié)構(gòu)中attention mask的合理性。對于MNLI卿城,bert取得了4.6%的絕對提升枚钓。而bertlarge模型在所有任務(wù)中表現(xiàn)都比bertbase更好,5.2中探究了bert模型復(fù)雜程度的影響藻雪。

4.2 squad

對于問答任務(wù)秘噪,作者把問題和段落的序列作為A和B輸入到模型中,使用開始符S和結(jié)束符E作為下游任務(wù)的輸入勉耀。對段落中每個單詞Ti都乘以S指煎,然后套一個softmax,就是該單詞為答案span的start的概率便斥,end同理(這種用start和end來標記段落中答案的方法非常常見)至壤。公式如下所示:


image.png

作者經(jīng)過5個epoch就能完成精調(diào)。

image.png

image.png

可以看到枢纠,bert在問答任務(wù)中也可以取得新的SOTA像街。

4.3 SWAG(Situations With Adversarial Generations)

給出一個陳述句子和4個備選句子, 判斷前者與后者中的哪一個最有邏輯的連續(xù)性, 相當于上下文承接問題。
作者構(gòu)建的樣本是4個序列晋渺,每個序列包含一個陳述句和一個備選句镰绎,然后最終每個序列的<cls>的token最終和一個向量進行相乘得到一個分數(shù),再過一個softmax得到最終的概率木西。
同樣經(jīng)過3個epoch畴栖,作者就得到了新的SOTA。如下所示:


image.png

5. 銷蝕分析

5.1 模型結(jié)構(gòu)分析

作者以bertbase為原型八千,逐漸去掉作者加入的設(shè)計:NSP吗讶、雙向語言模型、transformer結(jié)構(gòu)(換成雙向lstm)恋捆≌战裕可以看到,模型的表現(xiàn)逐漸下降沸停。


image.png

結(jié)果表明:沒有上下句子判斷的設(shè)計膜毁,會損害模型在MNLI(Multi-Genre Natural Language Inference)和QNLI(Question Natural Language Inference)上的表現(xiàn)。而去掉雙向語言模型換成單向,則會進一步損害在所有任務(wù)上的表現(xiàn)爽茴,尤其是token級別的任務(wù)葬凳。換成雙向LSTM的話模型跟單向語言模型相差不大。
這些結(jié)果充分表明了作者設(shè)計的合理性室奏。

5.2 模型大小分析

image.png

從結(jié)果可以看到,隨著模型參數(shù)量的增加劲装,模型效果逐漸提升胧沫。對大數(shù)據(jù)集來說,這個規(guī)律在之前的研究中已經(jīng)證明了占业。本研究表明绒怨,只要有充分的預(yù)訓(xùn)練,增加模型的參數(shù)量谦疾,對于小數(shù)據(jù)集也能持續(xù)的帶來效果提升南蹂。

5.3 基于特征的手法用于下游任務(wù)

雖然bert推薦使用fine-tune,但是實際上也可以跟elmo一樣當做feature用念恍。作者把單詞的第一個sub-token當做標注問題分類器的輸入(不是用CRF當輸出層來做標注問題)六剥。為了保證不進行任何精調(diào),作者把bert的隱層固定住峰伙,然后跟elmo的論文一樣疗疟,探討了應(yīng)用不同層級的hidden state做特征,后面接一個雙層768維的雙向LSTM瞳氓,再后面接一個分類器(論文沒說是什么分類器)策彤。
下圖是CoNLL-2003數(shù)據(jù)集上的實體識別任務(wù),bert基于特征的用法帶來的效果:


image.png

可以看到匣摘,bert作為feature也可以用店诗,只是效果略遜于fine-tune。

6. 結(jié)論

作者非常謙虛的說音榜,預(yù)訓(xùn)練來加強模型效果已經(jīng)是非常流行庞瘸,非常常見的手段了。作者:很慚愧囊咏,就做了一點微小的工作恕洲。

參考文獻

[1] Wilson L Taylor. 1953. Cloze procedure: A new tool for measuring readability. Journalism Bulletin, 30(4):415–433.
[2] Peter F Brown, Peter V Desouza, Robert L Mercer, Vincent J Della Pietra, and Jenifer C Lai. 1992. Class-based n-gram models of natural language. Computational linguistics, 8(4):467–479.
[3] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. 2013. Distributed representations of words and phrases and their compositionality. In Advances in Neural Information Processing Systems 26, pages 3111–3119. Curran Associates, Inc.
[4] Felix Hill, Kyunghyun Cho, and Anna Korhonen. 2016. Learning distributed representations of sentences from unlabelled data. In Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. Association for Computational Linguistics.
[5] William Fedus, Ian Goodfellow, and Andrew M Dai. 2018. Maskgan: Better text generation via filling in the . arXiv preprint arXiv:1801.07736
[6] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. FeiFei. 2009. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09.
[7] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Advances in Neural Information Processing Systems, pages 6000–6010

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末麻养,一起剝皮案震驚了整個濱河市嗤练,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌技羔,老刑警劉巖户辞,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泌类,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機刃榨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門弹砚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枢希,你說我怎么就攤上這事桌吃。” “怎么了苞轿?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵茅诱,是天一觀的道長。 經(jīng)常有香客問我搬卒,道長瑟俭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任契邀,我火速辦了婚禮摆寄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坯门。我一直安慰自己微饥,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布田盈。 她就那樣靜靜地躺著畜号,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允瞧。 梳的紋絲不亂的頭發(fā)上简软,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音述暂,去河邊找鬼痹升。 笑死,一個胖子當著我的面吹牛畦韭,可吹牛的內(nèi)容都是我干的疼蛾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼艺配,長吁一口氣:“原來是場噩夢啊……” “哼察郁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起转唉,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤皮钠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赠法,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麦轰,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了款侵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末荐。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖新锈,靈堂內(nèi)的尸體忽然破棺而出甲脏,到底是詐尸還是另有隱情,我是刑警寧澤壕鹉,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布剃幌,位于F島的核電站,受9級特大地震影響晾浴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牍白,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一脊凰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茂腥,春花似錦狸涌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至般渡,卻和暖如春懒豹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驯用。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工脸秽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝴乔。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓记餐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薇正。 傳聞我的和親對象是個殘疾皇子片酝,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354