【NLP論文筆記】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT模型理解)

本文主要用于記錄谷歌發(fā)表于2018年的一篇論文载庭。該論文提出的BERT模型被各地學者媒體美譽為NLP新一代大殺器员萍。本筆記主要為方便初學者快速入門裳凸,以及自我回顧碌奉。

論文鏈接:https://arxiv.org/pdf/1810.04805.pdf

基本目錄如下:

  1. 摘要
  2. 核心思想
  3. 總結(jié)

------------------第一菇 - 摘要------------------

1.1 論文摘要

本文作者推出了一套新的語言表達模型BERT,全稱為Bidirectional Encoder Representations from Transformers碍论。與近年來提出的語言模型不一樣的地方在于谅猾,BERT不再僅僅是只關(guān)注一個詞前文或后文的信息,而是整個模型的所有層都去關(guān)注其整個上下文的語境信息鳍悠。實驗結(jié)果證明税娜,使用預(yù)訓練過的BERT模型,僅僅在后面再包一層輸出層藏研,并對其進行微調(diào)訓練敬矩,就可以取得很不錯的結(jié)果。具體有多不錯蠢挡,那就是刷爆了NLP領(lǐng)域的11大任務(wù)弧岳,甚至有幾項任務(wù)的準確率已經(jīng)超過了人類。

------------------第二菇 - 核心思想------------------

2.1 論文模型背景

其實BERT模型本身的提出业踏,說實話禽炬,并不是什么劃時代的產(chǎn)物,只不過他的效果直接刷爆了NLP的各項任務(wù)(谷歌家強大的計算資源也是原因之一勤家,想復現(xiàn)這篇論文難度也是很大)腹尖,看起來比較震撼。所以伐脖,該篇論文之所以有那么高的評價热幔,倒不是模型本身有多出色乐设,或者預(yù)訓練方法有多標新立異,我個人更愿意稱其為近年NLP領(lǐng)域突破的集大成者(確實是一個里程碑)断凶。因此伤提,為了能更好的理解這篇文章所表達的內(nèi)涵,光是看這一篇文章是遠遠不夠的认烁,所以肿男,不同于以往直接深入文章核心,這里先隨著論文一起聊聊本文的模型背景却嗡。

在NLP領(lǐng)域舶沛,語言模型的預(yù)訓練早已被證明是提高下游模型表現(xiàn)的不二選擇,從目前提出的預(yù)訓練方法來看窗价,主要可以分為兩個類型如下如庭,

1)基于特征(Feature-Based)主要的代表有ELMO,用做任務(wù)的模型來學習提前預(yù)訓練好的語言模型內(nèi)部隱狀態(tài)的組合參數(shù)撼港。(詳情可參見我的另一篇論文筆記來講ELMO的)坪它。

2)微調(diào)(Fine-Tuning)主要的代表有OpenAI GPT,用做任務(wù)的數(shù)據(jù)來微調(diào)已經(jīng)訓練好的語言模型帝牡。

但是以上的預(yù)訓練都存在一個問題往毡,即在預(yù)訓練的時候,僅僅考慮了文本的單向順序靶溜,不論是從左到右开瞭,還是從右到左,始終不能很好的解決想同時學習這個詞匯上下文的信息的問題(ELMO那篇其實也是Bi-directional LM罩息,但確實沒有做到同時學習這點嗤详,畢竟只是把從左到右和從右到左拼接在一起。瓷炮。葱色。暫時不知道作者這么說的意思具體指什么,我目前就單純的理解為作者提出的這個思想核心在于“同時”娘香,而其他NLP的Bi依然停留在分別訓練再concact的層面冬筒,并沒有真正的利用單詞的上下文來同時預(yù)測這個單詞,其實也就是沒有脫離傳統(tǒng)語言模型的套路)茅主。因此本文的最大的創(chuàng)新點也就在此了,提出了一種新的預(yù)訓練語言模型的方法(masked language model)土榴。除此之外诀姚,本論文的其他幾大貢獻為,

1)用實驗證實利用完整預(yù)訓練的語言模型玷禽,能大大減輕業(yè)務(wù)端的網(wǎng)絡(luò)結(jié)構(gòu)的復雜度赫段,上一些輕型的模型就能夠取得很好的效果呀打,甚至超過那些專為業(yè)務(wù)設(shè)計的復雜網(wǎng)絡(luò)結(jié)構(gòu)。

2)作者預(yù)訓練的這一套BERT模型糯笙,刷爆了各大任務(wù)指標贬丛,希望這一套模型能成為NLP領(lǐng)域的ResNet,開創(chuàng)NLP新時代给涕!

2.2 論文模型結(jié)構(gòu)

論文的模型倒沒有什么特別的創(chuàng)新豺憔,主要的特征提取層還是Transformer(改用RNN體系當然也可以)那一套(不熟悉的同學可以看我另一篇筆記,里面有詳細的介紹)够庙,這里直接貼一張原論文的圖恭应,想必大家應(yīng)該也能看懂。(原論文對于BERT還有BASE和LARGE的區(qū)別耘眨,BASE主要是為了對標比較OPENAI GPT)

model_structure.png

(PS. 看模型圖昼榛,這個真的是做到了上下文信息一起進去了,所有的token都有一個指向每一個Transformer的箭頭)

以及順便得再提一下剔难,模型的輸入包括三個部分胆屿,分別為

1)基于詞級別的詞向量(分隔以后)- 針對每一個單詞的embedding
2)基于位置的向量 - 告訴模型每一個單詞在一個句子中的位置信息
3)每一個句子的向量(分隔以后)- 告訴模型這個單詞是來自第一個句子還是第二個句子的(訓練方法二需要)

具體可以見下圖,應(yīng)該說是很清楚了偶宫,

model_input.png
2.3 論文預(yù)訓練方法 - Masked LM

接下來重點解析一下作者的預(yù)訓練方法非迹。為了訓練一個深度雙向表示模型,作者提出了一種屏蔽一句話中的部分詞的訓練方法读宙,然后讓模型來預(yù)測屏蔽的那個詞(同比于CBOW彻秆,就是根據(jù)這個詞的上下文,去預(yù)測每一個詞结闸,損失函數(shù)由所有詞的loss組成(cross-entropy)唇兑,而本文的loss只來源于那些被屏蔽的詞)。

這里我簡單聊一下我對這種訓練方法的理解桦锄。其實本質(zhì)上來講扎附,這種訓練方法來源于深度學習中很主流的自編碼(AutoEncoder)的方法論,該方法論的核心就是給定一個輸入结耀,經(jīng)過若干層的特征提取變化留夜,最后的輸出還是輸入本身(比如圖像領(lǐng)域,輸入一張圖片图甜,輸出仍是這一張圖片碍粥,其作用就是更好的提取這張圖片的特征表達,是一種非監(jiān)督的學習方法)黑毅。當然為了讓模型更加robust嚼摩,有一種升級的自編碼器就是加入一定的噪音(denoising-AutoEncoder),模型的訓練目標依舊是要復原輸入。再回過來看谷歌提出的這一種訓練方法枕面,其實就是輸入一句話愿卒,我們要復原這一句話,而其中的mask就是我們加的隨機的噪音~真的是很巧妙的遷移潮秘,解決了同時利用上下文信息的痛點~??琼开!

在作者的實驗設(shè)置中,大約15%的詞被隨機屏蔽枕荞。但是這樣的訓練方法有兩個缺陷柜候。
1)預(yù)訓練階段與微調(diào)階段不一致,因為微調(diào)階段是不會有【MASK】存在的买猖,所以考慮到這一層面改橘,作者也不總是將隨機選擇的詞屏蔽為MASK,主要的操作如下描述(相信大家一定看的懂玉控,就不翻譯了)

masked_LM.png

總結(jié)來講就是飞主,模型需要完成的任務(wù)有:
1)通過 MASK -> 自己(相對比較難的任務(wù))
2)通過自己 -> 自己(相對簡單的任務(wù))
3)通過其他 -> 自己(很難的任務(wù))

并且作者還強調(diào)了一下,隨機屏蔽的這一點量高诺,似乎并不會影響文本的語言理解(但是必須強調(diào)碌识,該訓練方法訓練出的其實已經(jīng)不是語言模型了,因為他無法用來生成一句話)虱而。

2)正因為從理論上來講每一次都只有15%的詞是來被訓練到的筏餐,所以,需要更多預(yù)訓練的計算與時間成本牡拇。而作者也在后文實驗證實了該方法確實收斂的較慢魁瞪,但是效果好呀!(對于這種惠呼,只要做好一次导俘,就能一勞永逸的預(yù)訓練模型,時間和計算成本的增加對谷歌來說確實是小case哈哈)

關(guān)于該預(yù)訓練方法的圖解如下【1】

Masked LM.png

這里得補充說明一點剔蹋,大家可以注意到旅薄,圖中的輸入不僅僅有一句話中的所有單詞,還有一個特殊的標記泣崩,[CLS]~關(guān)于這個標記少梁,我覺得可以簡單理解為,該標記經(jīng)過特征提取層以后的得到的向量矫付,是能夠代表整一個句子的(因為后面的每一個詞都會有一個自己對應(yīng)的向量凯沪,而很多下游任務(wù)都是希望得到句子的向量表達,所以要么采用暴力的方法买优,把所有的詞匯對應(yīng)的向量做一個pooling著洼,要么就如谷歌實驗設(shè)計的一樣樟遣,加入一個新的標記,讓模型對于這個標記去學會整個句子的表達身笤,用于下游的一系列文本分類任務(wù)等,看下面的圖示也應(yīng)該能很好理解了葵陵,圖解也是直接用了[CLS]的輸出液荸,并不是誤畫漏畫其他的單詞)。

2.3 論文預(yù)訓練方法 - Next Sentence Prediction

這個預(yù)訓練方法就比較好直觀的理解了脱篙,該預(yù)訓練方法主要是為了增加模型對句子間關(guān)系的理解能力(即Bert不僅僅解決一個句子內(nèi)的關(guān)系娇钱,他還解決句子間的關(guān)系)。因此作者設(shè)計了一種二分類預(yù)訓練方法(注意這里是嚴格的句子順序绊困,如果輸入是s1-s2文搂,那么順序不可顛倒,如果變?yōu)閟2-s1秤朗,那就是錯誤的)煤蹭,讓模型來判斷,B句是不是A句的后面一句取视。其中硝皂,作者的樣本集為平均分布,即一半是正確的作谭,一半是錯誤的稽物。最終,模型能達到97%-98%的準確率折欠。關(guān)于該預(yù)訓練方法的圖解如下【1】贝或。

Next Sentence Prediction.png

補充一下,除了[CLS]這個標記锐秦,谷歌還另外設(shè)計了一個標記[SEP]咪奖,這個標記就比較簡單了,就是單純的用來區(qū)分倆個句子的农猬。而最終的loss也是來源于兩種訓練方法疊加的一個loss赡艰。

2.4 論文預(yù)訓練與微調(diào)的過程

與傳統(tǒng)的LM模型訓練過程相似,BERT的訓練也遵循基本的套路(大家可參見ULMFiT斤葱,我的另一篇筆記也有詳實的介紹)慷垮。作者強調(diào)了一下,訓練數(shù)據(jù)集選取的一個關(guān)鍵揍堕,就是要選取基于文本的(document-level)而不僅僅是基于句子的(sentence-level)料身,主要是為了讓模型學會long contiguous sequences。接下來原論文中就提了一下預(yù)訓練的細節(jié)衩茸,有興趣的同學可以了解一下(大概很難復現(xiàn)芹血?)。至于BERT的實踐應(yīng)用,完全值得另開一篇文章來詳細解讀幔烛,本文就先不具體展開了~

2.5 論文實驗結(jié)果分析

論文作者把自己提出的整套框架在各大NLP任務(wù)上實現(xiàn)了一遍啃擦,并且最后還對模型的訓練過程做了一些實驗對比,這里就不具體展現(xiàn)了饿悬。有興趣的讀者可以自行研讀令蛉。值得一提的是,谷歌有開源的tensor2tensor狡恬,有空還是可以讀一遍源碼珠叔,或者工業(yè)界的小伙伴,可以學一波應(yīng)用(資源允許的話)弟劲。

但是祷安,仔細考量一下,Bert也并非是無敵的存在兔乞,我總結(jié)一下其主要的缺點有:
1)這是非語言模型汇鞭,所以不能適用于生成文本。
2)其訓練和預(yù)測的過程是不一樣的报嵌,即預(yù)測的時候是沒有[MASK]這種東西的虱咧,但是訓練的時候是有的。
3)效率還是比較低下锚国,沒有GPU的小伙伴基本是無緣嘍~
哎腕巡,不過人家就是效果好啊~哈哈~

------------------第三菇 - 總結(jié)------------------

3.1 總結(jié)

到這里莺戒,整篇論文的核心思想及其創(chuàng)新點已經(jīng)說清楚了籽御。本論文主要集中在于闡述BERT的核心思想,并且解釋了如何實現(xiàn)整一套BERT岂昭,附上了詳實的對比實驗豺总,來驗證模型的可行性车伞。

簡單總結(jié)一下本文就是先羅列了一下該論文的摘要,再具體介紹了一下自己對BERT的理解喻喳,以及詳細解釋了一些BERT涉及的訓練方法”砺祝總的來說,谷歌這篇論文注定是要開啟一個新時代鳄哭。希望大家讀完本文后能進一步加深對該論文的理解。有說的不對的地方也請大家指出纲熏,多多交流妆丘,大家一起進步~??

參考文獻:
【1】https://jalammar.github.io/illustrated-bert/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勺拣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌药有,老刑警劉巖车柠,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異塑猖,居然都是意外死亡,警方通過查閱死者的電腦和手機羊苟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門感憾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阻桅,你說我怎么就攤上這事』” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵杏糙,是天一觀的道長蚓土。 經(jīng)常有香客問我,道長蜀漆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任绷耍,我火速辦了婚禮蠕嫁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剃毒。我一直安慰自己搂赋,他們只是感情好益缠,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宋欺,像睡著了一般胰伍。 火紅的嫁衣襯著肌膚如雪齿诞。 梳的紋絲不亂的頭發(fā)上骂租,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音但汞,去河邊找鬼互站。 笑死,一個胖子當著我的面吹牛胡桃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播标捺,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼亡容,長吁一口氣:“原來是場噩夢啊……” “哼嗤疯!你這毒婦竟也來了闺兢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤脚囊,失蹤者是張志新(化名)和其女友劉穎桐磁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體我擂,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡缓艳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年阶淘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溪窒。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡冯勉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灼狰,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布伐厌,位于F島的核電站,受9級特大地震影響军熏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荡澎,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一晤锹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞭铆,春花似錦、人聲如沸车遂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衣陶。三九已至闸氮,卻和暖如春狱意,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背详囤。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隆箩,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓捌臊,卻偏偏與公主長得像兜材,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曙寡,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容