Abstract:
我們提出...,與之前的語言表示不同的是,Bert用到左邊和右邊的context,用來訓練雙向表示。結果:預訓練的Bert只需要一個額外的output layer作為 fine-tune 使用。
Bert 很簡單,也很強大。在十一種任務上達到了新的state-of-art ,包括推動Glue到80.4%。Mutinli到86.7%,SQuAD到93.2%
Introduction:
預訓練語言模型能很有效的提升NLP任務。如:。。。
有兩種方式運用預訓練模型到任務上:feature-based和fine-tune,feature-based,如:ELMo,在特定任務模型上,使用ELMo的詞向量作為additional feature。fine-tune例如:GPT,引出幾個task--specific參數,在連接的下游模型上改變這些參數完成fine-tune操作。在先前的工作中,在預訓練中都使用相同的object function。(非方向性的語言模型)
我們提出 當前的技術嚴重限制了預訓練表示的能力,尤其是在fine-tune方式這個階段。主要的limitations是標准語言模型是沒有方向的,這限制了預訓練能選擇的模型架構。例如,在OpenAI 的GPT 中作者使用從左到右的結構,這樣在self-attention中每個token只能參與到在他之前的token的計算。這樣限制了句子級別的任務,例如SQuAD,利用context的雙向的信息十分關鍵。
在這篇文章中,我們基於提出的Bert改進了fine-tune方法:從transformer中得到雙向encoder表示。提出新的預訓練objective“masked language model”。masked 語言模型隨機的mask 輸入的部分token,objective是用來預測被mask的token 的最初的id???不像之前的從左到右的預訓練語言模型,MLM允許representation融合語境的左右前后語境信息。能訓練深度的雙向的transformer模型。除了MLM模型,我們還引進了“next sentence perdition”:jointly pre-trains text-pair representation。
我們論文主要貢獻:
1、我們說明了語言表示的雙向預訓練模型的重要性;不像gpt使用單向的語言模型,bert使用masked語言模型來得到深度雙向預訓練表示。這個也與ELMo相反,ELMo使用簡單的對從左到右和從右到左LMs相連接。
2、我們展示了預訓練表示省略掉本來所需的繁重的task-specific結構工程,Bert是第一個基於表示模型的fine-tune,能達到多個任務state-of-art,包括sentence-level和token-level 的任務,表現優於許多task-specific architecture。
3、Bert advances the state-of-art of 十一個任務, 模型的雙向運用是最重要的。代碼鏈接:
Related Work
1、feature-based approachs
直接使用訓練出來的詞向量,從非網絡模型,到神經網絡模型,
詞向量擴展到句子向量,段落向量,
從Wordvec、glove到elmo
2、fine-tune approachs
GPT
3、transfer Learning from Supervised Data
非監督訓練得益於有大量的未標注的語料,但是也有嘗試從監督訓練的方法
如計算機視覺
3、Bert
介紹模型實現。首先是模型架構描述,輸入層表示的細節。然后是我們預訓練模型的主要創新點。預訓練和fine-tune步驟。最后介紹Bert和Open AI GPT 的區別
3.1、Model Architecture
多層雙向Transfotmer encoder,關於我們implementation的trasnformer不再詳細贅述,參考論文:Vaswani et al. (2017),released in the tensor2tensor library(
https://github.com/tensorflow/tensor2tensor)
layers : L, the hidden size as H, and the number of self-attention heads as A.
In all cases we set the feed-forward/filter size to be 4H, i.e., 3072 for the H = 768 and 4096 for the H = 1024.
主要使用兩個model-0size
1、BERT_BASE: L=12, H=768, A=12, Total Parameters=110M
這個主要跟GPT對比(一個雙向一個單向)
2、BERT_LARGE: L=24, H=1024, A=16, Total Parameters=340M
我們把雙向的Transformer叫做Transformer encoder,把從左到右Transformer叫做Transformer decoder(也就是用於生成的時候一般都是從左到右)
3.2、Input Representation
我們的輸入能夠明確不含糊的表示單個text sentence 或者一對text sentences (e.g., [Question, Answer]) in one token sequence???

幾個表示相加
1、使用wordpiece embedding(3000 token vocabulary),split word 使用##f分割
2、positional embedding
3、CLS代表如果是classification任務的時候使用,不是分類任務這個位置可以忽略
4、針對句子對使用A、B序列。句子對打包為一個序列:用兩種方式:首先用SEP符號分開這兩個句子,第二步,將一個學習的句子A的embedding,加到every token of the first sentence,將一個學習的句子B的embedding,加到 every token of the second sentence。
5、針對單個句子,只使用A。
3.3、Pre-training Tasks
我們使用的LM模型,不是簡單地從左到右或者從右到左這樣的計算方式
3.3.1、Task #1:Masked LM
直覺上的,很容易想到深度雙向模型優於從左到右模型或者淺表的將從左到右和從右到左連接起來這樣的方式。。不幸的是,傳統的方法只能訓練從左到右的模型或從右到左,since bidirectional conditioning would allow each word to indirectly “see itself” in a multi-layered context。
為了訓練深度雙向模型,我們用很直接的方法:隨機的將input token進行mask掉,然后來預測這些被mask掉的token。
這個過程叫做“mask LM”(MLM)。被mask的token的最后hidden 本次vetors喂給softmax,這樣的LM模型。
在我們的實驗中,我們隨機的將wordpiece進行15%mask、然后預測這些被mask掉的words
原因沒看懂
針對15%隨機選擇的mask token ,進行下列操作:
• 80% of the time: Replace the word with the [MASK] token, e.g., my dog is hairy → my dog is [MASK]
• 10% of the time: Replace the word with a random word, e.g., my dog is hairy → my dog is apple
• 10% of the time: Keep the word unchanged, e.g., my dog is hairy → my dog is hairy. The purpose of this is to bias the representation towards the actual observed word.
Transformer encoder不知道哪個詞被mask,哪個詞被隨機替換掉。但是這樣的情況很少,只是15%中的10%(也就是15%*10%=1.5%)被這樣對待。所以大體上不影響
3.3.2、Task #1: Next Sentence Prediction
許多downstream tasks如問答,文本蘊涵,是基於兩個句子的關系和理解,這樣的關系語言模型學習不到。為了訓練一個能理解句子關系的模型,我們預訓練一個二進制化的“下一句預測任務”,這個可以從任何單語語料庫中簡單地生成。准去的來說,我們選擇句子A和B,50%的B是A的下一句話,50%的B是語料中隨機選擇的。

3.4、Pre-training Procedure
第一段
語料:BooksCorpus (800M words) (Zhu et al., 2015) and English Wikipedia (2,500M words),使用document級別的語料,而不是句子級別的,如Word Benchmark (Chelba et al., 2013)
第二段
為了生成每個訓練輸入序列,我們從語料庫中采樣兩個文本跨度,我們將其稱為“句子”,即使它們通常比單個句子長得多(但也可以更短)。准去的來說,如上文我們選擇句子A和B相連接,50%的B是A的下一句話,50%的B是語料中隨機選擇的。然后對wordpiece進行15%的mask
第三段&第四段
訓練細節,數量以及參數,環境
3.5、Fine-tuning Procedure
對於分類任務,使用最后一層的輸出的CLS標志進行預測,分類任務fine-tune時只需要加入一個K參數(類別數),label probabilities記為P=softmax(CW^T),對於span-level 和 token-level task,過程詳見section 4。
在fine-tune階段,大部分超參數和預訓練的時候一樣
• Batch size: 16, 32
• Learning rate (Adam): 5e-5, 3e-5, 2e-5
• Number of epochs: 3, 4
我們發現訓練集越大對參數的敏感度越小。fine-tune很快,好用(蒼白描述是好用,文章描述很奇妙)。
3.6、Comparison of BERT and OpenAI GPT
有對比意義的是GPT,Bert的很多設計理念與GPT都很接近。還有以下幾點不同:
1、訓練語料
GPT is trained on the BooksCorpus (800M words);
BERT is trained on the BooksCorpus (800M words) and Wikipedia (2,500M words).
2、
GPT的關鍵token【SEP】【CLS】只在fine-tune階段使用,Bert的【SEP】【CLS】和句子A/B在預訓練階段也使用。
3、
GPT was trained for 1M steps with a batch size of 32,000 words;
BERT was trained for 1M steps with a batch size of 128,000 words.
4、
GPT使用相同的學習率5e-5 for all fine-tuning experiments;
BERT針對不同的任務選擇不同的學習率,且表現更好。
4 Experiments
we present BERT fine-tuning results on 11 NLP tasks.