摘要:
提出了一個新的語言表示模型(language representation), BERT: Bidirectional Encoder Representations from Transformers。不同於以往提出的語言表示模型,它在每一層的每個位置都能利用其左右兩側的信息用於學習,因此,它具有強大的表示能力,所以,BERT在預訓練之后,只需要加一個簡單的輸出層,並在新結構上fine-tuned 就能獲得 SOTA的結果。
引言
語言模型預訓練在自然語言處理任務中占據着越來越重要的位置。當前有兩種方法將預訓練的特征表示用於具體的任務,分別是:
- feature based。 如 ELMo針對不同的任務使用不同的網絡結構,並將預訓練的特征表示作為額外的特征輸入到具體的網絡中。
- fine-tuning。如GPT,對不同的任務只引入很少的額外參數,在應用到下游任務時直接在pre-train的網絡上fine-tune。
它們的目標函數都是單向的語言模型。從左到右的單向語言模型的表達能力有限,因為在attention layer中,每個單詞只能獲取到其左邊的信息,而在SQuAD 這樣的token-level的任務中,獲取左右兩邊的信息是至關重要的。BERT提出了兩個新的預訓練的目標函數:
- Masked Language Model
- Next Sentence Prediction
其中MLM的目標函數允許BERT采用雙向的attention(一般的LM建模只能是單向的,因為如果采用雙向attention,那么對於指定token,其在網絡下一層的輸入信息會包含當前token的相關信息,因為信息是雙向流動的,每個token位置都能獲取整個句子的信息,由於LM的任務是給定一個序列,預測序列的下一個token,所以LM不能獲取token后面的信息,BERT采用的是雙向的attention,相當於Transformer中的encoder部分)。MLM能使用雙向的attention是因為其隨機屏蔽一段句子中的一部分單詞,然后MLM的任務就是預測這些被屏蔽的單詞,所以即便信息是雙向流動,也不導致信息泄露。
BERT
模型結構
BERT的每一層都是transformer中的雙向encoder結構,假設 層數為L,hidden size 為H,self-attention head的個數為A, 設feedforward部分的hidden size為 4H。
BERT base: L=12,H=768,A=12, total parameter:110M
BERT large:L=24, H=1024,A=16, total parameter:340M
BERT 與 GPT和ELMo的結構對比如上圖。
bert是language understanding model,因為他的信息是雙向流動的,不好做generation的任務,雙向的 transformer 也被稱為 transformer ecoder。
gpt是language generation model,他基於單向的lm,所以可以做序列生成的任務,也被稱為 transformer decoder, 但其實稱為transformer decoder並不准確,因為transformer decoder除了 self-attention 之外還有來自encoder的cross-attention,但gpt並沒有cross-attention。
輸入表示
輸入可以分為三部分,分別是token的表示,segment的表示(用於區分句子A和句子B,比如QA等問題需要涉及sentence-level的學習),和positional encoding.
預訓練任務
Masked LM
隨機屏蔽掉一部分token, MLM的任務是根據未屏蔽的token預測被屏蔽的token. 每個句子屏蔽15%的單詞,用[MASK] 替代,但是這種做法會導致 預訓練過程和fine-tining階段不匹配,因為fine-tuning階段沒有[MASK]這個token。所以,並不總是將masked單詞替換成[MASK],具體做法如下:
a. 對於被15%被替換的單詞,80%的時間都是用[MASK]替換
b. 10%的時間隨機選擇一個單詞替代
c. 10%的時間保持不變
transformer encoder不知道它要預測的是哪個單詞,也不知道哪個單詞是被隨機替換的,所以,對於每個單詞,它都需要學習到上下文的表示分布情況(這個比較玄學)。而且只有1.5%的單詞被隨機替換了,這並不不會干擾模型的學習。
MLM的另一個缺點是在每個batch中只會預測15%的token,相比於預測全部的token,它需要更多的迭代次數以收斂。
- Next Sentence Prediction
很多nlp任務比如 Question Answering(QA), Natural Language Inference(NLI) 都需要理解句子間的關系,而在 語言建模中這種關系並不會直接體現。bert在預訓練中加入了一個二分類任務:判斷一個句子是不是另一個句子的下一句。
實驗
GLUE dataset
這是一個用於language understanding模型的數據集合,其中有single-sentence 的任務也有 sentence-pair的任務,如上圖(a)所示,兩個句子拼接在一起,通過segment embedding區分句子A和句子B,取第一個token [CLS]在最后一層對應的hidden state作為整個sequence 的represention C,然后將C與待fine-tunning的參數W相乘之后取softmax就是分類的各類概率。
SQuAD v1.1
問答數據集。如上圖(c)所示, 問答的輸入一個問題以及一段話,需要在這一段話中找到問題的答案,具體到這里的任務其實是定位答案在這一段話中的位置,所以需要找到 start position和 end position。在fine-tunning階段需要學習一個 start vector \(S\in R^{H}\)和一個end vector \(E\in R^{H}\),對於每個token,其最后一層的hidden state表示為 \(T_i\in R^{H}\),那么每個token為 start token 的概率為: