【NLP-15】BERT模型(Bidirectional Encoder Representations from Transformers)


目錄

  1. BERT簡介
  2. BERT概述
  3. BERT解析
  4. GLUE語料集
  5. 模型比較
  6. 總結

一句話簡介2018年年底發掘的自編碼模型,采用預訓練和下游微調方式處理NLP任務;解決動態語義問題,word embedding 送入雙向transformer(借用了ELMo的雙向思路,GPTtransformer)中。Masked LM(MLM,借用了CBOW的上下預測中心的思慮,也是雙向的)和Next Sentence Prediction(NSP,學習句子之間的關系)兩種方法分別捕捉詞語和句子級別的representation。並將模型深度從12提升到24

   

一、BERT簡介

BERT(Bidirectional Encoder Representations from Transformers),是Google2018年提出的預訓練模型,即雙向Transformer的Encoder,因為decoder是不能獲要預測的信息的。模型的主要創新點都在pre-train方法上,即用了Masked LM(MLM)和Next Sentence Prediction(NSP)兩種方法分別捕捉詞語和句子級別的representation。

Bert網上的評價很高,是因為它有重大的理論或者模型創新嗎?其實並沒有,而是一個集大成者。

二、BERT概述

Bert采用和GPT完全相同的兩階段模型,首先是語言模型預訓練;其次是使用Fine-Tuning模式解決下游任務。和GPT的最主要不同在於在預訓練階段采用了類似ELMO的雙向語言模型,即雙向的Transformer,當然另外一點是語言模型的數據規模要比GPT大。所以這里Bert的預訓練過程不必多講了。模型結構如下:

對比OpenAI GPT(Generative pre-trained transformer),BERT是雙向的Transformer block連接;就像單向rnn和雙向rnn的區別,直覺上來講效果會好一些。

對比ELMo,雖然都是"雙向",但目標函數其實是不同的。ELMo是

分別以和作為目標函數,獨立訓練處兩個representation然后拼接,而BERT則是以作為目標函數訓練LM

BERT預訓練模型分為以下三個步驟:Embedding、Masked LM、Next Sentence Prediction

三、BERT結構解析

BERT提供了簡單和復雜兩個模型,對應的超參數分別如下:

BERT-base : L=12H=768A=12,參數總量110M;(與GPT持平)

BERT-large: L=24H=1024A=16,參數總量340M

3.1 Embedding

這里的Embedding由三種Embedding求和而成:

  1. Token Embeddings是詞向量,第一個單詞是CLS標志,可以用於之后的分類任務
  2. Segment Embeddings用來區別兩種句子,因為預訓練不光做LM還要做以兩個句子為輸入的分類任務
  3. Position Embeddings和之前文章中的Transformer不一樣,不是三角函數而是學習出來的

3.2 Masked LM

MLM可以理解為完形填空(作者是這么解釋,也可能是借鑒CBOW模型),作者會隨機mask每一個句子中15%的詞,用其上下文來做預測,例如:my dog is hairy my dog is [MASK]

此處將hairy進行了mask處理,然后采用非監督學習的方法預測mask位置的詞是什么,但是該方法有一個問題,因為是mask15%的詞,其數量已經很高了,這樣就會導致某些詞在fine-tuning階段從未見過,為了解決這個問題,作者做了如下的處理:

  1. 80%是采用[mask],my dog is hairy → my dog is [MASK]
  2. 10%是隨機取一個詞來代替mask的詞,my dog is hairy -> my dog is apple
  3. 10%保持不變,my dog is hairy -> my dog is hairy

注意:這里的10%是15%需要mask中的10%

那么為啥要以一定的概率使用隨機詞呢?這是因為transformer要保持對每個輸入token分布式的表征,否則Transformer很可能會記住這個[MASK]就是"hairy"。至於使用隨機詞帶來的負面影響,文章中解釋說,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影響是可以忽略不計的。Transformer全局的可視,又增加了信息的獲取,但是不讓模型獲取全量信息。

BERT 的損失函數只考慮了 mask 的預測值,忽略了沒有掩蔽的字的預測。這樣的話,模型要比單向模型收斂得慢,不過結果的情境意識增加了。

3.3 Next Sentence Prediction

Next Sentence Prediction(NSP)的任務是判斷句子B是否是句子A的下文。如果是的話輸出'IsNext',否則輸出'NotNext'。訓練數據的生成方式是從平行語料中隨機抽取的連續兩句話,其中50%保留抽取的兩句話,它們符合IsNext關系,另外50%的第二句話是隨機從預料中提取的,它們的關系是NotNext的。這個關系保存在圖4中的[CLS]符號中。

為了預測第二個句子是否是第一個句子的后續句子,用下面3個步驟來預測:

  1. 整個輸入序列輸入給 Transformer 模型
  2. 用一個簡單的分類層將 [CLS] 標記的輸出變換為 2×1 形狀的向量
  3. 用 softmax 計算 IsNextSequence 的概率

在訓練 BERT 模型時,Masked LM 和 Next Sentence Prediction 是一起訓練的,目標就是要最小化兩種策略的組合損失函數。

3.4 微調

在海量單預料上訓練完BERT之后,便可以將其應用到NLP的各個任務中了:

a)基於句子對的分類任務:

  1. MNLI:給定一個前提 (Premise) ,根據這個前提去推斷假設 (Hypothesis) 與前提的關系。該任務的關系分為三種,蘊含關系 (Entailment)、矛盾關系 (Contradiction) 以及中立關系 (Neutral)。所以這個問題本質上是一個分類問題,我們需要做的是去發掘前提和假設這兩個句子對之間的交互信息。
  2. QQP:基於Quora,判斷 Quora 上的兩個問題句是否表示的是一樣的意思。
  3. QNLI:用於判斷文本是否包含問題的答案,類似於我們做閱讀理解定位問題所在的段落。
  4. STS-B:預測兩個句子的相似性,包括5個級別。
  5. MRPC:也是判斷兩個句子是否是等價的。
  6. RTE:類似於MNLI,但是只是對蘊含關系的二分類判斷,而且數據集更小。
  7. SWAG:從四個句子中選擇為可能為前句下文的那個

b)基於單個句子的分類任務

  1. SST-2:電影評價的情感分析。
  2. CoLA:句子語義判斷,是否是可接受的(Acceptable)。

對於GLUE數據集的分類任務(MNLIQQPQNLISST-BMRPCRTESST-2CoLA),BERT的微調方法是根據[CLS]標志生成一組特征向量 C,並通過一層全連接進行微調。損失函數根據任務類型自行設計,例如多分類的softmax或者二分類的sigmoidSWAG的微調方法與GLUE數據集類似,只不過其輸出是四個可能選項的softmax

c)問答任務

SQuAD v1.1:給定一個句子(通常是一個問題)和一段描述文本,輸出這個問題的答案,類似於做閱讀理解的簡答題。如圖表示的,SQuAD的輸入是問題和描述文本的句子對。輸出是特征向量,通過在描述文本上接一層激活函數為softmax的全連接來獲得輸出文本的條件概率,全連接的輸出節點個數是語料中Token的個數。

d)命名實體識別

CoNLL-2003 NER:判斷一個句子中的單詞是不是Person,Organization,Location,Miscellaneous或者other(無命名實體)系統需要接收文本序列,標記文本中的各種類型的實體(人員,組織,日期等)。 可以用 BERT 將每個 token 的輸出向量送到預測 NER 標簽的分類層。

四、GLUE語料集

GLUE(https://gluebenchmark.com/)是一個自然語言任務集合,它包括以下這些數據集:

MNLI        Multi-Genre NLI        蘊含關系推斷

QQP        Quora Question Pairs        問題對是否等價

QNLI        Question NLI        句子是否回答問句

SST-2        Stanford Sentiment Treebank        情感分析

CoLA        Corpus of Linguistic Acceptability        句子語言性判斷

STS-B        Semantic Textual Similarity        語義相似

MRPC        Microsoft Research Paraphrase Corpus        句子對是否語義等價

RTE        Recognizing Texual Entailment        蘊含關系推斷

WNLI        Winograd NLI        蘊含關系推斷

五、模型比較

ELMO,GPT和BERT的關系

Bert 其實和 ELMO 及 GPT 存在千絲萬縷的關系,

  1. 如果我們把 GPT 預訓練階段換成雙向語言模型,那么就得到了 Bert;
  2. 如果我們把 ELMO 的特征抽取器換成 Transformer,那么我們也會得到 Bert。所以你可以看出:Bert 最關鍵兩點,一點是特征抽取器采用 Transformer;第二點是預訓練的時候采用雙向語言模型。

再往前看,在NLP中有着舉足輕重地位的模型和思想還有Word2vecLSTM等。

Word2vec作為里程碑式的進步,對NLP的發展產生了巨大的影響,但Word2vec本身是一種淺層結構,而且其訓練的詞向量所"學習"到的語義信息受制於窗口大小,因此后續有學者提出利用可以獲取長距離依賴的LSTM語言模型預訓練詞向量,而此種語言模型也有自身的缺陷,因為此種模型是根據句子的上文信息來預測下文的,或者根據下文來預測上文,直觀上來說,我們理解語言都要考慮到左右兩側的上下文信息,但傳統的LSTM模型只學習到了單向的信息。

六、總結

6.1 評價

主要貢獻:

  1. 引入了Masked LM,使用雙向LM做模型預訓練。
  2. 為預訓練引入了新目標NSP,它可以學習句子與句子間的關系。
  3. 進一步驗證了更大的模型效果更好: 12 –> 24 層。
  4. 為下游任務引入了很通用的求解框架,不再為任務做模型定制。
  5. 刷新了多項NLP任務的記錄,引爆了NLP無監督預訓練技術。

客觀評價:

Bert是NLP里里程碑式的工作,對於后面NLP的研究和工業應用會產生長久的影響,這點毫無疑問。但是從上文介紹也可以看出,從模型或者方法角度看,Bert借鑒了ELMO,GPT及CBOW,主要提出了Masked 語言模型及Next Sentence Prediction,但是這里Next Sentence Prediction基本不影響大局,而Masked LM明顯借鑒了CBOW的思想。所以說Bert的模型沒什么大的創新,更像最近幾年NLP重要進展的集大成者。

BERT算法還有很大的優化空間,例如我們在Transformer中講的如何讓模型有捕捉Token序列關系的能力,而不是簡單依靠位置嵌入。BERT的訓練在目前的計算資源下很難完成,論文中說BERT的訓練需要在64塊TPU芯片上訓練4天完成,而一塊TPU的速度約是目前主流GPU的7-8倍。非常幸運的是谷歌開源了各種語言的模型,免去了我們自己訓練的工作。

主要特點:

首先是兩階段模型,第一階段雙向語言模型預訓練,這里注意要用雙向而不是單向,第二階段采用具體任務Fine-tuning或者做特征集成;

第二是特征抽取要用Transformer作為特征提取器而不是RNN或者CNN;

第三,雙向語言模型可以采取CBOW的方法去做(當然我覺得這個是個細節問題,不算太關鍵,前兩個因素比較關鍵)。

Bert最大的亮點在於效果好及普適性強,幾乎所有NLP任務都可以套用Bert這種兩階段解決思路,而且效果應該會有明顯提升。可以預見的是,未來一段時間在NLP應用領域,Transformer將占據主導地位,而且這種兩階段預訓練方法也會主導各種應用。

6.2 BERT優點

  1. BERT是截止至2018年10月的最新的的state of the art模型,通過預訓練和精調可以解決11項NLP的任務。使用的是Transformer,相對於rnn而言更加高效、能捕捉更長距離的依賴。與之前的預訓練模型相比,它捕捉到的是真正意義上的bidirectional context信息
  2. Transformer Encoder因為有Self-attention機制,因此BERT自帶雙向功能
  3. 因為雙向功能以及多層Self-attention機制的影響,使得BERT必須使用Cloze版的語言模型Masked-LM來完成token級別的預訓練
  4. 為了獲取比詞更高級別的句子級別的語義表征,BERT加入了Next Sentence Prediction來和Masked-LM一起做聯合訓練
  5. 微調成本小

6.3 BERT缺點

  1. 每個batch只有15%的token被預測,所以BERT收斂得比left-to-right模型要慢(它們會預測每個token)
  2. BERT 假設要預測的詞之間是相互獨立的,即 Mask 之間相互不影響。但實際是有關聯的(XLNet中提到)
  3. BERT屬於自編碼語言模型,在預訓練過程中會使用 MASK 符號,但在下游 NLP 任務中並不會使用,因此這也會造成一定的誤差(XLNet中提到)
  4. BERT對硬件資源的消耗巨大(大模型需要16個tpu,歷時四天;更大的模型需要64個tpu,歷時四天。

附件一:結果展示

句子關系判斷及分類任務

抽取式任務:SQuAD

序列標注:命名實體識別

分類任務:SWAG

附件二:BERT適用范圍

來自張俊林的解讀https://zhuanlan.zhihu.com/p/68446772

第一,如果NLP任務偏向在語言本身中就包含答案,而不特別依賴文本外的其它特征,往往應用Bert能夠極大提升應用效果。典型的任務比如QA和閱讀理解,正確答案更偏向對語言的理解程度,理解能力越強,解決得越好,不太依賴語言之外的一些判斷因素,所以效果提升就特別明顯。反過來說,對於某些任務,除了文本類特征外,其它特征也很關鍵,比如搜索的用戶行為/鏈接分析/內容質量等也非常重要,所以Bert的優勢可能就不太容易發揮出來。再比如,推薦系統也是類似的道理,Bert可能只能對於文本內容編碼有幫助,其它的用戶行為類特征,不太容易融入Bert中。

第二,Bert特別適合解決句子或者段落的匹配類任務。就是說,Bert特別適合用來解決判斷句子關系類問題,這是相對單文本分類任務和序列標注等其它典型NLP任務來說的,很多實驗結果表明了這一點。而其中的原因,我覺得很可能主要有兩個,一個原因是:很可能是因為Bert在預訓練階段增加了Next Sentence Prediction任務,所以能夠在預訓練階段學會一些句間關系的知識;第二個可能的原因是:因為Self Attention機制自帶句子A中單詞和句子B中任意單詞的Attention效果,而這種細粒度的匹配對於句子匹配類的任務尤其重要,所以Transformer的本質特性也決定了它特別適合解決這類任務。

從上面這個Bert的擅長處理句間關系類任務的特性,我們可以繼續推理出以下觀點:既然預訓練階段增加了Next Sentence Prediction任務,就能對下游類似性質任務有較好促進作用,那么是否可以繼續在預訓練階段加入其它的新的輔助任務?而這個輔助任務如果具備一定通用性,可能會對一類的下游任務效果有直接促進作用。這也是一個很有意思的探索方向。

第三,Bert的適用場景,與NLP任務對深層語義特征的需求程度有關。感覺越是需要深層語義特征的任務,越適合利用Bert來解決;而對有些NLP任務來說,淺層的特征即可解決問題,典型的淺層特征性任務比如分詞,POS詞性標注,NER,文本分類等任務,這種類型的任務,只需要較短的上下文,以及淺層的非語義的特征,貌似就可以較好地解決問題,所以Bert能夠發揮作用的余地就不太大,有點殺雞用牛刀,有力使不出來的感覺。這很可能是因為Transformer層深比較深,所以可以逐層捕獲不同層級不同深度的特征。於是,對於需要語義特征的問題和任務,Bert這種深度捕獲各種特征的能力越容易發揮出來,而淺層的任務,比如分詞/文本分類這種任務,也許傳統方法就能解決得比較好,因為任務特性決定了,要解決好它,不太需要深層特征。

第四,Bert比較適合解決輸入長度不太長的NLP任務,而輸入比較長的任務,典型的比如文檔級別的任務,Bert解決起來可能就不太好。主要原因在於:Transformer的self attention機制因為要對任意兩個單詞做attention計算,所以時間復雜度是n平方,n是輸入的長度。如果輸入長度比較長,Transformer的訓練和推理速度掉得比較厲害,於是,這點約束了Bert的輸入長度不能太長。所以對於輸入長一些的文檔級別的任務,Bert就不容易解決好。結論是:Bert更適合解決句子級別或者段落級別的NLP任務。

也許還有其它因素,不過貌似不如上面四條表現得這么明顯,所以,我先歸納這四項基本原則吧。

附件三、問答

1bert構建雙向語言模型不是很簡單嗎?不也可以直接像elmo拼接Transformer decoder嗎?

BERT 的作者認為,這種拼接式的bi-directional 仍然不能完整地理解整個語句的語義。更好的辦法是用上下文全向來預測[mask],也就是用 "能/實現/語言/表征/../的/模型",來預測[mask]。BERT 作者把上下文全向的預測方法,稱之為 deep bi-directional。

參考文獻

0】原論文 https://arxiv.org/abs/1810.04805

【1】NLP各種模型,主要BERT: https://blog.csdn.net/sunhua93/article/details/102764783

【2】BERT相關論文、文章和代碼資源匯總 https://zhuanlan.zhihu.com/p/50717786

【3】BERT使用詳解(實戰) : https://www.jianshu.com/p/bfd0148b292e

【4】Bert時代的創新(應用篇)Bert在NLP各領域的應用進展: https://zhuanlan.zhihu.com/p/68446772

5】英文版解讀: https://www.lyrn.ai/2018/11/07/explained-bert-state-of-the-art-language-model-for-nlp/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM