您當前的位置:首頁 > 書法

論文精讀:BERT

作者:由 不破勝光 發表于 書法時間:2021-02-05

先給大家拜個小年啦,BERT和Transformer採用了幾乎完全一樣的架構,不瞭解Transformer的同志可以參考筆者的另一篇介紹:Transformer。

首先一如既往地是我們的約定環節:

NLP:Natural Language Processing,自然語言處理;

GPT:Generative Pre-trained Transformer,OpenAI GPT;

LM:Language model,語言模型;

MLM:Masked language model,遮蓋 語言模型;

NSP:Next sentence prediction,下句預測任務,為了不在中文裡引起歧義,所以NSP和上文的MLM均不做翻譯;

GLUE:General Language Understanding Evaluation,通用語言理解評估(任務);

Fine-tuning:Fine-tuning都不知道可就拉倒往下看了;

Embedding/encoder/decoder/token:業界尚未有統一的標準翻譯,所以也不單獨翻譯,這些詞都還需要翻譯的話可也就拉倒往下看了;

TF:Tensorflow;

T2T:Tensor 2Tensor工程,由Transformer提出者基於TF封裝的一個上層工程;

CE:Cross Entrophy,交叉熵;

QA:Question Answering,問答;

NLI:Natural Language Inference,自然語言推斷;

由於這篇文章用了一種陰間的參考文獻超連結方式,所以引用文獻統一用

[-]

來表示,對於引用文獻有需有的童鞋原文有請。

Abstract

我們提出了一種新的語言表徵模型:BERT,e。g。 Bidirectional Encoder Representations from Transformers。和最新提出來的語言模型不同,BERT的設計初衷是從沒有標籤的文字中,根據所有層左右的上下文同時獲得預訓練的深度雙向表徵。這樣,預訓練的BERT模型可以透過僅僅一個額外的輸出層,就可以在現在一大批任務上建立SOTA模型,比如問題回答和語言推斷,而且不需要針對特定任務進行架構的修改。

BERT的概念非常直觀而且經驗顯示了其強大的效能。它在11個自然語言處理任務上,取得了新的SOTA結果,包括將GLUE分數提高到了80。5%(7。7%的絕對提高),MultiNLI精度提高到86。7%(4。6%絕對提高),SQuAD v1。1問題回答測試F1提高到了93。2(1。5的絕對提高),SQuAD v2。0測試F1提高到了83。1(5。1的絕對提高)。

1 Introduction

語言模型預訓練在改進許多NLP任務上都被證明很有效[-],這裡麵包括了句子層面的任務,比如自然語言推斷和分段[-],目標都是透過分析它們的整體資訊之間的來預測句子之間的關係,也包括了token層面的任務,比如命名例項識別和問題回答[-],這些任務要求在token層面輸出細顆粒度的結果。

目前有兩種已知的服務於下游任務的預訓練語言表徵:feature-based和fine-tuning。Feature-based方法,比如ELMo[-],採用了基於任務設計的架構,包含了預訓練的表徵作為額外的特徵。而fine-tuning方法,比如Generative Pre-trained Transformer (OpenAI GPT[-]),採用了最小化任務特定引數,在下游任務上僅需要簡單fine-tuning所有預訓練引數。這兩種方法在預訓練過程中,採用了相同的目標函式,它們使用了單項語言模型來學習通用語言表徵。

我們認為現有技術限制了預訓練表徵模型的能力,尤其是fine-tuning方法(

這是在diss OpenAI嗎

)。最主要的限制在於標準的語言模型是單向的,這限制了在預訓練過程中可以採用的架構的型別。比如在OpenAI GPT中,作者採用了自左向右的架構,這樣在Transformer的self-attention層中,每個token只能注意到之前的tokens。這樣的限制在句子級別的任務中只是區域性最優的,可能在基於fine-tuning的方法在token-level的任務上是有害的,比如回答問題任務,在這些任務中同時考慮兩個方向上的內容則非常重要。

在這篇文章中,我們提出的BERT改進了基於fine-tuning的方法。BERT能夠減少之前提到的單向方法的約束,受到Cloze任務[-]啟發,BERT採用了一種包含“masked language model”(MLM)的預訓練目標。這種MLM隨機遮蓋掉輸入的部分tokens,目標則是根據它的上下文,預測被遮蓋掉的原始詞彙id。和自左向右的模型不同,MLM目標能讓表徵融合左右上線問的內容,這樣可以讓我們預訓練一個深度雙向Transformer。除了MLM,我們還是用了一種“next sentence prediction”(

下一句預測

)任務來進行聯合預訓練文字對錶徵。我們的工作的主要工作如下:

我們證明了雙向預訓練語言表徵的重要性。和Radford [-]採用單向語言模型進行預訓練,BERT採用了MLM來獲得深度雙向表徵的能力。這也和Peters [-]採用的方法不一樣,他們採用了一個淺層聚合自左向右和自右向左的LMs;

我們證明了採用這種預訓練表徵,可以極大的針對任務設計架構的工作。BERT是第一個基於fine-tuning的表徵模型,並且在一大套句子級別和token級別的任務上都達到了SOTA的效能,超過了許多基於任務設計的架構;

BERT在11個NLP任務上達到了SOTA,程式碼和預訓練模型可以在這裡找到。

2 Related Work

預訓練的通用語言表徵有很長的歷史,在本章節我們只簡單的回顧一下最為廣泛使用的方法。

思考:為什麼預訓練的通用語言表徵模型如此重要?

2。1 Unsupervised Feature-based Approaches

學習廣泛可用的表徵已經作為NLP研究中的重要領域,包括非神經網路方法[-],已經活躍了數十年。預訓練詞embedding是現代NLP系統重要的一部分,能夠相比較於從頭訓練得到的embedding[]顯著地提升效能。為了預訓練詞embedding向量,Mnih和Hinton[-]採用了自左向右的LM目標,同樣Mikolov[-]使用了自左向右判別詞正確與否的目標。

這些方法都被泛化為更粗糙的粒度,比如句子embedding[-]或者段落[-]embedding。為了訓練句子表徵,之前的工作採用對下一個句子的候選目標進行排序[-],自左向右在給定之前句子的表徵條件下生成下一個句子的詞彙[-],或者以去噪auto-encoder來作為目標[-]。

思考:上面這一段講了個啥?

ELMo和它的先行者們[-]在另一個研究反向上將傳統的詞embedding方法通用化。它們從一個自左向右和一個自右向左的模型中,提取了內容敏感的特徵。這種每個token的內容相關的表徵是自左向右和自右向左的拼接。在將這種內容相關的詞embedding和現有的任務特別設計的架構,ELMo在許多主要的NLP的benchmark上達到了SOTA[-],包括問答[-],情感分析[-],和命名實體識別[-]。Melamud[-]提出了透過採用LSTM從左邊和右邊的上下文來預測單個詞的任務,學習內容表徵的方法。和ELMo類似的,他們的模型也是基於feature,而且不是深度雙向(deeply bidirectional)。Fedus[-]顯示完形填空(cloze)任務可以用於提升文字生成任務模型的魯棒性。

2。2 Unsupervised Fine-tuning Approaches

和基於feature的方法一樣,這個方向上的第一份工作只從未標註的text[-]上預訓練了詞embedding。

更近一些的工作中,句子和文件encoders,它們可以產生語境下的token表徵,同樣是透過未標註的文字預訓練得出,然後在下游的supervised任務上fine-tune得出[-]。這些方法的好處是隻需要很少一部分引數需要從頭訓練。至少部分得益於這一優勢,OpenAI GPT[-]在許多GLUE的benchmark[-]上許多句子級別的任務上,達到了之前SOTA的結果。從左至右的LM和auto-encoder目標都被用於訓練這樣的模型[-]。

2。3 Transfer Learning from Supervised Data

有些研究工作表明,針對大資料集上的監督學習任務有效的遷移學習,比如自然語言推斷(natural language inference)[-]和機器翻譯[-]。機器視覺研究已經被證明從大型預訓練模型上進行遷移學習的重要性,比如從一個ImageNet[-]上訓練好的模型上進行fine-tune。

3 BERT

在這以章中我們詳細地介紹BERT和它的實現。在我們的框架中分為兩部分:預訓練和fine-tuning。在預訓練過程中,模型在不同預訓練任務的未標註資料上進行訓練。在fine-tuning階段,BERT模型首先採用預訓練引數初始化,然後所有的引數都透過下游監督學習的標註資料進行fine-tune。每一個下游任務都分別有對應的fine-tuned模型,儘管它們都採用相同的預訓練引數進行初始化。圖1中的問答例子將在這一章裡作為舉例。

論文精讀:BERT

BERT一向非常特別的特點是它在不同任務上完全相同的架構,在預訓練框架和最終的下游架構中差異很小。

Model Architecture:

BERT的模型架構是一個基於最初的Transformer的實現的多層雙向Transformer encoder,並且包含在T2T庫中。由於Transformer的使用已經非常普遍,而且我們的實現和原作者的幾乎完全一樣,我們會省略對與Transformer詳盡的介紹,讀者可以閱讀原文或者參考Harvard對於“The Annotated Transformer”的介紹(

或者參考筆者的Transformer的介紹

)。

在我們的工作中,我們將層數(也就是Transformer blocks[

思考:Transformer裡的blocks數是多少?

])為

L

,隱藏層數為

H

,self-attention heads的數目是

A

[在所有的情況下,前饋/濾波器數目都是

4H

,也就是

H=768

時3072,

H=1024

時4096]。我們主要在兩種模型尺寸上測試我們的結果:

\mathrm{BERT}_{\mathrm{BASE}}(L=12, H=768,A=12)

,引數總量110M和

\mathrm{BERT}_{\mathrm{LARGE}}(L=24, H=1024, A=16)

,引數總量340M。

出於比較的目的,

\text{BERT}_{\text{BASE}}

和OpenAI GPT選擇了相同的模型尺寸。但是非常重要的一點在於,BERT Transformer採用了雙向self-attention,而GPT Transformer只使用了受約束的self-attention,每個token只能注意到它左邊的語境。*

這裡在文獻中雙向Transformer通常指的是“Transformer encoder”,而只能注意到左邊語境的版本通常指的是“Transformer decoder”,它可以用於文字生成。

Input/Output Representations:

為了讓BERT能夠處理一系列下游任務,我們的輸入表徵能夠在一個token序列中,明確地處理單句和句子對(也就是<問題,回答>對)。在我們所有的工作中,“句子”(sentence)可以表示為一段連續的文字範圍,而不僅僅是一個實際的語言學上的句子。一個“序列”(sequence)可以表示為BERT的一個輸入序列,既可以是一個句子也可以是兩個打包的句子。

我們採用WordPiece embedding[-],包含了30,000個token詞彙表。每個序列的第一個token一定是一個特殊分類token([CLS])。最後隱藏狀態對應到這個token用於聚合序列表徵,來進行分類任務。句子對被打包在一起組成單個序列。我們將句子分類兩種型別。首先我們增加了一個特殊的token([token])來將它們分開。然後我們增加了一個習得的embedding來標示它屬於句子A或者句子B。如圖1所示,我們將輸入embedding表示為

E

,最終特殊[CLS] token的隱藏向量表示為

C\in \mathbb{R}^H

,第

i^{th}

個輸入token的最終隱藏層可以表示為

T_i \in \mathbb{R}^H

對於給定token,它的輸入表徵透過將對應的token、segment和位置embedding相加得到。這種結構的視覺化結果如圖2所示。

論文精讀:BERT

3。1 Pre-training BERT

和Peters [-]還有Radford [-]不同,我們沒有使用傳統的自左向右和自右向左LM來預訓練BERT。相反我們在兩個無監督任務上預訓練BERT,我們在這一章將介紹這種方法,對應圖1的左半部分。

Task #1: Masked LM:

直觀上,很自然地認為深度雙向模型一定比自左向右模型或者雙向模型的淺層拼接效果要好。不幸的是,標準條件LM只能透過自左向右

或者

自右向左進行訓練。既然雙向條件性(bidirectional conditioning)可以讓每個詞間接的“注意到它自己”,模型可以細緻的從一個多層語境中預測目標詞。

為了訓練一個深度雙向表徵,我們簡單的隨機mask掉部分輸入的tokens,然後來預測這些被mask掉的tokens。我們將這一步驟稱為MLM,儘管它通常被稱為文獻中的完形填空任務[-]。在這種情況下,這些被mask掉的tokens對應的最終隱藏層向量,和標準的LM模型一樣,送入一個詞彙表的softmax輸出。在我們所有的實驗中,我們對每一個序列中所有的WordPiece embedding 隨機mask掉15%。和去噪的auto-encoders[-]相反,我們只預測被mask掉的詞而不是重構整個輸入。

儘管這讓我們可以獲得一個雙向的預訓練模型,一個副作用是我們產生了預訓練和fine tuning之間的不匹配,[MASK] token在fine-tuning中並沒有出現。為了消除這一點,我們並不總是將被mask掉的詞替換為實際的[MASK] token。訓練資料生成器選擇所有token 位置上的15%來進行預測,如果選擇了第

i^{th}

個token,我們把它按照(1)80%的機率替換為[MASK] token,(2)10%的機率隨機token,(3)10%的機率沒有發生變化的token。然後

T_i

將會用CE loss來預測最初的token。我們將在附錄C。2比較這種方法的變種。

Task #2: Next Sentence Prediction (NSP):

許多重要的下游任務比如OA、NPI都是基於理解兩個句子之間的關係,這樣的關係無法直接被LM捕捉到。為了訓練一個模型能夠理解句子之間的關係,我們在一個二元next sentence prediction任務上預訓練模型,這一任務可以精確的從任何單語言語料庫中進行。特別的,對於每個預訓練的句子A和B,50%的機率是真實的A的下一句(標記為IsNext),50%的機率是語料庫中的隨機句子(標記為NotNext)。和我們在圖1中看到的,

C

用於下一個句子的預測(NSP)。儘管它看上去很直觀,但是我們在第5。1節證明了這一個任務上的預訓練可以極大地促進QA和NLI。

1。 模型最終在NSP任務上達到了97%~98%的精度(

二分類問題這個精度一般般吧

)。

2。 向量

C

在沒有fine-tuning的情況下,並非一個有意義的句子表徵。

NSP任務和Jernite [-]和Logeswaran、Lee [-]使用的表徵訓練目標聯絡非常緊密。但是在之前的工作中,只有句子embedding被遷移到下游任務,而BERT將所有引數都遷移用於初始化end-task模型引數。

Pre-training data:

預訓練步驟極大地遵循了現有的LM預訓練方法。對於預訓練語料庫,我們採用了BooksCorpus(800M詞)[-]和英文Wikipedia(2,500 M詞)。對於Wikipedia我們為了提取長的連續的句子,使用一個檔案級別的語料庫而不是隨機的句子級別的語料庫,比如Billion Word Benchmark [-]非常重要。

3。2 Fine-tuning BERT

Fine-tuning則非常直接了當,Transformer中的self-attention機制讓BERT可以方便的對許多下游任務建模——不管它們使用單個文字或文字對——透過選用合適的輸入和輸出。對於採用文字對的應用,一種常見的模式是在採用雙向交叉注意力機制前,獨立地對文字對進行encode,如Parikh [-]和Seo [-]所採用的。BERT則採用了self-attention來統一這兩層,對一對拼接的文字對進行encoding可以有效地包含兩個句子之間的雙向attention。

對於任意一個task,我們只需簡單地將任務相關的輸入輸出接入到BERT,然後E2E的對所有引數進行fine-tune。在輸入端,pre-training中獲得的句子A和句子B類似於(1)釋義中的句子對,(2)文字蘊含中的假設-前提對,(3)QA中的問題-段落對,(4)文字分類或者序列標記中的一種退化的文字-

\varnothing

對。在輸出端,token標示被送入輸出層,進行token級別的任務,比如序列標記或者QA,[CLS]標示則被送入輸出層進行分類,比如文字蘊含推斷。

和預訓練相比,fine-tunig需要的資源並不那麼多。本文中所有的結果,使用完全相同的模型,都可以在一張雲端TPU上最多1個小時訓練完成,或者GPU上訓練數個小時完成。我們將在第4章中對應的章節描述任務相關的細節。更多的細節可以在附錄A。5中找到。

BERT SQuAD模型可以在一張雲TPU上訓練30min,就能達到DevF1 91。0%的成績。

4 Experiments

在本章中,我們展現BERT在11個NLP任務上fine-tuning的結果。

4。1 GLUE

General Language Understanding Evaluation (GLUE)benchmark [-]是一系列廣泛的NL理解任務的集合。GLUE資料集詳細的描述可以在附錄B。1中找到。

為了在GLUE上fine-tune,我們按照第3章中的方法,復現了輸入序列(單個句子或者句子對),然後使用了最終隱藏向量

C \in \mathbb{R}^H

,對應第一個輸入token([CLS])作為聚合表徵。在fine-tuning中引入的分類層權重

W\in \mathbb{R}^{K\times H}

是唯一新增的引數,這裡

K

是標籤數目。我們採用標準的

\log(\text{softmax}(CW^T))

來計算分類損失。

論文精讀:BERT

我們使用了batch size 32,在所有的GLUE任務上fine tune了3個epoch。對於每個任務,我們選擇了最好的的fine-tuning學習率(5e-5,4e-5,3e-5和2e-5)在Dev資料集上。此外,對於

\text{BERT}_{\text{LARGE}}

,我們發現fine tuning在某些小資料集上不夠穩定,所以我們在Dev集上採用了隨機初始化,並選擇了最好的結果。透過隨機restart,我們使用了相同的預訓練checkpoint但是進行了不同的fine-tuning資料shuffling和分類層初始化。

GLUE資料集並不包含測試label,所以我們只針對

\text{BERT}_{\text{BASE}}

\text{BERT}_{\text{LARGE}}

進行了一次提交成績。

結果如表1所示,

\text{BERT}_{\text{BASE}}

\text{BERT}_{\text{LARGE}}

,在所有系統和所有任務上都極大地超過了現在的結果,對之前的SOTA方法分別取得了4。5%和7。0%的提升。需要注意的是

\text{BERT}_{\text{BASE}}

和OpenAI GPT有著幾乎完全相同的模型結構,除了attention masking。對於最大也是最為廣泛使用的GLUE任務,MNLI上BERT取得了4。6%的絕對精度提升。在官方的GLUE榜單上,

\text{BERT}_{\text{LARGE}}

獲得了80。5,而OpenAI GPT在本文寫作時72。5。

我們發現了

\text{BERT}_{\text{LARGE}}

在所有任務上顯著地超越了

\text{BERT}_{\text{LARGE}}

,特別是在那些訓練資料很少的任務上。在5。2節中我們將更詳細的評估模型尺寸的效果。

4。2 SQuAD v1。1

Stanford Question Answering Dataset是一個包含了100k廣泛收集的QA對[-]。給定問題和一段包含了回答的Wikipedia,任務是預測內容中答案的文字範圍。

如圖1所示,在QA任務中,我們將輸入問題和片段組成一個序列,問題採用A embedding,片段採用B embedding。在fine-tuning階段,我們只引入了一個初始向量

S \in \mathbb{R}^H

和一個終止向量

E \in \mathbb{R}^H

。詞

i

是回答範圍的開始的機率,透過

Ti

S

的點乘再加對段落中所有詞的softmax獲得:

P_i = \frac{e^{S\cdot T_i}}{\sum_j e^{S\cdot T_j}}

來實現。類似的公式同樣用於回答範圍的結尾。位置

i

到位置

j

的候選範圍的分數則透過

S \cdot T_i + E \cdot T_j

來計算,在

j \geq i

時最大的分數範圍用於預測。訓練目標是正確的開始和結束的對數似然之和。我們採用了32的batch size和5e-5的學習率fine-tune了3個epochs。

表2顯示了排行榜上前幾名的結果以及頂級公開的結果[-]。SQuAD榜上最好的結果並沒有最新的公開機構的描述,並且在訓練他們的系統時可以採用任何公開的資料集。因此我們在TriviaQA[-]上首次fine-tuning使用了適當的資料增強,在SQuAD上fine-tuning之前。

論文精讀:BERT

我們最好的表現的系統超過了榜上最好成績,在整合系統上達到了+1。5 F1,單個系統達到了1。3 F1。實際上,我們的單個BERT模型在F1分數上超過了最好的整合系統。不經過TriviaQA 上的fine-tuning,我們僅僅損失了0。1-0。4 F1,依舊大幅超過了所有的現有系統。

4。3 SQuAD v2。0

SQuAD 2。0任務在提供的段落上,允許非短回答的存在,從而擴充套件了SQuAD 1。1的問題定義,讓問題更具有現實意義。

我們採用了類似的方法來擴充套件了這個任務上的SQuAD v1。1 BERT模型。我們將沒有回答的問題處理為回答範圍在起始和終止都在[CLS] token上。可能的起始終止回答範圍從而擴充套件到包含[CLS] token的位置。對於預測而言,我們比較了沒有回答的範圍的分數:

s_{\text{null}} = S\cdot C + E \cdot C

和最好的非空(non-null)範圍

\hat{s_{i, j}} = \max_{j \geq i} S\cdot T_i + E\cdot T_j

。我們在

\hat{s_{i, j}} > s_{\text{null}} + \tau

時預測非空的結果,這裡閾值

\tau

透過在測試集上最大化F1來進行選擇。我們並沒有使用TriviaQA資料集來訓練這一模型。我們採用batch size 48和學習率5e-5 fine tune了2個epochs。

論文精讀:BERT

和之前榜上的結果和頂級公開的工作的比較如表3所示,排除了那些使用BERT作為它們系統一部分的結果。我們在之前最好的系統上平均可提高+5。1 F1。

4。4 SWAG

Situations With Adversarial Generations (SWAG)資料集包含了113k句子對完成樣本,來評估基於常識的推理能力[-]。給定一個句子,該項任務將在四個選項中選擇最為合適的下一句。

在SWAG資料集上fine-tuning時,我們構建了4個輸入序列,每個都包含了給定句子(句子A)和一個可能的下一句(句子B)的拼接。唯一引入的任務相關的引數是和[CLS] token點乘,再透過softmax層進行歸一化的向量。

論文精讀:BERT

我們採用batch size 16和學習率2e-5 fine tune了3個epoch。結果如表4所示。

\text{BERT}_{\text{LARGE}}

超過了作者的基線系統ESIM + ELMo + 27。1%以及OpenAI GPT +8。3%。

5 Ablation Studies

本章中,我們在BERT的各個方面進行實驗來更好地研究它們之間的相對重要性。更詳盡的實驗結果參見附件C。

5。1 Effect of Pre-training Tasks

我們透過評估兩項預訓練目標,證明了BERT的深度雙向性,評估過程中使用了和

\text{BERT}_\text{BASE}

完全相同的預訓練資料,fine tuning策略和超引數:

No NSP:

一個雙向模型,採用MLM但是不採用“next sentence prediction (NSP)”任務。

LTR & No NSP:

一個左性(left-context-only)模型,採用標準的Left-to-Right (LTR) LM,而不是MLM。左性約束同樣作用在fine tuning階段,因為不採用這種策略會導致預訓練/fine tunig不匹配,而導致下游效能損傷。此外,模型不採用NSP任務進行預訓練。這個模型將和OpenAI GPT非常類似,除了我們訓練採用了更大的資料集,我們的輸入表徵,和我們fine tuning策略。

我們首先檢查了NSP任務帶來的影響。表5中,我們顯示了移除NSP任務將顯著地損傷QNLI,MNLI,SQuAD 1。1上的效能。然後,我們評估了“No NSP”和“LTR & No NSP”在訓練雙向表徵時的影響。LTR模型在所有任務上都比MLM模型要查,在MRPC和SQuAD上則大幅下降。

對於SQuAD,很明顯LTR要在token預測上表現極差,這是因為token-level的隱藏狀態沒有收到右邊的語境。為了挽回一點LTR系統的面子,我們在頂層增加了一個隨機初始化的BiLSTM(

Google的人真的是好自負啊

)。這確實能夠顯著地提升SQuAD上的結果,但是結果依然要遠遠差於那些預訓練的雙向模型。BiLSTM結構對GLUE任務上甚至有害。

我們意識到同樣可以分別訓練LTR和RTL模型(

自左向右和自右向左

)然後透過將兩組表徵拼接在一起,和ELMo一樣。但是:(a)這樣需要單獨雙向模型兩倍的計算量;(b)這樣對與QA一類的任務違反常識,RTL模型不可能根據回答來解釋問題;(c)這明顯要弱於深度雙向模型,因為它(深度雙向模型)可以在每一層同時利用雙向語境。

5。2 Effect of Model Size

在這一章中,我們將研究模型尺寸在fine tuning任務上的精度。我們採用不同的層數、隱藏單元數、attention heads配比上訓練了一組BERT模型,同時它們都和之前的描述採用了完全相同的超引數和訓練策略。

論文精讀:BERT

在GLUE任務上的結果如表6所示。在這張表中,我們選擇了5組隨機初始化進行fine tuning的均值作為結果。可以看到在所有4個數據集上,我們可以獲得嚴格的效能提升,即使是在MRPC這樣只有3600個標記的訓練樣本,和預訓練任務上完全不同的資料集上。非常令人驚訝的是我們即使是在和現有的文獻中相比已經非常大的模型上,也能夠取得如此大的提升。比如文獻[-]中最大的Transformer採用了(L=6, H=1024, A=16),encoder有100M引數,而我們在找得到的文獻中最大的Transformer有(L=64, H=512, A=2),235M引數[-]。相反,

\text{BERT}_\text{BASE}

有110M引數,而

\text{BERT}_\text{LARGE}

則有340M引數。

毫無疑問的,隨著模型尺寸的增加,在大規模資料集上的任務比如機器翻譯和語言模型上,將會不斷地獲得模型效能的提升,表6中LM訓練資料的混淆度已經證明了這一點。但是我們相信這是首次證明了及其巨大的模型尺寸,同樣在小規模資料集任務上也能獲得巨大地效能提升,說明模型已經被充分地預訓練了。Peters等人[-]展示了提升從2層到4層的預訓練bi-LM尺寸在下游任務上綜合的結果,Melamud等人[-]提到了將隱藏層尺寸從200提升到600能夠提升模型效能,但是更進一步提升到1000則不能進一步提升模型的效能。但是這些之前的工作都是在採用的基於特徵的方法——而我們假設模型在充分fine-tune後,在下游任務上只通過很少的一部分隨機初始化的引數,模型就可以從更大表達更豐富的預訓練表徵上獲得性能的提升,即便下游任務是很小的資料集。

5。3 Feature-based Approach with BERT

所有目前展示的BERT結果都採用了fine-tuning的方法,在預訓練模型上只增加了很小的一層分類層,所有的引數都在下游任務上同時fine-tune。但是基於feature的方法,也就是透過預訓練的模型提取出來的固定特徵有它獨特的優勢。首先,不是所有任務都能輕易地被表達成Transformer encoder架構,因此需要增加一個任務相關的架構。其次透過對訓練資料進行一次昂貴地計算獲得的結果,然後就可以在此表徵基礎之上執行許多相對廉價的模型實驗。

在這一章中我們將透過將BERT應用到CoNLL-2003也就是NER[-]任務上,比較兩種方法。在BERT的輸入中,我們使用了一種case-preserving WordPiece模型,然後我們包括了最大化的資料中的文字語境。和標準的實踐一樣,我們將該任務轉化為一種標記任務但是在輸出層並沒有使用CRF層。我們在NER標籤集基礎上,使用第一個sub-token的表徵作為token-level分類器的輸入。

論文精讀:BERT

為了和fine-tuning方法進行比較,我們透過提取一層或者多層完全沒有經過fine-tuning的BERT的引數(

作為feature

),來使用feature-based的方法。這些語境embedding在一個隨機初始化的2層768維的BiLSTM上作為輸入。

結果如表7所示。

\text{BERT}_\text{LARGE}

和最新的SOTA模型有著相當的結果。表現最好的模型憑藉了最後四層隱藏層的表徵結果,僅僅比完全fine tune的模型低了0。3 F1。這也證明了BERT在fine tuning和feature based模型上表現都很好。

6 Conclusion

最近對LM的遷移學習的經驗已經表明豐富的無監督pre-training可以作為許多語言理解系統的一部分。特別地,這些結果能讓那些資源有限(資料集少)的任務也能利用好深度單向架構。我們的主要貢獻在於,進一步將這項工作泛化到深度雙向架構,讓相同的預訓練模型成功的推動了一系列NLP任務的發展(

Google的最後一句話實在是太裝*了,我翻譯不下去

)。

Appendix

我們按照如下三節組織附錄:

A包含了BERT實現的額外細節;

B包含了額外的實驗細節;

C包含了額外的BERT的對照實驗:

訓練步數的影響;

不同masking步驟的影響;

A Additional Details for BERT

A。1 Illustration of the Pre-training Tasks

我們按照如下方式提供預訓練任務的示例。

Masked LM and the Masking Procedure

假設未標記的句子是

my dog is hairy

,然後在隨機masking步驟中,我們選擇第4個token(也就是

hairy

) ,我們的masking步驟可以進一步解讀為:

80%的機率:把這個詞替換為[MASK] token,也就是:

my dog is hairy

->

my dog is [MASK]

10%的機率:把這個詞替換為一個隨機詞:

my dog is hairy

->

my dog is apple

10%的機率:把保留這個詞。這麼做的目的是為了讓表徵詞更傾向於真實觀測到的詞。

這樣做的好處是Transformer encoder並不知道它會被要求預測哪個詞,所以它被強制要求保留一個每一個輸入的語境的分佈表徵。此外,由於隨機替換隻出現在所有tokens中的1。5%(也就是15%的10%),這似乎並不會影響模型對語言的理解能力。在C。2節我們將評估這一步驟的影響。

和標準的語言模型訓練相比,MLM只在每個batch的15%上進行預測,這也表示模型需要更多的預訓練步數來進行收斂。在C。1節中,我們將證明MLM確實比LTR模型(也就是預測每一個token)收斂的要慢的多,但是MLM模型的提升的價值遠遠地超過了訓練成本。

Next Sentence Prediction:

NSP任務可以採用以下例子來說明。

Input =

[CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]

Label =

IsNext

Input =

[CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

Label =

NotNext

A。2 Pre-training Procedure

為了生成每個訓練輸入序列,我們從語料庫中取樣兩段文字範圍,即使它們通常比一般單句要長很多(也可以短很多),我們依然稱之為句子。第一個句子接受A embedding,第二個句子接受B embedding。50%的機率B是A之後的句子,而50%的機率是隨機句子,這樣做為NSP任務。這樣總體的採集是

\leq 512

tokens。LM masking應用於WordPiece token話之後,固定masking rate 15%,並且對於部分的word piece沒有特殊的處理。

我們訓練了batch size為256個序列(每個序列512個tokens,總計128000 tokens/batch),訓練了1M步,在3。3 billion的語料庫上訓練了大約40個epochs。我們採用Adam最佳化器,學習率1e-4,

\beta_1=0.9, \beta_2=0.999

,L2權重衰減係數0。01,學習率熱啟動最初的10,000步,學習率按照線性衰減。我們在每一層設定了0。1的dropout,並和OpenAI GPT一樣採用了gelu的啟用[-],而不是標準的relu。訓練損失是MLM似然均值和NSP似然均值之和。

\text{BERT}_\text{BASE}

的訓練在四顆雲TPUs,透過Pod設定(共計16 TPU晶片)。訓練

\text{BERT}_\text{LARGE}

則在16顆雲TPUs(共計64 TPU晶片)。每個訓練需要耗費4天來完成。

更長的序列將不成比例的昂貴,attention正比於序列的長度的四次方。為了加速我們實驗中的預訓練過程,我們採用128的序列長度訓練了90%的步數。然後我們在餘下的10%的步數中按照512的序列長度來訓練positional embedding。

A。3 Fine-tuning Procedure

對於fine-tuning,絕大多數模型超引數都和預訓練一樣,除了batch size,學習率和訓練epochs。Dropout機率都控制在0。1。最好的超引數都是任務相關的,但是我們發現下列引數範圍內的值對所有任務都喲比較不錯的效果:

Batch size:

16, 32;

Learning rate (Adam):

5e-5, 3e-5, 2e-5;

Number of epochs

: 2, 3, 4;

我們也觀察到在大型資料集(也就是100k+的標準訓練樣本上)對於超引數的選擇要比小資料集上的選擇不敏感的多。Fine-tuning通常很塊,所以在所有的模型上進行列舉選擇測試集上最好的結果即可。

A。4 Comparison of BERT, ELMo, and OpenAI GPT

論文精讀:BERT

這裡我們研究最新比較流行的表徵學習模型,包括ELMo、OpenAI GPT和BERT。模型比較的視覺化結果如圖3所示。需要注意的是,除了架構區別,BERT和OpenAI GPT都是fine-tuning方法,而ELMo是feature-based的方法。

和BERT最具有可比性的模型就是OpenAI GPT了,採用了LTR Transformer LM在大型文字語料庫上。實際上,許多BERT中的設計選擇都有意的和GPT類似,這樣兩種方法可以更好地進行比較。整個BERT和GPT中的核心不同在於雙向性和3。1節中的兩個訓練任務,但是我們也注意到BERT和GPT的訓練過程還有一些其他的不同。

GPT在BooksCorpus(800M詞),而BERT在BooksCorpus(800M詞)和Wikipedia(2500M詞)上訓練得到;

GPT採用了一種句子分隔符([SEP])和分類器token([CLS]),這些只在fine-tuning階段使用;而BERT則在預訓練過程中學習[SEP],[CLS]和句子 A/B embedding;

GPT在用batch size 32,000詞訓練1M步,而BERT用batch size 128,000訓練1M步;

GPT對所有的fine-tuning採用相同的學習率5e-5;而BERT採用了在測試集上表現最好的作為任務相關的fine-tuning學習率;

為了消除這些區別的影響,我們在第5。1節進行了對照實驗,證明了主要的改進得益於雙向性的改進和多工預訓練。

A。5 Illustrations of Fine-tuning on Different Tasks

不同任務上BERT的fine-tuning的表示可以見圖4。我們任務相關的模型透過將BERT和一個額外的輸出層一起實現,這樣讓儘量少的引數從頭開始訓練。在所有任務中,(a)、(b)是sequence level的任務,(c)和(d)是token level的任務。在圖中E表示輸入embedding,

T_i

表示token

i

的語境表示,[CLS]是分類輸出的特殊符號,[SEP]是分割飛連續token序列的特殊符號。

論文精讀:BERT

B Detailed Experimental Setup

B。1 Detailed Descriptions for the GLUE Benchmark Experiments

我們的GLUE結果在gluebenchmark和openai這裡找到。GLUE benchmark包含了一下資料集,這些資料集原始的描述在這裡[-]。

MNLI: Multi-Genre Natural Language Inference,是一個大規模,廣泛採集的詞語蘊含分類任務[-]。給定一個句子對,目標是預測第二個句子對第一個句子是蘊含、相反還是中性。

QQP: Quora Question Pairs是一個二分類任務,這裡目標是確定兩個Quora問的問題是否是同一個問題[-]。

QNLI: Question Natural Language Inference 是一個Stanford Question Answering Dataset [-]的一個版本,變更為了一個二分類問題[-]。正樣本(問題,句子)對是包含了正確的結果,負樣本(問題,句子)對來自同一段但是不包含回答。

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: 識別文字蘊含任務,和MNLI類似但是資料集更少。

WNLI: Winograd NLI是一個小型自然語言推斷任務資料集[-]。GLUE網站顯示這份資料集的構成有點問題,每個訓練的任務提交給GLUE的,在預測主要的類別上,都比65。1的baselien精度要低。我們因此為了和OpenAI GPT公平起見,排除了這一資料集。對於我們的GLUE提交,我們總是預測最主要的類別。

C Additional Ablation Studies

C。1 Effect of Number of Training Steps

圖5顯示了MNLI 測試精度,在一個預訓練k步後的checkpoint進行fine-tuning的結果。這讓我們可以回答以下問題:

問題:BERT真的需要這麼大量的預訓練(128,000詞/batch * 1M步)嗎?

回答:是的,

\text{BERT}_\text{BASE}

在1M步上比500k步上獲得了額外1。%的精度;

論文精讀:BERT

問題:MLM預訓練會由於在每個batch中只預測15%的詞,而要比LTR預訓練收斂更慢嗎?

回答:MLM模型確實比LTR模型收斂的稍微慢一些。但是,MLM的絕對精度幾乎是在瞬間就超過了LTR模型。

C。2 Ablation for Different Masking Procedures

在第3。1節,我們提到了BERT在訓練MLM目標時採用一種混合的masking策略。下面是一個關於不同masking策略的對照實驗。

論文精讀:BERT

需要注意的是,使用masking策略的目的是減少預訓練和fine-tuning之間的不匹配問題,比如[MASK]符號就從未出現在fine-tuning階段。我們在MNLI和NER上進行了比較。在NER上,我們同時列舉了fine-tuning和基於特徵的方法,我們期望的是基於feature的方法會放大這種不匹配,這是因為模型沒有機會對錶徵進行調整。

結果如表8所示。在這張表中,MASK表示我們將目標token用[MASK]符號進行替換。SAME表示保持token不變;RND表示隨機替換。

表左邊部分的數字表示MLM預訓練中所採用的策略的機率(BERT採用了80%,10%,10%)。右邊的部分表示結果。對於feature-based的方法,我們將最後4層的BERT的輸出作為特徵,也就是5。3節中所採用的最好的結果。

從表中我們可以看到,fine-tuning令人驚訝地對於不同masking策略有很好的魯棒性。但是和預期的一樣,只使用MASK策略會在使用feature-based的方法在NER資料集上有問題。有意思的是,只採用RND策略同樣比我們的策略要差很多。

標簽: bert  訓練  fine  模型  tuning