本文是 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 一文的筆記。

摘要

本文介紹一種新的語言表徵模型: BERT,即 Bidirectional Encoder Representations from Transformers.

BERT 首先根據所有層中的雙向上下文信息進行預訓練。預訓練之後的表徵僅僅需要一個額外的輸出層進行微調,就能在許多任務中取得 state-of-the-art 結果。

BERT 概念上很簡單,但是卻非常強大。它在 11 項 NLP 任務中取得了 state-of-the-art 結果。其中包括: 把 GLUE beanchmark 的分提高到了 80.4%;吧 MultiNLI 精度提高到 86.7%,在 SQuAD 的 F1 結果提高到 93.2 等。

1 引言

預訓練模型在許多NLP 任務中都有效。這些任務包括句子級別的任務,如 NLI 和改述任務;還包括 token 級別的任務,如 NER 和 SQuAD 問答。

使用預訓練模型可以有兩種策略: feature-based 和 fine-tuning。feature-based 方案,如 ELMo, 將預訓練模型的表徵作為額外的 feature 輸入模型。fine-tuning 方案,如 OpenAI GPT,根據具體任務引入了極小量的參數,下游任務訓練的時候僅僅需要對已經預訓練好的模型進行 fine-tuning。在 BERT 之前, ELMo 和 GPT 在預訓練的時候使用相同的目標函數,即單向語言模型來學習通用語言表徵。

BERT 的作者認為由於當前標準的語言模型都是單向的(如 OpenAI GPT),因此每個 token 只能 attend 到之前的 token。這種限制對於 sentence 級別的任務來說是僅僅是次優而已,但對 token 級別的任務(如 SQuAD 問答)來說卻是災難性的。

本文通過 BERT 解決了提到的單向限制問題。提出了一個新的預訓練目標函數,即"Masked Language Model" (MLM)。隨機從輸入中選擇 token 進行 mask,目標函數通過被選擇 token 的 context 來預測該 token。 MLM 允許融合左右兩邊的上下文信息。本文貢獻有幾點:

  • 雙向預訓練模型
  • 通過預訓練表徵,是的許多基於任務的結構沒有存在的必要
  • 在 11 項 NLP 任務中取得了最好的結果

(整體看下來,貢獻貌似就一點: 新的訓練目標函數。架不住結果太好。)

2 相關工作

預訓練通用語言表徵

2.1 Feature-based 方案

詞表徵一直是一個活躍的研究領域,有非神經網路和神經網路兩種方案。word embedding 一直是現代 NLP 系統不可分割的一部分。

word embedding 方案還可以進行泛化,如 sentence embeddings 或 paragraph embeddings。同傳統的詞嵌入類似,這些 embedding 一般也是作為模型的額外輸入feature。

ELMo 將傳統的詞嵌入研究帶入一個新的維度。他們提出從語言模型中提取出上下文敏感的 features。將新 feature 加入到已經存在的模型中,可以提高現有模型的性能。

2.2 Fine-tuning 方案

最近語言模型遷移學習的一個趨勢是,在一個語言模型目標函數上預訓練模型,然後再同一個模型的下游監督任務上進行 fine-tuning。這樣做的好處是,不需要完全從頭訓練所有參數。

OpenAI GPT 通過此方案在許多 sentence-level 任務上取得了 state-of-the-art 的結果。

2.3 監督數據上的遷移學習

無監督預訓練的優勢是有幾乎不受限制的數據量。但也有研究證明在大數據集的監督任務上的遷移也是有效的,如在 NLI和 MT 領域。在 NLP 領域之外,計算機視覺研究也證明了使用大規模數據集進行預訓練的有效性。

3 BERT

這部分詳細介紹 BERT 的實現。

模型結構-》輸入表徵-》預訓練任務-》預訓練過程-》fine-tuning 過程-》同 OpenAI GPT 對比。

3.1 模型結構

BERT 的模型結構是一個多層雙向 Transformer Encoder。其 Transformer Encoder 的實現同原始實現完全一致,因此這裡不做介紹。

將層數定義為 L,hidden size 定義為 H,自注意力的 heads 數量定義為 A. 將 feed-forward 或 filter size 設置為 4H。定義了兩個模型 size:

  • BERT base: L=12, H=768, A=12, 一共 110M 參數
  • BERT large: L=24, H=2014, A=16, 一共 340M 參數

BERT,OpenAI GPT 和 ElMo 的對比如圖:

3.2 輸入表徵

輸入表徵可以在一個 token 序列中表示單個文本句子,或是一對文本句子(如[問題,答案])。而每個 token 的輸入表徵由三部分相加得到: token、segment 和 position。如下圖:

具體細節如下:

  • Word Embedding 使用 WordPiece embedding,詞典有 3萬 token。
  • position embedding 使用 learned positional embeddings, 序列長度最長支持 512 個 token
  • 句子中第一個 token 是特定的分類 embedding([CLS])。該 token 對應的輸出在分類任務重作為聚合序列表徵,在非分類任務中被忽略
  • 句子對打包成一個單獨的序列,其中用一個特殊的 token 分割([SEP])。另外,為每一個部分分別增加 A embedding 或者 B embedding。(即 segment)
  • 單句輸入僅使用 A embedding

3.3 預訓練任務

BERT 的預訓練不使用傳統的單向語言模型執行,而使用了兩種新的非監督預測任務。

3.3.1 任務1: Masked LM

直覺上說,雙向模型肯定比單向(left-to-right 或 right-to-left)模型的效果更好。但不幸的是,傳統的 LM 只能單向訓練。(一般意義上的語言模型就是根據已經說過的東西預測後面的東西)

為了能夠訓練雙向表徵,BERT 採用了直觀的方法: 隨機在輸入的token 上加蒙版,然後預測這些 token,即"Masked LM" (MLM)。輸出向量會餵給一個輸出 softmax,這個跟傳統 LM 一樣。在實驗中隨機對 15% 的 token 執行蒙版操作。

MLM 方案也有一些問題,第一個問題是[MASK] token在 fine-tuning 的時候是看不到的,同預訓練時候不 match。因此採取的方案是,隨機選取 15% 的 token,然後執行下列操作

  • 80% 的可能性,將 token 用 [MASK] 替代
  • 10% 的可能性,將 token 用隨機詞代替
  • 10% 的可能性,保持 token 不變

MLM 方案的第二個問題是每次預測僅僅有 15% 的 token 被預測,因此預訓練需要更多步才能收斂。這也意味著訓練時間會更長。

3.3.2 任務2: Next Sentence Prediction

許多下游任務是基於對兩個文本句子關係的理解,如問答(QA)或自然語言推理(NLI)。因此為了訓練模型理解句子之間的關係,提出了下句預測任務。即如果A,B 是一對句子,則在訓練的時候 50%的可能輸入是 A 和 B,另外 50% 的可能是 A 和另一個隨機句子。

3.4 預訓練過程

BERT 訓練使用了 BooksCorpus (800M 單詞)和 Wikipedia(2500M 單詞).

輸入序列從語料中抽樣兩類文本句子。第一個 sentence 是A embedding,第二個句子 50% 的概率是 A 後面實際的句子,50%的概率是一個隨機句子。抽樣的句子都小於 512 個 tokens。

訓練時的 batch size 是256 個句子,即 256 * 512 個 tokens。在上面3.3 個billion 單詞上訓練 1M 步,即 40 epochs。訓練使用 Adam 優化,learning rate 為 1e-4, eta_1 為0.9, eta_2 為 0.999,L2 權重遞減因子為 0.01。所有層都加一個 0.1 的 dropout。

Bert base 在 4個雲 TPU 上執行(16 個 TPU 晶元),Bert large 在 16 個雲TPU 上執行(64個 TPU 晶元)。分別訓練4天結束。

3.5 Fine-tuning 過程

對序列分類任務(即對整個序列進行分類),BERT fine-tuning 的過程是比較直接的。將預訓練模型輸出的第一個 token 的最終隱藏狀態作為輸出,然後後面加一個 softmax 層即可。

對於問答問題或 token 預測任務,需要對結構稍作修改。

在 fine-tuning 過程中,大部分超參都同預訓練時候使用的一樣。最優的超參值選擇同具體任務有關,不過作者發現對大部分任務老說使用下面的值比較好:

  • batch size: 16, 32
  • 學習率(Adam): 5e-5,3e-5,2e-5
  • epochs 次數: 3,4

作者還發現對於大數據集,超參選擇對最終結果的影響更小。

3.6 BERT 同 OpenAI GPT 的對比

BERT 同 OpenAI GPT 的最大不同是採用雙向上下文和提出兩個預訓練任務。但 BERT 同 OpenAI GPT 還有其他不同:

  • GTP 在 BooksCorpus 語料上訓練;BERT 在 BooksCorpus 和 Wikipedia 上訓練。
  • GTP 在 fine-tuning 階段引入 [SEP] 和 [CLS] token;BERT 在預訓練過程中就引入。
  • GPT 的 batch size 是 32000 單詞;BERT是 128000單詞。
  • GPT 的 learning rate 固定為 5e-5,BERT 根據任務調整 learning rate。

4 實驗

本部分介紹 BERT 在 11 項 NLP 任務上的 fine-tuning 結果。

4.1 GLUE 數據集

GLUE 數據集是多個自然語言理解任務的基準。它包含以下數據集:

MNLI Multi-Genre Natural Language Inference. 給定一對句子,根據第一個句子,預測第二個句子是否是蘊含、矛盾或中心。

QQP Quora Question Pairs. 二元分類問題。判斷 Quora 上的兩個問題是否等價。

QNLI Question Natural Language Inference. 斯坦福問答數據集的一個二元分類版本。包含問題和一個句子。正例中句子是問題的答案;負例中句子不是問題的答案。

SST-2 The Stanford Sentiment Treebank。情感分析數據集。包含標註過的電影評論信息。

CoLA The Corpus of Linguistic Acceptability. 判斷英語句子是否在語言學上「可接受」。

STS-B The Semantic Textual Similarity Benchmark. 包含句子對,還有一個表示兩個句子對相似度的打分,1-5 分表示。

MRPC Microsoft Research Paraphrase Corpus. 包含從在線新聞源提取的兩個句子,還有表示兩個句子在語義上是否等價的標記。

RTE Recognizing Textual Entailment. 同 MNLI 相似,但數據量更少

WNLI Winograd NLI. 一個小的自然語言推理數據集。GLUE 網站上說這個數據集構造的可能有些問題,因此 BERT 將其排除出去。

4.1.1 GLUE 結果

將第一個輸入 token 的表徵([CLS])作為最終的輸出。如下圖所示。

fine-tuning 引入的新參數只有 softmax 分類層的參數。

最終結果如下表所示:

從結果可以看出,BERT 超過了其他所有的任務的結果。另外 BERT large 的結果也比 Bert base 好。5.2 部分將試圖分析原因。

4.2 SQuAD v1.1

斯坦福問答數據集包含 100k 問答對。給定一個問題和一個包含答案的段落,任務的目標是從段落中找出答案的取件。例如

- 輸入問題
Where do water droplets collide with ice crystals to form precipitation?

- 輸入段落
Precipitation forms as smaller droplets coalesce via collision with other rain drops or ice drystals within a cloud.

- 輸出答案
within a cloud

區間預測任務同 GLUE 的序列分類任務不同,因此需要對 BERT 進行一些小調整。如下圖:

問題和段落作為一個單個句子輸入。唯一一個新增參數是 start vector S in R^H 和 end vector E in R^H .

單詞 i 是否是區間開始的概率通過公式計算

P_i = frac{e^{Scdot T_i}}{sum_j{e^{Scdot T_j}}}

最終結果如下表所示:

4.3 Named Entity Recognition

為了評價在 token 標記任務上的性能,作者使用 CoNLL 2003 NER 數據集進行 fine-tuning。該數據集包含 200k 個訓練單詞,被標記為 Person, Organization, Location, Miscellaneous 或 Other(非命名實體)。結構如下:

對每個單詞的預測沒有考慮周圍單詞的預測(沒有用 autoregressive 或 crf)。最終得到結果如下:

4.4 SWAG

SWAG 數據集(The Situations With Adversarial Generations) 包含 113 k 的常識推理樣例。比如

A girl is going across a set of monkey bars. She
(i) jumps up across the mokey bars
(ii) struggles onto the bars to grab her head.
(iii) gets to the end and stands on a wooden plank.
(iv) jumps up and does a back flip

同 GLUE 適配類似,SWAG 的輸入也是一個句子對,句子 A 是給定的句子,句子 B 是可能的答案。引入一個向量 V in R^H . V 與 C 的點積代表選擇這一類的得分。

最終結果如下:

5 Ablation Studies

上文已經證明了 BERT 的強大效果,但是沒有指明 BERT 的每個部分分別有什麼作用。本部分使用 ablation studies 來進行說明

5.1 預訓練任務的影響

本文認為BERT 使用的基於深度雙向特性和 Masked LM 預訓練是其獲得性能提升的主要原因。為了說明這一點,本文設計了兩個新的 BERT base 模型。

  • No NSP: 該模型使用 masked LM 進行預訓練,而沒有使用 Next Sentence Prediction(NSP)任務
  • LTR & No NSP: 該模型使用 LTR LM,而不是 MLM。

最終結果如下:

BERT base 同 No NSP比較結果可以看出,移除 NSP 在 QNLI,MNLI 和 SQuAD 任務上明顯造成性能下降。

No NSP 同 LTR & No NSP 的比較可以看出,LTR 模型在所有任務上表現都更差,在 MRPC 和 SQuAD 任務上尤其差。

為了說明雙向性的作用,在 LTR & No NSP 模型上進行 fine-tuning 的時候加了一個 BiLSTM 層。這提升了 SQuAD 任務上的性能,但是降低了其他任務上的性能。

5.2 模型大小的影響

作者調整 L(層數)、H(隱藏層維度) 和 A(attention 頭數) 參數,得到了不同的結果。如下:

可以看出,隨著模型參數的增多,模型性能會穩定提升。

即使在小樣本上這個結論也成立。

5.3 訓練步數的影響

下圖展示了 MNLI Dev 上的準確率隨訓練步數變化的曲線:

可以看出,MLM 模型收斂的要慢一些,但 MLM 模型效果比 LTR 模型好。

5.4 基於 BERT 的特徵方案

截止目前為止,我們介紹的所有 BERT 的結果都是基於 fine-tuning 方案,在預訓練模型上面加一層分類層。爾後一起對所有參數進行 fine-tuning。

然而,在一些場景下基於 feature 的方案可能更有優勢。首先,並不是所有 NLP 任務都可以很容易表示為 Transformer Encoder 結構。其次,計算特徵數據的一次表徵,爾後在這個表徵基礎上執行不那麼昂貴的實驗,可以減少計算複雜度。

作者在 CoNLL-2003 NER 任務上生成了同 ELMo 類似的上下文關聯表徵,但在 fine-tuning 的時候不改變 BERT 的參數。結果如下所示,從結果可以看出 BERT 在 fine-tuning 方案和 feature-base 方案下都很有效。

6 結論

無監督預訓練已經成為許多自然語言理解系統整體中不可分割的一部分。本文提出的深度雙向架構使得預處理模型成功應用於許多 NLP 任務中。


推薦閱讀:
相关文章