Google BERT 論文閱讀

BERT: Bidirectional Encoder Representations from Transformers.

摘要

論文引入了一種稱爲BERT的語言表徵新模型,它支持transformer的雙向編碼器表徵。與最近的語言表徵模型不同(Peters et al.,2018a;Radford et al.,2018),BERT設計成通過在所有層中的左右上下文共同調節來對未標記文本的深度雙向表徵進行預訓練。因此,預訓練的BERT模型在用於其他廣泛的NLP任務中僅僅只需要添加輸出層即可,例如問答和語言推斷,不需要進行根據特定任務對BERT進行實質性的體系結構修改。

BERT做到了理論簡單,但是實驗表明它是非常強大的。它在11種自然語言處理任務中取得了state-of-the-art的結果,甚至在有些任務中有非常高的提升。

1 簡介

語言模型的預訓練已經被證明是改善許多自然語言處理任務的有效方法。這包括sentence-level的任務,如自然語言推理(natural language inference),段落理解(paraphrasing),其目的是通過整體分析句子來預測句子之間的關係。還包括token-level的任務,比如命名實體識別(named entity recognition)和問答(question ansewering),這些模型被要求產生token級別的細粒度(fine-grained)輸出。

目前,在下游任務(down-stream tasks)中應用預先訓練過的語言表徵有兩種策略:

1) 基於特徵(feature-based)。基於特定的方法使用將預訓練好的語言表徵當作一個額外的特徵輸入到基於特定任務的體系結構中,例如ELMo。

2) 微調(fine-tuning)。微調方法引入很少任務特定參數,通過簡單微調所有預訓練過參數來下游任務進行訓練,例如OpenAI GPT。

這兩種方法在預訓練都使用相同的目標函數,使用單向語言模型來學習一般的語言表徵。

作者認爲,當前已有的技術限制了預訓練表徵的強大,尤其是對於微調的方法。主要的限制是標準語言模型是單向的,這就限制了在預訓練過程中可選的體系結構。比如OpenAI GPT中使用了一個left-to-right的結構,Transformer中self-attention layers中,每個token都只能根據關注在它前面的token。這種限制導致sentence-level任務是次優的,並且對使用fine-tuning方法來實現token-level任務是非常有害的,例如question answering中,前後文的信息非常重要。

在論文中,作者對基於微調的方法進行了改進,提出了BERT。BERT通過使用“遮蔽語言模型”(masked language model, MLM)預訓練目標來緩解先前提到的單向性約束。遮蔽語言模型隨機遮蔽輸入的一些token,目標是去預測原文中被遮蔽後的詞彙ID。不同於left-to-right語言模型預訓練,MLM目標能使語言表徵融合左右文本信息,這允許對深的雙向Transformer進行預訓練。除了遮蔽語言模型,論文還訓練了“下一個句子預測”任務,聯合地對文本對的表徵進行了學習。論文的貢獻如下:

  • 論文展示了雙向預訓練對語言表徵的重要性。不同於OpenAI GPT使用單向語言模型進行預訓練,BERT使用遮蔽語言模型來預訓練深度雙向語言表徵。這也與ELMo形成對比,ELMo使用分別訓練left-to-right和right-to-left語言模型的淺級聯表徵。
  • 論文表明,經過預先訓練的語言表徵減少了許多特定任務的精心設計的體系結構的需求。BERT是第一個在大量的sentence-level和token-level任務上都實現了state-of-the-art的效果,且優於許多特定於任務的網絡結構的基於微調的語言表徵模型。
  • BERT在11中NLP任務中都取得了state-of-the-art的效果,代碼和預訓練模型在https://github.com/google-research/bert
  •  

2 相關工作

2.1 基於特徵的非監督方法

在方面的工作有:word embedding,sentence embedding,paragragh embedding

ELMo分別使用了left-to-right和right-to-left的語言模型來提取上下文敏感(context-sensitive)的特徵。然後concatenation這兩個特徵來表示token的上下文表徵(word embedding)。當將ELMo的上下文word embedding與現有的特定任務的網絡結構結合後提高了幾個state-of-the-art的主要NLP benchmarks。包括問答,情緒分析,實體命名識別。

 

2.2 基於微調的非監督方法

句子或文檔編碼器通過沒有標記的文本上進行預訓練得到上下文的詞表徵,然後在下游任務中進行監督微調。這中方法的優點是隻有很少的參數需要需要從頭開始學習。基於此,OpenAI GPT在許多sentence-level任務中取得了state-of-the-art的結果。

 

2.3 從監督數據中進行遷移學習

從大量數據中進行訓練然後遷移到特定任務中進行監督學習,在自然語言處理任務中,如自然語言推理和機器翻譯,以及計算機視覺任務中都表面了其有優越性。

 

3 BERT

BERT主要包含兩個過程:pre-training 和 fine-tunning。在預訓練期間,在不同的預預訓練任務上使用未標記的數據對該模型進行的訓練(同一個 model)。在微調期間,首先用預訓練的參數初始化BERT模型,並且使用來自下游任務的標記數據對所有參數進行微調。每個下游任務都有單獨的微調模型,即使它們是用相同的預訓練參數初始化的。圖1中的問答示例將作爲本節的運行示例。

BERT的一個顯著特點是其同一個網絡結構可以跨越不同的任務,在預訓練的網絡結構和最終的下游任務結構之間只有很小的不同(最後多一個輸出層)。

 

Model Architecture。BERT的模型結構是一個多層的雙向Transformer編碼器,Transformer幾乎直接是基於Vaswani et al. (2017)的原始實現。論文使用 L 來代表網絡的層數,即Transformer block的個數,H指代隱藏層維度,self-attention head的數量用A來表示。在論文所有的cases裏都將feed-forward/filter的大小設置爲4H,即3072對應於H=768,4096對應於H=1024。論文主要展示了兩種模型大小的結果。一是BERTBASE (L=12,H=768,A=12,參數量:110M),二是BERTLARGER (L=24,H=1024,A=16,參數量:340M)。BERTBASE 與OpenAI GPT有相同的模型大小,因此兩個具有可比性。需要注意的是,在這篇論文中,將雙向Transformer稱爲Transformer編碼器,將OpenAI GPT中的單向Transformer稱爲Transformer解碼器,因爲它只能關注前面(左側)的上下文。

 

Input/Output Representations。爲了使BERT可以處理各種下游任務,在一個token序列中,它的輸入表徵能夠同時明確的表達一個單個句子和一對句子。在整個工作中,“句”可以是任意的連續文本,而不是實際的語言語句,“序列”指的是BERT的輸入token序列,可以是單句或兩個句子打包在一起。論文使用了具有30,000詞彙大小的WordPiece embedding。句子頭部使用了一個特殊標記[CLS],與這個標記對應的最後隱藏狀態可以在分類任務中用來作爲這個輸入句子的表徵。當句子對融合衛一個句子時,論文用兩種方式來區分它們。一是使用一個特殊的token[SEP],二是其,在每個token中添加一個學習過的embedding來指示它是屬於句子A還是句子B。如圖1所示,輸入的embedding表示衛E,最後的隱藏層向量中,[CLS]是指句子的表徵C∈R^H,第i個向量是指第i個輸入token的輸出表徵Ti∈R^H。

對於給定的token,它的輸入表徵是通過對相應的token、segment和position embedding的求和來構造的。在圖2中可以看到這個結構的可視化。

 

3.1 預訓練BERT

BERT是一個多任務模型,它的任務是由兩個自監督任務組成,即MLM和NSP。

 

TASK 1: Masked LM (MLM)。直觀地講,深度雙向模型比left-to-right模型或left-to-right模型和right-to-left模型的串聯更強大。但是,標準的條件語言模型只能left-to-right或right-to-left進行單向訓練,因爲雙向條件訓練可以使每個詞間接地“看到自己”,

爲了訓練深度雙向表示,作者隨機地遮掩一定百分比的輸入token,然後預測這些被遮掩的token,這個過程稱爲“masked LM”(MLM),可以理解爲完型填空。在這種情況下,與maked token對應的最終隱藏向量被輸入到對應詞彙表的輸出Softmax中。作者在實驗中遮掩了輸入序列15%的token。與去噪自動編碼器不同,BERT只預測maksed token,而不是重構整個輸入。

雖然這可以獲得一個雙向的預訓練模型,但缺點是在預訓練模型和下游任務微調之間造成了不匹配,因爲[MASK] token並不會出現在微調中,爲了減輕這個問題,BERT並不總是用[MAKS]去遮掩需要被遮掩的token,訓練數據隨機選擇15%的token位置來進行預測,如果第i個token被選擇了,那麼它有80%的概率被[MASK]替換,10%的概率被隨機token替換和10%的概率不改變。使用交叉熵損失來得到預測原始token的Ti。

 

TASK 2:Next Sentence Prediction (NSP)。

許多重要的下游任務,如問答(QA)和自然語言推理(NLI),都是基於理解兩句之間的關係,而不是通過語言建模直接捕捉到的。爲了訓練模型能理解句子之間的關係,論文作者對下一個句子預測預訓練了一個二分類任務。對於每個訓練樣本都包含一個句子A和一個句子B,讓模型去判斷B是否是A的下一句,一般B有50%的概率是A的真實下一句,對其標記衛IsNext,有50%的概率是語料庫中的隨機句子,對其標記衛NotNext。在圖1的模型結構中,C(一般可用於句子分類)可以用來判斷B是否是A的下一句。這種操作雖然簡單,但是效果極好,在下一個句子預測中能達到97%-98%的準確率,預訓練的模型對QA和NLI的提升也很大。

  對比:word2vec的一個精髓是引入了一個優雅的負採樣任務來學習詞向量(word-level representation),BERT使用句子級負採樣任務學到句子表示。同時在句子表示上,BERT這裏並沒有像下游監督任務中的普遍做法一樣,在encoding的基礎上再搞個全局池化之類的,它首先在每個sequence(對於句子對任務來說是兩個拼起來的句子,對於其他任務來說是一個句子)前面加了一個特殊的token[CLS]。然後讓encoder對[CLS]進行深度encoding,深度encoding的最高隱層即爲整個句子/句對的表示。這個做法乍一看有點費解,不過Transformer是可以無視空間和距離的把全局信息encoding進每個位置的,而[CLS]作爲句子/句對的表示是直接跟分類器的輸出層連接的,因此其作爲梯度反傳路徑上的“關卡”,當然會想辦法學習到分類相關的上層特徵。

 

預訓練數據

因爲模型要學習詞和上下文已經句子和上下文的關係,需要使用document-level的語料庫,而不能使用sentence-level的語料庫(如Billion Word Benchmark)

document-level的語料庫:

BooksCorpus (800M words)

English Wikipedia (2,500M words)。只提取文本段落,忽略列表、表和標題。

 

3.2 微調BERT

對於需要處理文本對的應用,常見的做法是先分別對文本對進行編碼,然後再應用雙向交叉注意力機制。但是BERT改用自注意力機制來統一了這兩個階段,因爲自注意力機制對拼接的文本對編碼時包括了兩個句子間的雙向交叉注意力。

對於每個任務,只需將任務的輸入和輸出插入到BERT中,然後端到端的訓練所有參數。句子A和句子B被統一指代輸入的兩個句子,可以是(1)段落的句子對,(2)推理中的假設-前提對,(3)問答對以及(4)針對文本分類或者序列標註的退化text-null(B爲空)。在輸出部分,token的表徵可以輸入到額外添加的輸出層中進行token-level的任務,比如序列序列標註或者問答,[CLS]的表徵可以表示爲一個句子的表徵,可以輸入到輸出層進行分類,例如推理或者情感分析任務。

相比於BERT的預訓練,微調就相對便宜一下,BERT 預訓練需要大量時間(使用 16 個 TPUv3 訓練 3 天) BERT大號則需要更長

BERT 在 33 億文本的語料上訓練語言模型,谷歌用了 16 個自己的 TPU 集羣(一共 64 塊 TPU)來訓練大號版本的 BERT,一共花了約4天的時間。(現在提出了優化將BERT訓練時間縮短到76分鐘,但是使用了1024塊TPUv3 ==)目前谷歌公佈了代碼預訓練模型,前面寫了網址,我們可以直接拿來進行任務微調,作者在論文指出論文中的11項任務都是在一個單獨的Cloud TPU上微調一個小時即可完成,或者在一個單獨的GPU上微調幾個小時(還是可行的)。

在不同任務上的模型效果

4 實驗

4.1 GLUE數據集上的效果

作者在GLUE數據集進行微調,GLUE是General Language Understanding Evaluation的簡稱,包含了各種自然語言處理的任務,提供相關數據集。

GLUE基準包括以下數據集,其描述最初在Wang等人(2018)的文章中進行了總結:

  • MNLI

    多類型自然語言推理是一項大規模的衆包蘊涵分類任務(Williams等,2018)。給定一對句子,目標是預測第二句與第一句相比是蘊涵、矛盾還是中立。

  • QQP

    Quora問題對是一個二元分類任務,其目的是確定Quora上提出的兩個問題是否在語義上是等價的(Chen等,2018)。

  • QNLI

    問題自然語言推理是斯坦福問題答疑數據集(Rajpurkar等,2016)的一個版本,已被轉換爲二元分類任務(Wang等,2018)。正例是(問題,句子)對包含正確答案,而負例是(問題,句子)來自同一段落,不包含答案。

  • SST-2

    斯坦福情感樹庫2是一個二元單句分類任務,由從電影評論中提取的句子和人類註釋的情緒組成(Socher等,2013)。

  • CoLA

    語言可接受性語料庫是一個二元單句分類任務,其目標是預測英語句子在語言上是否“可接受”(Warstadt等,2018)。

  • STS-B

    語義文本相似性基準是從新聞標題和其他來源中提取的句子對的集合(Cer等,2017)。它們用1到5的分數進行註釋,表示兩個句子在語義上的相似程度。

  • MRPC

    微軟研究院解釋語料庫由從在線新聞源自動提取的句子對組成,其中人類註釋是否該對中的句子是否在語義上相等(Dolan和Brockett,2005)。

  • RTE

    識別文本蘊涵是類似於MNLI的二進制蘊涵任務,但訓練數據少得多(Bentivogli等,2009)。(注:請注意,本文僅報告單任務微調結果。多任務微調方法可能會進一步推動結果。例如,我們確實觀察到MNLI多任務培訓對RTE的實質性改進。)

  • WNLI

    威諾格拉德自然語言推理是一個源自(Levesque等,2011)的小型自然語言推理數據集。GLUE網頁指出,該數據集的構建存在問題,並且每個提交給GLUE訓練過的系統的性能都比預測大多數類別的65.1基線準確度差。(注:https://gluebenchmark.com/faq) 因此,我們將這一組排除在OpenAIGPT的公平性之外。對於我們的GLUE提交,我們總是預測其大多數的類。

 

對於分類任務,額外的參數矩陣表示爲W∈R^(K×H),K是類別的個數。使用 C和W來計算標準分類損失,例如log(softmax(CW^T)),C是[CLS]的隱藏向量 C∈R^H

設置batch size: 32,epoch: 3,學習率:5e-5, 4e-5, 3e-5, 2e-5。

大號BERT在小的數據集上不是很穩定。

表一給出了結果。大號BERT的效果更加,尤其在小數據集上。但是兩種BERT都全面超過了之前sate-of-the-art的方法。

 

4.2 SQuADv1.1問答數據集效果

SQuADv1.1(Stanford Question Answering Dataset)包含100k的問答數據對。

微調時,句子A對應問題,句子B對應一段包含答案的文本,模型任務就是預測答案在B中的位置。所以微調只需要引入一個開始位置的向量S∈R^H和結束位置的向量E∈R^H。判斷B中的token是否時起始位置,只需對應的Ti與S進行點乘,然後輸入到softmax中

 

結束位置的計算和起始位置的計算是一樣的。對於答案候選片段 i~j的最終得分記爲

訓練目標函數是正確起始位置和結束位置的對數似然的和

設置batch size:32, epoch: 3,學習率:5e-5

表二展示了結果,問答的效果沒有前面GLUE數據集上的任務表現強。

4.3 SQuAD v2.0

SQuAD v2.0是SQuAD v1.1的擴展,它允許在所提供的段落中不存在簡短的答案,從而使問題更加現實。起始和結束的答案跨度位置的概率空間被擴展爲包括[CLS]標記的位置。沒有答案的跨度分數爲:-s_null=S·C + E·C

非空跨度的最佳得分記爲:

將兩者進行比較,如果包含答案則滿足:

後面一項是與之,用來使F1最大化。

設置batchsize:48, epoch:2, 學習率5e-5

結果如表三

4.4 SWAG

SWAG: Situations With Adversarial Generations

對抗生成情境(SWAG)數據集包含113k個句子對的完成樣例,用於評估基礎常識推理。給定一個句子,任務是在四種選擇中選擇最合理的後續。

當對數據集進行微調時,作者構造了四個輸入序列,每個序列包含給定句子A句)的串聯和可能的延續(B句)。引入的唯一特定於任務的參數是一個向量,它與[CLS]表徵C進行點積來表示每個選擇的分數,該分數被一個Softmax層規範化。

設置epoch:3, batchsize:16,學習率2e-5.

結果如表四

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章