BERT:深度雙向預訓練語言模型

論文標題:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
論文鏈接:https://arxiv.org/abs/1810.04805

一骨稿、概述

  1. 簡介

BERT(Bidirectional Encoder Representations from Transformers)通過預訓練來學習無標注數(shù)據(jù)中的深度雙向表示扳肛,預訓練結(jié)束后通過添加一個額外的輸出層進行微調(diào)懒震,最終在多個NLP任務上實現(xiàn)了SOTA苟径。

預訓練語言模型在實踐中證明對提高很多自然語言處理任務有效视译,其中包括句子層級的任務徒蟆,比如自然語言推斷(natural language inference)和復述(paraphrasing)县习,還有token層級的任務迫悠,比如命名實體識別(named entity recognition)和問答(question answering)。

  1. 預訓練模型使用方法

在下游任務中應用預訓練語言模型表示的方法有兩種:feature-based的方法和fine-tuning的方法于购。舉例來說袍睡,ELMo這種預訓練語言模型使用feature-based的方法,通過將ELMo的預訓練的表示作為額外的特征輸入到特定于任務的模型中去肋僧;GPT使用fine-tuning的方法斑胜,通過引入少量的特定于任務的參數(shù)控淡,在下游任務中訓練時所有的預訓練參數(shù)。

  1. 語言模型的單向與雙向

截止BERT之前的預訓練語言模型都是單向的(unidirectional)止潘,包括GPT和ELMo掺炭,這樣的方法對句子層級的任務不是最優(yōu)的,而且對于token層級的任務比如問答非常有害凭戴。BERT使用masked language model(MLM)的方法來預訓練涧狮,這種方法能夠訓練一個雙向的(directional)語言模型。除了masked language model的預訓練的方法么夫,BERT還使用了next sentence prediction的預訓練方法者冤。

  1. BERT的貢獻
  • BERT證明了雙向預訓練的重要性;

  • BERT減少了對精心設計的特定于下游任務中的架構的依賴档痪;

  • BERT在11個下游任務上達到了SOTA涉枫。

二、BERT

BERT的使用分為兩個階段:預訓練(pre-training)和微調(diào)(fine-tuning)腐螟。預訓練階段模型通過兩種不同的預訓練任務來訓練無標注數(shù)據(jù)愿汰。微調(diào)階段模型使用預訓練參數(shù)初始化,然后使用下游任務(downstream task)的標注數(shù)據(jù)來微調(diào)參數(shù)乐纸。

BERT的一個顯著特點是它在不同的任務上有統(tǒng)一的架構衬廷,使用時只需要在BERT后面接上下游任務的結(jié)構即可使用。

  1. 模型架構

BERT的模型架構是一個多層雙向的Transformer的encoder锯仪。我們標記模型的層數(shù)(每一層是一個Tranformer的block)為L泵督,模型的hidden size為H,self-attention head的數(shù)量為A庶喜。兩個比較通用的BERT架構為BERT_{BASE}(L=12,H=768,A=12,Total\; Parameters=110M)BERT_{LARGE}(L=24,H=1024,A=16,Total\; Parameters=340M)小腊。

對比GPT,BERT使用了雙向self-attention架構久窟,而GPT使用的是受限的self-attention秩冈, 即限制每個token只能attend到其左邊的token。

  1. BERT輸入和輸出的表示

BERT的輸入表示能夠是一個句子或者是一個句子對斥扛,這是為了讓BERT能夠應對各種不同的下游任務入问。BERT的輸入是一個序列,該序列包含一個句子的token或者兩個句子結(jié)合在一起的token稀颁。

具體地芬失,我們會將輸入的自然語言句子通過WordPiece embeddings來轉(zhuǎn)化為token序列。這個token序列的開頭要加上[CLS]這個特殊的token匾灶,最終輸出的[CLS]這個token的embedding可以看做句子的embedding棱烂,可以使用這個embedding來做分類任務。

由于句子對被pack到了一起阶女,因此我們需要在token序列中區(qū)分它們颊糜,具體需要兩種方式:
①在token序列中兩個句子的token之間添加[SEP]這樣一個特殊的token哩治;
②我們?yōu)槊總€token添加一個用來學習的embedding來區(qū)分token屬于句子A還是句子B,這個embedding叫做segment embedding衬鱼。

具體地业筏,BERT的輸入由三部分相加組成:token embeddings、segment embeddings和position embeddings鸟赫。如下圖所示:

BERT input
  1. BERT的預訓練

BERT使用兩個無監(jiān)督的任務進行預訓練蒜胖,分別是Masked LM和Next Sentence Prediction(NSP)。如下圖所示惯疙,我們定義輸入的embedding為E翠勉,BERT最終輸出的[CLS]的embedding為C\in \mathbb{R}^{H}妖啥,最終輸出的第i^{th}個token的embedding為T_{i}\in \mathbb{R}^{H}霉颠。

pre-training
  • Task 1: Masked LM

我們有理由相信一個深度雙向模型比left-to-right模型和left-to-right和right-to-left簡單連接的模型的效果更加強大。不幸的是荆虱,標準的條件語言模型只能夠夠left-to-right或者right-to-left地訓練蒿偎,這是因為雙向條件會使每個token能夠間接地“看到自己”,并且模型能夠在多層上下文中簡單地預測目標詞怀读。

為了能夠雙向地訓練語言模型诉位,BERT的做法是簡單地隨機mask掉一定比例的輸入token(這些token被替換成[MASK]這個特殊token),然后預測這些被遮蓋掉的token菜枷,這種方法就是Masked LM(MLM)苍糠,相當于完形填空任務(cloze task)。被mask掉的詞將會被輸入到一個softmax分類器中啤誊,分類器輸出的維度對應詞典的大小岳瞭。在預訓練時通常為每個序列mask掉15%的token。與降噪自編碼器(denoising auto-encoders)相比蚊锹,我們只預測被mask掉的token瞳筏,并不重建整個輸入。

這種方法允許我們預訓練一個雙向的語言模型牡昆,但是有一個缺點就是造成了預訓練和微調(diào)之間的mismatch姚炕,這是因為[MASK]這個token不會在微調(diào)時出現(xiàn)。為了緩解這一點丢烘,我們采取以下做法:在生成訓練數(shù)據(jù)時我們隨機選擇15%的token進行替換柱宦,被選中的token有80%的幾率被替換成[MASK],10%的幾率被替換成另一個隨機的token播瞳,10%的幾率該token不被改變掸刊。然后T_i將使用交叉熵損失來預測原來的token。

  • Task 2: Next Sentence Prediction (NSP)

一些重要的NLP任務如Question Answering (QA)或者Natural Language Inference (NLI)需要理解句子之間的關系狐史,而這種關系通常不會被語言模型直接捕捉到痒给。為了使得模型能夠理解句子之間的關系说墨,我們訓練了一個二值的Next Sentence Prediction任務,其訓練數(shù)據(jù)可以從任何單語語料庫中生成苍柏。具體的做法是:當選擇句子A和句子B作為訓練數(shù)據(jù)時尼斧,句子B有50%的幾率的確是句子A的下一句(標簽是IsNext),50%的幾率是從語料庫中隨機選擇的句子(標簽是NotNext)试吁。[CLS]對應的最后一個隱層輸出向量被用來訓練NSP任務棺棵,這個embedding就相當于sentence embedding。雖然這個預訓練任務很簡單熄捍,但是事實上在微調(diào)時其在QA和NLI任務上表現(xiàn)出了很好的效果烛恤。在前人的工作中,只有sentence embedding被遷移到下游任務中余耽,而BERT會遷移所有的參數(shù)來初始化下游任務模型缚柏。

  1. BERT的微調(diào)

Transformer的self-attention機制允許BERT建模多種下游任務。對于包含句子對的任務碟贾,通常的做法是先獨立地對句子對中的句子進行編碼币喧,然后再應用雙向交叉注意(bidirectional cross attention)。而BERT使用self-attention機制統(tǒng)一了這兩個過程袱耽,這是因為對拼接起來的句子對進行self-attention有效地包含了兩個句子之間的雙向交叉注意(bidirectional cross attention)杀餐。

對于每個任務來說,我們只需要將任務特定的輸入輸出插入到BERT中然后端到端地微調(diào)即可朱巨。舉例子來說史翘,BERT的預訓練輸入句子A和句子B在微調(diào)時可以類比為:
①paraphrasing任務中的句子對;
②entailment任務中的hypothesis-premise對冀续;
③question answering任務中的question-passage對琼讽;
④text classification或者sequence tagging任務中的text-?對(也就是只輸入一個text,不必一定需要兩個句子)沥阳。

對于BERT的輸出跨琳,對于一些token-level的任務,BERT的token表示將被輸入到一個輸出層桐罕,比如sequence tagging或者question answering任務脉让;對于entailment或者sentiment analysis這樣的任務,可以將[CLS]對應的表示輸入到一個輸出層功炮。

三溅潜、實驗

  1. GLUE

我們使用[CLS]這個token的最后一層的隱層向量C\in \mathbb{R}^{H}作為聚合的表示,可以認為是sentence embedding薪伏。在微調(diào)時只引入一個新的權重W\in R^{K\times H}滚澜,這里的K代表標簽的數(shù)量,然后計算標準分類損失log(softmax(CW^{T}))嫁怀。下圖展示了BERT在GLUE上的效果:

GLUE
  1. SQuAD v1.1

在這個數(shù)據(jù)集上设捐,我們將question和passage拼接起來作為一個輸入序列(中間是[SEP])借浊。在微調(diào)時引入一個start向量S\in \mathbb{R}^{H}和一個end向量E\in \mathbb{R}^{H},計算T_iS的點積然后通過softmax函數(shù)作為wordi是答案的span起始位置的概率:P_{i}=\frac{e^{S\cdot T_{i}}}{\sum _{j}e^{S\cdot T_{j}}}萝招。答案的終止位置也做上述類似處理蚂斤。從ij的候選區(qū)間的得分記作S\cdot T_{i}+E\cdot T_{j},我們挑選j>i的最大得分區(qū)間作為預測的結(jié)果槐沼。下圖展示了BERT在SQuAD v1.1上的效果:

SQuAD v1.1
  1. SQuAD v2.0

SQuAD v2.0有的question在提供的passage中沒有答案存在曙蒸。在微調(diào)時我們設置沒有答案的問題的span的起始和結(jié)束位置都是[CLS]這個token,也就是start和end的可能性空間包含進了[CLS]的位置岗钩。在預測時纽窟,我們比較沒有答案的span得分s_{null}=S\cdot C+E\cdot C和最優(yōu)的有答案得分\hat{s}_{i,j}=max_{j\geq i}S\cdot T_{i}+E\cdot T_{j}。當\hat{s}_{i,j}>s_{null}+\tau時兼吓,我們預測這是一個有答案的問題臂港,這里的\tau用來在dev set上選擇最優(yōu)的F1。下圖展示了BERT在SQuAD v2.0上的效果:

SQuAD v2.0
  1. SWAG

微調(diào)時我們?yōu)锽ERT構建4個輸入序列周蹭,每一個是所給的句子(句子A)和一個可能的延續(xù)(句子B)趋艘。然后引入一個向量,該向量和每一個輸入對應的[CLS]的embedding的點積再通過一個softmax層來得到每個選擇的得分凶朗。下圖展示了BERT在SWAG上的效果:

SWAG
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市显拳,隨后出現(xiàn)的幾起案子棚愤,更是在濱河造成了極大的恐慌,老刑警劉巖杂数,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宛畦,死亡現(xiàn)場離奇詭異,居然都是意外死亡揍移,警方通過查閱死者的電腦和手機次和,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來那伐,“玉大人踏施,你說我怎么就攤上這事『毖” “怎么了畅形?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诉探。 經(jīng)常有香客問我日熬,道長,這世上最難降的妖魔是什么肾胯? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任竖席,我火速辦了婚禮耘纱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毕荐。我一直安慰自己揣炕,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布东跪。 她就那樣靜靜地躺著畸陡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虽填。 梳的紋絲不亂的頭發(fā)上丁恭,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音斋日,去河邊找鬼牲览。 笑死,一個胖子當著我的面吹牛恶守,可吹牛的內(nèi)容都是我干的第献。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兔港,長吁一口氣:“原來是場噩夢啊……” “哼庸毫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衫樊,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤飒赃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后科侈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载佳,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年臀栈,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔫慧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡权薯,死狀恐怖姑躲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情崭闲,我是刑警寧澤肋联,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刁俭,受9級特大地震影響橄仍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一侮繁、第九天 我趴在偏房一處隱蔽的房頂上張望虑粥。 院中可真熱鬧,春花似錦宪哩、人聲如沸娩贷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽品抽。三九已至,卻和暖如春圆恤,著一層夾襖步出監(jiān)牢的瞬間突倍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工羽历, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秕磷。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像拆火,于是被迫代替她去往敵國和親跳夭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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