BERT原始論文中文版翻譯,內容整理自網路。
翻譯作者:yuanxiaosc
原文連結: https://github.com/yuanxiaosc/BERT_Paper_Chinese_Translation
摘要
我們提出了一種新的稱為 BERT 的語言表示模型,BERT 代表來自 Transformer 的雙向編碼器表示(Bidirectional Encoder Representations from Transformers)。不同於最近的語言表示模型(Peters et al., 2018,Radford et al., 2018), BERT 旨在透過聯合調節所有層中的左右背景關係來預訓練深度雙向表示。因此,只需要一個額外的輸出層,就可以對預訓練的 BERT 表示進行微調,從而為廣泛的任務(比如回答問題和語言推斷任務)建立最先進的模型,而無需對特定於任務進行大量模型結構的修改。
BERT 的概念很簡單,但實驗效果很強大。它掃清了 11 個 NLP 任務的當前最優結果,包括將 GLUE 基準提升至 80.4%(7.6% 的絕對改進)、將 MultiNLI 的準確率提高到 86.7%(5.6% 的絕對改進),以及將 SQuAD v1.1 的問答測試 F1 得分提高至 93.2 分(提高 1.5 分)——比人類表現還高出 2 分。
1 介紹
語言模型預訓練可以顯著提高許多自然語言處理任務的效果(Dai and Le, 2015;Peters et al., 2018;Radford et al., 2018;Howard and Ruder, 2018)。這些任務包括句子級任務,如自然語言推理(Bow-man et al., 2015;Williams et al., 2018)和釋義(Dolan and Brockett, 2005),目的是透過對句子的整體分析來預測句子之間的關係,以及標記級任務,如命名物體識別(Tjong Kim Sang and De Meulder, 2003)和 SQuAD 問答(Rajpurkar et al., 2016),模型需要在標記級生成細粒度的輸出。
現有的兩種方法可以將預訓練好的語言模型表示應用到下游任務中:基於特徵的和微調。基於特徵的方法,如 ELMo (Peters et al., 2018),使用特定於任務的模型結構,其中包含預訓練的表示作為附加特特徵。微調方法,如生成預訓練 Transformer (OpenAI GPT) (Radford et al., 2018)模型,然後引入最小的特定於任務的引數,並透過簡單地微調預訓練模型的引數對下游任務進行訓練。在之前的工作中,兩種方法在預訓練任務中都具有相同的標的函式,即使用單向的語言模型來學習通用的語言表達。
我們認為,當前的技術嚴重地限制了預訓練表示的效果,特別是對於微調方法。主要的侷限性是標準語言模型是單向的,這就限制了可以在預訓練期間可以使用的模型結構的選擇。例如,在 OpenAI GPT 中,作者使用了從左到右的模型結構,其中每個標記只能關註 Transformer 的自註意層中該標記前面的標記(Williams et al., 2018)。這些限制對於句子級別的任務來說是次優的(還可以接受),但當把基於微調的方法用來處理標記級別的任務(如 SQuAD 問答)時可能會造成不良的影響(Rajpurkar et al., 2016),因為在標記級別的任務下,從兩個方向分析背景關係是至關重要的。
在本文中,我們透過提出 BERT 改進了基於微調的方法:來自 Transformer 的雙向編碼器表示。受完形填空任務的啟發,BERT 透過提出一個新的預訓練任務來解決前面提到的單向約束:“遮蔽語言模型”(MLM masked language model)(Tay-lor, 1953)。遮蔽語言模型從輸入中隨機遮蔽一些標記,目的是僅根據被遮蔽標記的背景關係來預測它對應的原始詞彙的 id。與從左到右的語言模型預訓練不同,MLM 標的允許表示融合左右背景關係,這允許我們預訓練一個深層雙向 Transformer。除了遮蔽語言模型之外,我們還提出了一個聯合預訓練文字對來進行“下一個句子預測”的任務。
本文的貢獻如下:
我們論證了雙向預訓練對語言表徵的重要性。與 Radford et al., 2018 使用單向語言模型進行預訓練不同,BERT 使用遮蔽語言模型來實現預訓練深層雙向表示。這也與 Peters et al., 2018 的研究形成了對比,他們使用了一個由左到右和由右到左的獨立訓練語言模型的淺層連線。
我們表明,預訓練的表示消除了許多特定於任務的高度工程化的模型結構的需求。BERT 是第一個基於微調的表示模型,它在大量的句子級和標記級任務上實現了最先進的效能,優於許多特定於任務的結構的模型。
BERT 為 11 個 NLP 任務提供了最先進的技術。我們還進行大量的消融研究,證明瞭我們模型的雙向本質是最重要的新貢獻。程式碼和預訓練模型將可在 goo.gl/language/bert 獲取。
2 相關工作
預訓練通用語言表示有很長的歷史,我們將在本節簡要回顧最流行的方法。
2.1 基於特徵的方法
幾十年來,學習廣泛適用的詞語表示一直是一個活躍的研究領域,包括非神經網路學領域(Brown et al., 1992;;Blitzer et al., 2006)和神經網路領域(Collobert and Weston, 2008;Mikolov et al., 2013;Pennington et al., 2014)方法。經過預訓練的詞嵌入被認為是現代 NLP 系統的一個不可分割的部分,詞嵌入提供了比從頭開始學習的顯著改進(Turian et al., 2010)。
這些方法已被推廣到更粗的粒度,如句子嵌入(Kiros et al., 2015;Logeswaran and Lee, 2018)或段落嵌入(Le and Mikolov, 2014)。與傳統的單詞嵌入一樣,這些學習到的表示通常也用作下游模型的輸入特徵。
ELMo(Peters et al., 2017)從不同的維度對傳統的詞嵌入研究進行了概括。他們建議從語言模型中提取背景關係敏感的特徵。在將背景關係嵌入與特定於任務的架構整合時,ELMo 為幾個主要的 NLP 標準提供了最先進的技術(Peters et al., 2018),包括在 SQuAD 上的問答(Rajpurkar et al., 2016),情感分析(Socher et al., 2013),和命名物體識別(jong Kim Sang and De Meul-der, 2003)。
2.2 基於微調的方法
語言模型遷移學習(LMs)的一個最新趨勢是,在對受監督的下游任務的模型進行微調之前,先對 LM 標的上的一些模型構造進行預訓練(Dai and Le, 2015;Howard and Ruder, 2018;Radford et al., 2018)。這些方法的優點是隻有很少的引數需要從頭開始學習。至少部分得益於這一優勢,OpenAI GPT (Radford et al., 2018)在 GLUE 基準測試的許多句子級任務上取得了此前最先進的結果(Wang et al.(2018))。
2.3 從有監督的資料中遷移學習
雖然無監督預訓練的優點是可用的資料量幾乎是無限的,但也有研究表明,從具有大資料集的監督任務中可以進行有效的遷移,如自然語言推理(Con-neau et al., 2017)和機器翻譯(McCann et al., 2017)。在NLP之外,計算機視覺研究也證明瞭從大型預訓練模型中進行遷移學習的重要性,有一個有效的方法可以微調在 ImageNet 上預訓練的模型(Deng et al., 2009;Yosinski et al., 2014)
3 BERT
本節將介紹 BERT 及其具體實現。首先介紹了 BERT 模型結構和輸入表示。然後我們在 3.3 節介紹本文的核心創新——預訓練任務。在 3.4 和 3.5 節中分別詳細介紹了預訓練過程和微調模型過程。最後,在 3.6 節中討論了 BERT 和 OpenAI GPT 之間的區別。
3.1 模型結構
BERT 的模型結構是一個基於 Vaswani et al.(2017) 描述的原始實現的多層雙向 Transformer 編碼器,並且 Transformer 編碼器釋出在 tensor2tensor 程式碼庫中。由於最近 Transformer 的使用已經非常普遍,而且我們的實現與最初的實現實際上是相同的,所以我們將省略對模型結構的詳盡的背景描述,並向讀者推薦 Vaswani et al.(2017) 以及優秀的指南,如“帶註釋的 Transformer”。
在這項工作中,我們表示層的數量(即,Transformer 塊)為 LL,隱藏尺寸為 HH,自註意頭的個數為 AA。在所有例子中,我們將前饋/過濾器的大小設定為 4H4H,即當 H=768H=768 時是 30723072;當 H=1024H=1024 是 40964096。我們主要分析兩個模型大小的結果:
為了方便比較,BERTBASEBERTBASE 選擇了與 OpenAI GPT 一樣的模型大小。然而,重要的是,BERT Transformer 使用的是雙向的自註意力,而 GPT Transformer 使用的是受限的自註意力,每個標記只能關註其左邊的語境。我們註意到,在文獻中,雙向 Transformer 通常被稱為“Transformer 編碼器”,而只有標記左側語境的版本由於可以用於文字生成而被重新定義為“Transformer 解碼器”。BERT、OpenAI GPT 和 ELMo 之間的比較如圖 1 所示。
圖 1:預訓練模型結構的不同。BERT 使用雙向 Transformer。OpenAI GPT 使用 從左到右的 Transformer。ELMo 使用獨立訓練的從左到右和從右到左的 LSTM 的連線來為下游任務生成特徵。其中,只有 BERT 表示在所有層中同時受到左右語境的制約。
3.2 輸入表示
我們的輸入表示能夠在一個標記序列中清楚地表示單個文字句子或一對文字句子(例如,[Question, Answer])。(註釋:在整個工作中,“句子”可以是連續的任意跨度的文字,而不是實際語言意義上的句子。“序列”是指輸入到 BERT 的標記序列,它可以是單個句子,也可以是兩個句子組合在一起。)透過把給定標記對應的標記嵌入、句子嵌入和位置嵌入求和來構造其輸入表示。圖 2 給出了輸入表示的視覺化表示。
細節是:
我們使用含 3 萬個標記詞語的 WordPiece 嵌入(Wu et al., 2016)。我們用 ## 表示拆分的單詞片段。
我們使用學習到的位置嵌入,支援的序列長度最長可達 512 個標記。
每個序列的第一個標記始終是特殊分類嵌入([CLS])。該特殊標記對應的最終隱藏狀態(即,Transformer 的輸出)被用作分類任務中該序列的總表示。對於非分類任務,這個最終隱藏狀態將被忽略。
句子對被打包在一起形成一個單獨的序列。我們用兩種方法區分這些句子。方法一,我們用一個特殊標記([SEP])將它們分開。方法二,我們給第一個句子的每個標記新增一個可訓練的句子 A 嵌入,給第二個句子的每個標記新增一個可訓練的句子 B 嵌入。
對於單句輸入,我們只使用句子 A 嵌入。
圖 2:BERT 的輸入表示。輸入嵌入是標記嵌入(詞嵌入)、句子嵌入和位置嵌入的總和。
3.3.1 任務一#:遮蔽語言模型
直覺上,我們有理由相信,深度雙向模型嚴格來說比從左到右模型或從左到右模型結合從右到左模型的淺層連線更強大。不幸的是,標準條件語言模型只能從左到右或從右到左進行訓練,因為雙向條件作用將允許每個單詞在多層背景關係中間接地“看到自己”。
為了訓練深度雙向表示,我們採用了一種簡單的方法,即隨機遮蔽一定比例的輸入標記,然後僅預測那些被遮蔽的標記。我們將這個過程稱為“遮蔽語言模型”(MLM),儘管在文獻中它通常被稱為完形填詞任務(Taylor, 1953)。在這種情況下,就像在標準語言模型中一樣,與遮蔽標記相對應的最終隱藏向量被輸入到與詞彙表對應的輸出 softmax 中(也就是要把被遮蔽的標記對應為詞彙表中的一個詞語)。在我們所有的實驗中,我們在每個序列中隨機遮蔽 15% 的標記。與去噪的自動編碼器(Vincent et al., 2008)不同的是,我們只是讓模型預測被遮蔽的標記,而不是要求模型重建整個輸入。
雖然這確實允許我們獲得一個雙向預訓練模型,但這種方法有兩個缺點。第一個缺點是,我們在預訓練和微調之間造成了不匹配,因為 [MASK] 標記在微調期間從未出現過。為了緩和這種情況,我們並不總是用真的用 [MASK] 標記替換被選擇的單詞。而是,訓練資料生成器隨機選擇 15% 的標記,例如,在my dog is hairy 這句話中,它選擇 hairy。然後執行以下步驟:
資料生成不會總是用 [MASK] 替換被選擇的單詞,而是執行以下操作:
80% 的情況下:用 [MASK] 替換被選擇的單詞,例如,my dog is hairy → my dog is [MASK]
10% 的情況下:用一個隨機單詞替換被選擇的單詞,例如,my dog is hairy → my dog is apple
10% 的情況下:保持被選擇的單詞不變,例如,my dog is hairy → my dog is hairy。這樣做的目的是使表示偏向於實際觀察到的詞。
Transformer 編碼器不知道它將被要求預測哪些單詞,或者哪些單詞已經被隨機單詞替換,因此它被迫保持每個輸入標記的分佈的背景關係表示。另外,因為隨機替換隻發生在 1.5% 的標記(即,15% 的 10%)這似乎不會損害模型的語言理解能力。
第二個缺點是,使用 Transformer 的每批次資料中只有 15% 的標記被預測,這意味著模型可能需要更多的預訓練步驟來收斂。在 5.3 節中,我們證明瞭 Transformer 確實比從左到右的模型(預測每個標記)稍微慢一點,但是 Transformer 模型的實驗效果遠遠超過了它增加的預訓練模型的成本。
3.3.2 任務2#:下一句預測
許多重要的下游任務,如問題回答(QA)和自然語言推理(NLI),都是建立在理解兩個文字句子之間的關係的基礎上的,而這並不是語言建模直接捕捉到的。為了訓練一個理解句子關係的模型,我們預訓練了一個下一句預測的二元分類任務,這個任務可以從任何單語語料庫中簡單地歸納出來。具體來說,在為每個訓練前的例子選擇句子 A 和 B 時,50% 的情況下 B 是真的在 A 後面的下一個句子,50% 的情況下是來自語料庫的隨機句子。比如說:
我們完全隨機選擇不是下一句的句子,最終的預訓練模型在這個任務中達到了 97%-98% 的準確率。儘管這個任務很簡單,但是我們在 5.1 節中展示了針對此任務的預訓練對 QA 和 NLI 都非常有益。
3.4 預訓練過程
預訓練過程大體上遵循以往文獻中語言模型預訓練過程。對於預訓練語料庫,我們使用 BooksCorpus(800M 單詞)(Zhu et al., 2015)和英語維基百科(2,500M 單詞)。對於維基百科,我們只提取文字段落,而忽略串列、表格和標題。為了提取長的連續序列,使用檔案級別的語料庫,而不是使用像 Billion Word Benchmark (Chelba et al., 2013)那樣使用打亂順序的句子級別語料庫是至關重要的。
為了生成每個訓練輸入序列,我們從語料庫中取樣兩段文字,我們將其稱為“句子”,儘管它們通常比單個句子長得多(但也可以短一些)。第一個句子新增 A 嵌入,第二個句子新增 B 嵌入。50% 的情況下 B 確實是 A 後面的實際下一句,50% 的情況下它是隨機選取的一個的句子,這是為“下一句預測”任務所做的。兩句話合起來的長度要小於等於 512 個標記。語言模型遮蔽過程是在使用 WordPiece 序列化句子後,以均勻的 15% 的機率遮蔽標記,不考慮部分詞片的影響(那些含有被 WordPiece 拆分,以##為字首的標記)。
我們使用 256 個序列(256 個序列 * 512 個標記= 128,000 個標記/批次)的批大小進行 1,000,000 步的訓練,這大約是在 33 億詞的語料庫中訓練 40 個週期。我們用Adam 最佳化演演算法並設定其學習率為 1e−41e−4,β1=0.9,β2=0.999β1=0.9,β2=0.999,L2L2 的權重衰減是 0.01,並且在前 10000 步學習率熱身(learning rate warmup),然後學習率開始線性衰減。我們在所有層上使用 0.1 機率的 dropout。像 OpenAI GPT 一樣,我們使用 gelu 啟用(Hendrycks and Gimpel, 2016)而不是標準 relu。訓練損失是遮蔽語言模型似然值與下一句預測似然值的平均值。
在 4 塊 Cloud TPU(共含有 16 塊 TPU)上訓練 BERTBASEBERTBASE。在 16 塊 Cloud TPU(共含有 64 塊 TPU)訓練 BERTLARGEBERTLARGE。每次訓練前需要 4 天的時間。
3.5 微調過程
對於序列級別的分類任務,BERT 微調非常簡單。為了獲得輸入序列的固定維度的表示,我們取特殊標記([CLS])構造相關的嵌入對應的最終的隱藏狀態(即,為 Transformer 的輸出)的池化後輸出。我們把這個向量表示為 C∈RHC∈RH,在微調期間唯一需要的新增加的引數是分類層的引數矩陣 W∈RK×HW∈RK×H,其中 KK 是要分類標簽的數量。分類標簽的機率P∈RKP∈RK 由一個標準的 softmax 來計算,P=softmax(CWT)P=softmax(CWT)。對 BERT 的引數矩陣 WW 的所有引數進行了聯合微調,使正確標簽的對數機率最大化。對於區間級和標記級預測任務,必須以特定於任務的方式稍微修改上述過程。具體過程見第 4 節的相關內容。
對於微調,除了批次大小、學習率和訓練次數外,大多數模型超引數與預訓練期間相同。Dropout 機率總是使用 0.1。最優超引數值是特定於任務的,但我們發現以下可能值的範圍可以很好地在所有任務中工作:
Batch size: 16, 32
Learning rate (Adam): 5e-5, 3e-5, 2e-5
Number of epochs: 3, 4
我們還觀察到大資料集(例如 100k+ 標記的訓練集)對超引數選擇的敏感性遠遠低於小資料集。微調通常非常快,因此只需對上述引數進行完全搜尋,並選擇在驗證集上效能最好的模型即可。
3.6 BERT 和 OpenAI GPT 的比較
在現有預訓練方法中,與 BERT 最相似的是 OpenAI GPT,它在一個大的文字語料庫中訓練從左到右的 Transformer 語言模型。事實上,BERT 中的許多設計決策都是有意選擇盡可能接近 GPT 的,這樣兩種方法就可以更加直接地進行比較。我們工作的核心論點是,在 3.3 節中提出的兩項新的預訓練語言模型任務佔了實驗效果改進的大部分,但是我們註意到 BERT 和 GPT 在如何訓練方面還有其他幾個不同之處:
GPT 是在 BooksCorpus(800M 詞)上訓練出來的;BERT 是在 BooksCor-pus(800M 詞)和 Wikipedia(2,500M 詞)上訓練出來的。
GPT 僅在微調時使用句子分隔符([SEP])和分類標記([CLS]);BERT 在預訓練時使用 [SEP], [CLS] 和 A/B 句嵌入。
GPT 在每批次含 32,000 詞上訓練了 1M 步;BERT 在每批次含 128,000 詞上訓練了 1M 步。
GPT 在所有微調實驗中學習速率均為 5e-5;BERT 選擇特定於任務的在驗證集中表現最好的微調學習率。
為了分清楚這些差異的帶來的影響,我們在 5.1 節中的進行每一種差異的消融實驗表明,大多數的實驗效果的改善實際上來自新的預訓練任務(遮蔽語言模型和下一句預測任務)。
圖 3:我們具體於特定任務的模型是透過給 BERT 加一個額外的輸出層構成,所以僅需要從頭學習最小數量的引數。其中(a)和(b)是序列級任務,(c)和(d)是標記級任務。圖中 EE表示嵌入的輸入,TiTi 表示第 ii 個標記的背景關係表示,[CLS] 是分類輸出的特殊符號,[SEP] 是分離非連續標記(分離兩個句子)序列的特殊符號。
4. 實驗
在這一節,我們將展示 BERT 在 11 項自然語言處理任務中的微調結果。
4.1 GLUE 資料集
通用語言理解評價 (GLUE General Language Understanding Evaluation) 基準(Wang et al.(2018))是對多種自然語言理解任務的集合。大多數 GLUE 資料集已經存在多年,但 GLUE 的用途是(1)以分離的訓練集、驗證集和測試集的標準形式釋出這些資料集;並且(2)建立一個評估伺服器來緩解評估不一致和過度擬合測試集的問題。GLUE 不釋出測試集的標簽,使用者必須將他們的預測上傳到 GLUE 伺服器進行評估,並對提交的數量進行限制。
GLUE 基準包括以下資料集,其描述最初在 Wang et al.(2018)中總結:
MNLI 多型別的自然語言推理(Multi-Genre Natural Language Inference)是一項大規模的、眾包的蘊含分類任務(Williams et al., 2018)。給定一對句子,目的是預測第二個句子相對於第一個句子是暗含的、矛盾的還是中立的關係。
QQP Quora問題對(Quora Question Pairs)是一個二元分類任務,目的是確定兩個問題在Quora上問的語意是否相等 (Chen et al., 2018)。
QNLI 問題自然語言推理(Question Natural Language Inference)是斯坦福問題回答資料集(Rajpurkar et al., 2016)已經轉換為二進位制分類任務的一個版本 Wang et al.(2018)。正類的例子是(問題,句子)對,句子中包含正確的答案,和負類的例子是來自同一段的(問題,句子)對,句子中不包含正確的答案。
SST-2 斯坦福情感語意樹(Stanford Sentiment Treebank)資料集是一個二元單句分類任務,資料由電影評論中提取的句子組成,並對由人工對這些句子進行標註(Socher et al., 2013)。
CoLA 語言可接受性單句二元分類任務語料庫(Corpus of Linguistic Acceptability),它的目的是預測一個英陳述句子在語言學上是否 “可接受”(Warstadt et al., 2018)。
STS-B 文字語意相似度基準(Semantic Textual Similarity Bench-mark )是從新聞標題中和其它來源裡提取的句子對的集合(Cer et al., 2017)。他們用從 1 到 5 的分數標註,表示這兩個句子在語意上是多麼相似。
MRPC 微軟研究釋義語料庫(Microsoft Research Paraphrase Corpus)從線上新聞中自動提取的句子對組成,並用人工註解來說明這兩個句子在語意上是否相等(Dolan and Brockett, 2005.)。
RTE 識別文字蘊含(Recognizing Textual Entailment)是一個與 MNLI 相似的二元蘊含任務,只是 RTE 的訓練資料更少 Bentivogli et al., 2009。
WNLI 威諾格拉德自然語言推理(Winograd NLI)是一個來自(Levesque et al., 2011) )的小型自然語言推理資料集。GLUE網頁提示到這個資料集的構造存在問題,每一個被提交給 GLUE 的經過訓練的系統在預測多數類時都低於 65.1 這個基線準確度。因此,出於對 OpenAI GPT 的公平考慮,我們排除了這一資料集。對於我們的 GLUE 提交,我們總是預測多數類。
4.1.1 GLUE 結果
為了在 GLUE 上微調模型,我們按照本文第 3 節中描述的那樣表示輸入的句子或者句子對,並且使用最後一層的隱藏向量 C∈RHC∈RH 中的第一個輸入標記([CLS])作為句子總的表示。如圖3 (a)和(b)所示。在微調期間唯一引入的新的引數是一個分類層引數矩陣 W∈RK×HW∈RK×H,其中 KK 是要分類的數量。我們用 CC 和 WW 計算一個標準的分類損失,換句話說是 log(softmax(CWT))log(softmax(CWT))。
我們在 GLUE 所有的任務中使用 32 的批次大小和 3 個週期。對於每個任務我們使用 5e−5,4e−5,3e−5,2e−55e−5,4e−5,3e−5,2e−5 的學習率來微調,然後在驗證集中選擇表現最好的學習率。此外,對於 BERTLARGEBERTLARGE 我們發現它有時在小資料集上微調時不穩定(換句話說是,有時執行時會使結果更差),因此,我們進行了幾次隨機重啟,並選擇了在驗證集上表現最好的模型。對於隨機重啟,我們使用相同的預訓練檢查點,但執行不同的資料打亂和分類器層初始化來微調模型。我們註意到,GLUE 釋出的資料集不包括測試的標簽,所以我們分別將 BERTBASEBERTBASE 和 BERTLARGEBERTLARGE向 GLUE 評估伺服器提交結果。
結果如表 1 所示。在所有的任務上,BERTBASEBERTBASE 和 BERTLARGEBERTLARGE 都比現有的系統更加出色 ,與先進水平相比,分別取得 4.4% 及 6.7% 的平均改善。請註意,除了 BERTBASEBERTBASE 含有註意力遮蔽(attention masking),BERTBASEBERTBASE 和 OpenAI GPT 的模型結構方面幾乎是相同的。對於最大和最廣泛使用的 GLUE 任務 MNLI,BERT 比當前最優模型獲得了 4.7% 的絕對提升。在 GLUE 官方的排行榜上, BERTLARGEBERTLARGE 獲得了 80.4 的分數,與原榜首的 OpenAI GPT 相比截止本文寫作時只獲得了 72.8 分。
有趣的是, BERTLARGEBERTLARGE 在所有任務中都顯著優於 BERTBASEBERTBASE,即使是在那些只有很少訓練資料的任務上。BERT 模型大小的影響在本文 5.2 節有更深入的探討。
表 1:GLUE 測試結果,由 GLUE 評估伺服器評分。每個任務下麵的數字表示訓練示例的數量。“Average”列與官方 GLUE 評分略有不同,因為我們排除了有問題的 WNLI 資料集。OpenAI GPT = (L=12, H=768, A=12); BERTBASE = (L=12, H=768, A=12); BERTLARGE = (L=24, H=1024, A=16)。BERT 和 OpenAI GPT 都是單模型,單任務。所有結果可以從 https://gluebenchmark.com/leaderboard 和 https://blog.openai.com/language-unsupervised/ 獲得。
4.2 SQuAD v1.1
斯坦福問答資料集(SQuAD Standford Question Answering Dataset)是一個由 100k 個眾包的問題/答案對組成的集合(Rajpurkar et al., 2016)。給出一個問題和一段來自維基百科包含這個問題答案的段落,我們的任務是預測這段答案文字的區間。例如:
輸入問題:
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 crystals within a cloud. …
輸出答案
within a cloud
這種區間預測任務與 GLUE 的序列分類任務有很大的區別,但是我們能夠讓 BERT 以一種直接的方式在 SQuAD 上執行。就像在 GLUE 中,我們將輸入問題和段落表示為一個單一打包序列(packed sequence),其中問題使用 A 嵌入,段落使用 B 嵌入。在微調模型期間唯一需要學習的新引數是區間開始向量 S∈RHS∈RH 和區間結束向量 E∈RHE∈RH。讓 BERT 模型最後一層的隱藏向量的第 ithith 輸入標記被表示為 Ti∈RHTi∈RH。如圖 3(c)視覺化的表示。然後,計算單詞 ii 作為答案區間開始的機率,它是 TiTi 和 SS 之間的點積並除以該段落所有單詞的結果之後再 softmax:
同樣的式子用來計算單詞作為答案區間的結束的機率,並採用得分最高的區間作為預測結果。訓練標的是正確的開始和結束位置的對數可能性。
我們使用 5e−55e−5 的學習率,32 的批次大小訓練模型 3 個週期。在模型推斷期間,因為結束位置與開始位置沒有條件關係,我們增加了結束位置必須在開始位置之後的條件,但沒有使用其他啟髮式。為了方便評估,把序列化後的標記區間對齊回原始未序列化的輸入。
結果如表 2 中描述那樣。SQuAD 使用一個高度嚴格的測試過程,其中提交者必須手動聯絡小組組織人員,然後在一個隱藏的測試集上執行他們的系統,所以我們只提交了最好的模型來測試。表中顯示的結果是我們提交給小組的第一個也是唯一一個測試。我們註意到上面的結果在小組排行榜上沒有最新的公共模型描述,並被允許在訓練他們的模型時使用任何的公共資料。因此,我們在提交的模型中使用非常有限的資料增強,透過在 SQuAD 和 TriviaQA(Joshi et al., 2017) 聯合訓練。
我們表現最好的模型在整合模型排名中上比排名第一模型高出 1.5 個 F1 值,在一個單模型排行榜中比排名第一的模型高出 1.7(譯者註:原文是 1.3) 個 F1 值。實際上,我們的單模型 BERT 就比最優的整合模型表現更優。即使只在 SQuAD 資料集上(不用 TriviaQA 資料集)我們只損失 0.1-0.4 個 F1 值,而且我們的模型輸出結果仍然比現有模型的表現好很多。
表 2:SQuAD 結果。Ensemble BERT 是使用不同的預訓練模型檢查點和微調種子的 7x 模型。
4.3 命名物體識別
為了評估標記任務的效能,我們在 CoNLL 2003 命名物體識別資料集(NER Named Entity Recognition)上微調 BERT 模型。該資料集由 200k 個訓練單片語成,這些訓練詞被標註為人員、組織、地點、雜項或其他(無命名物體)。
為了微調,我們將最後一層每個單詞的隱藏表示 Ti∈RHTi∈RH 送入一個在 NER 標簽集合的分類層。每個單詞的分類不以周圍預測為條件(換句話說,沒有自回歸和沒有 CRF)。為了與詞塊(WordPiece)序列化相適應,我們把 CoNLI-序列化的(CoNLL-tokenized)的輸入詞輸入我們的 WordPiece 序列化器,然後使用這些隱藏狀態相對應的第一個塊而不用預測標記為 X的塊。例如:
由於單詞塊序列化邊界是輸入中已知的一部分,因此對訓練和測試都要這樣做。
結果如表 3 所示。BERTLARGEBERTLARGE 優於現存的最優模型,使用多工學習的交叉視野訓練 (Clark et al., 2018),CoNLL-2003 命名物體識別測試集上高 0.2 F1 值。
表 3:CoNLL-2003 命名物體識別。模型超引數使用驗證集進行選擇,報告的驗證集和測試分數使用這些超引數進行隨機五次以上的實驗然後取實驗的平均結果。
4.4 SWAG
Adversarial Generations(SWAG)資料集由 113k 個句子對組合而成,用於評估基於常識的推理 (Zellers et al., 2018)。
給出一個來自影片字幕資料集的句子,任務是在四個選項中選擇最合理的延續。例如:
為 SWAG 資料集調整 BERT 模型的方式與為 GLUE 資料集調整的方式相似。對於每個例子,我們構造四個輸入序列,每一個都連線給定的句子(句子A)和一個可能的延續(句子B)。唯一的特定於任務的引數是我們引入向量 V∈RHV∈RH,然後它點乘最後層的句子總表示 Ci∈RHCi∈RH 為每一個選擇 ii產生一個分數。機率分佈為 softmax 這四個選擇:
Pi=eV⋅Ci∑4jeS⋅CjPi=eV⋅Ci∑j4eS⋅Cj
我們使用 2e−52e−5 的學習率,16 的批次大小訓練模型 3 個週期。結果如表 4 所示。BERTLARGEBERTLARGE優於作者的 ESIM+ELMo 的基線標準模型的 27.1% 。
表 4:SWAG 驗證集和測試集準確率。測試結果由 SWAG 作者對隱藏的標簽進行評分。人類的表現是用 100 個樣本來衡量的,正如 SWAG 論文中描述的那樣。
5 消融研究(Ablation Studies)
雖然我們已經證明瞭非常強有力的實證結果,但到目前為止提出的結果並沒有提現出 BERT 框架的每個部分具體的貢獻。在本節中,我們對 BERT 的許多方面進行了消融實驗,以便更好地理解每個部分的相對重要性。
5.1 預訓練任務的影響
我們的核心觀點之一是,與之前的工作相比,BERT 的深層雙向性(透過遮蔽語言模型預訓練)是最重要的改進。為了證明這一觀點,我們評估了兩個新模型,它們使用與 BERTBASEBERTBASE 完全相同的預訓練資料、微調方案和 Transformer 超引數:
1. No NSP:模型使用“遮蔽語言模型”(MLM)但是沒有“預測下一句任務”(NSP)。
2. LTR & No NSP:模型使用一個從左到右(LTR)的語言模型,而不是遮蔽語言模型。在這種情況下,我們預測每個輸入詞,不應用任何遮蔽。在微調中也應用了僅限左的約束,因為我們發現使用僅限左的背景關係進行預訓練和使用雙向背景關係進行微調總是比較糟糕。此外,該模型未經預測下一句任務的預訓練。這與OpenAI GPT有直接的可比性,但是使用更大的訓練資料集、輸入表示和微調方案。
結果如表 5 所示。我們首先分析了 NSP 任務所帶來的影響。我們可以看到去除 NSP 對 QNLI、MNLI 和 SQuAD 的表現造成了顯著的傷害。這些結果表明,我們的預訓練方法對於獲得先前提出的強有力的實證結果是至關重要的。
接著我們透過對比 “No NSP” 與 “LTR & No NSP” 來評估訓練雙向表示的影響。LTR 模型在所有任務上的表現都比 MLM 模型差,在 MRPC 和 SQuAD 上的下降特別大。對於SQuAD來說,很明顯 LTR 模型在區間和標記預測方面表現很差,因為標記級別的隱藏狀態沒有右側背景關係。因為 MRPC 不清楚效能差是由於小的資料大小還是任務的性質,但是我們發現這種效能差是在一個完全超引數掃描和許多次隨機重啟之間保持一致的。
為了增強 LTR 系統,我們嘗試在其上新增一個隨機初始化的 BiLSTM 來進行微調。這確實大大提高了 SQuAD 的成績,但是結果仍然比預訓練的雙向模型表現差得多。它還會損害所有四個 GLUE 任務的效能。
我們註意到,也可以培訓單獨的 LTR 和 RTL 模型,並將每個標記表示為兩個模型表示的連線,就像 ELMo 所做的那樣。但是:(a)這是單個雙向模型引數的兩倍大小;(b)這對於像 QA 這樣的任務來說是不直觀的,因為 RTL 模型無法以問題為條件確定答案;(c)這比深層雙向模型的功能要弱得多,因為深層雙向模型可以選擇使用左背景關係或右背景關係。
表 5:在預訓練任務中使用 BERTBASEBERTBASE 模型進行消融實驗。“No NSP”表示不進行下一句預測任務來訓練模型。“LTR & No NSP”表示就像 OpenAI GPT 一樣,使用從左到右的語言模型不進行下一句預測任務來訓練模型。“+ BiLSTM”表示在“LTR & No NSP”模型微調時新增一個隨機初始化的 BiLSTM 層。
5.2 模型大小的影響
在本節中,我們將探討模型大小對微調任務準確度的影響。我們用不同的層數、隱藏單位和註意力頭個數訓練了許多 BERT 模型,同時使用了與前面描述的相同的超引數和訓練過程。
選定 GLUE 任務的結果如表 6 所示。在這個表中,我們報告了 5 次在驗證集上的微調的隨機重啟的平均模型準確度。我們可以看到,更大的模型在所選 4 個資料集上都帶來了明顯的準確率上升,甚至對於只有 3600 個訓練資料的 MRPC 來說也是如此,並且與預訓練任務有很大的不同。也許令人驚訝的是,相對於現有文獻,我們能夠在現有的模型基礎上實現如此顯著的改進。例如,Vaswani et al.(2017) 研究的最大 Transformer 為(L=6, H=1024, A=16),編碼器引數為 100M,我們所知的文獻中的最大 Transformer 為(L=64, H=512, A=2),引數為235M(Al-Rfou et al., 2018)。相比之下,BERTBASEBERTBASE 含有 110M 引數而 BERTLARGEBERTLARGE 含有 340M 引數。
多年來人們都知道,增加模型的大小將持續提升在大型任務(如機器轉換和語言建模)上的的表現,表 6 所示的由留存訓練資料(held-out traing data)計算的語言模型的困惑度(perplexity)。然而,我們相信,這是第一次證明,如果模型得到了足夠的預訓練,那麼將模型擴充套件到極端的規模也可以在非常小的任務中帶來巨大的改進。
表 6:調整 BERT 的模型大小。#L = 層數;#H = 隱藏維度大小;#A = 註意力頭的個數。“LM (ppl)”表示遮蔽語言模型在預留訓練資料上的困惑度。
5.3 訓練步數的影響
圖 4 顯示了經過 K 步預訓練模型的檢查點再模型微調之後在 MNLI 驗證集上的準確率。這讓我們能夠回答下列問題:
1. 問:BERT真的需要這麼多的預訓練 (128,000 words/batch * 1,000,000 steps) 來實現高的微調精度嗎?
答:是的,BERTBASEBERTBASE 在 MNLI 上進行 1M 步預訓練時的準確率比 500k 步提高了近 1.0%。
2. 問:遮蔽語言模型的預訓練是否比 LTR 模型預訓練訓收斂得慢,因為每批只預測 15% 的單詞,而不是每個單詞?
答:遮蔽語言模型的收斂速度確實比 LTR 模型稍慢。然而,在絕對準確性方面,遮蔽語言模型幾乎在訓練一開始就超越 LTR 模型。
圖 4:調整模型的訓練步數。圖中展示了已經預訓練了 k 步後的模型引數在 MNLI 資料集上的再經過微調後的準確率。x 軸的值就是 k。
5.4 使用 BERT 基於特徵的方法
到目前為止,所有的 BERT 結果都使用了微調方法,將一個簡單的分類層新增到預訓練的模型中,併在一個下行任務中對所有引數進行聯合微調。然而,基於特徵的方法,即從預訓練模型中提取固定的特徵,具有一定的優勢。首先,並不是所有 NLP 任務都可以透過 Transformer 編碼器體系結構輕鬆地表示,因此需要新增特定於任務的模型體系結構。其次,能夠一次性耗費大量計算預先計算訓練資料的表示,然後在這種表示的基礎上使用更節省計算的模型進行許多實驗,這有很大的計算優勢。
在本節中,我們透過在 CoNLL-2003 命名物體識別任務上生成類似於 elmo 的預訓練的背景關係表示來評估基於特徵的方法中的 BERT 表現有多好。為此,我們使用與第 4.3 節相同的輸入表示,但是使用來自一個或多個層的啟用輸出,而不需要對BERT的任何引數進行微調。在分類層之前,這些背景關係嵌入被用作對一個初始化的兩層 768 維 Bi-LSTM 的輸入。
結果如表 7 所示。最佳的執行方法是從預訓練的轉換器的前 4 個隱藏層串聯符號表示,這隻比整個模型的微調落後 0.3 F1 值。這說明 BERT 對於微調和基於特徵的方法都是有效的。
表 7:在 CoNLL-2003 命名物體識別上使用基於特徵的方法,並調整 BERT 層數。來自指定層的啟用輸出被組合起來,並被送到一個兩層的 BiLSTM 中,而不需要反向傳播到 BERT。
6 結論
最近,由於使用語言模型進行遷移學習而取得的實驗提升表明,豐富的、無監督的預訓練是許多語言理解系統不可或缺的組成部分。特別是,這些結果使得即使是低資源(少量標簽的資料集)的任務也能從非常深的單向結構模型中受益。我們的主要貢獻是將這些發現進一步推廣到深層的雙向結構,使同樣的預訓練模型能夠成功地廣泛地處理 NLP 任務。
雖然這些實證結果很有說服力,在某些情況下甚至超過了人類的表現,但未來重要的工作是研究 BERT 可能捕捉到的或不捕捉到的語言現象。