Bert: Bidirectional Encoder Representations from Transformers.html
主要創新點:Masked LM 和 Next sentence prediction。算法
NNLM:參考 :http://d0evi1.com/nnlm/
網絡
Bert是一個預訓練模型,對比ELMo和GPT,參考:天然語言處理中的語言模型預訓練方法(ELMo、GPT和BERT)框架
預訓練的思想:咱們知道目前神經網絡在進行訓練的時候基本都是基於後向傳播(BP)算法,經過對網絡模型參數進行隨機初始化,而後經過BP算法利用例如SGD這樣的優化算法去優化模型參數。那麼預訓練的思想就是,該模型的參數再也不是隨機初始化,而是先有一個任務進行訓練獲得一套模型參數,而後用這套參數對模型進行初始化,再進行訓練。其實早期的使用自編碼器棧式搭建深度神經網絡就是這個思想。還有詞向量也能夠當作是第一層word embedding進行了預訓練,此外在基於神經網絡的遷移學習中也大量用到了這個思想。函數
Bert: 這篇論文把預訓練語言表示方法分爲了基於特徵的方法(表明ELMo)和基於微調的方法(表明OpenAI GPT)。而目前這兩種方法在預訓練時都是使用單向的語言模型來學習語言表示。學習
這篇論文中,做者們證實了使用雙向的預訓練效果更好。其實這篇論文方法的總體框架和GPT相似,是進一步的發展。具體的,他們BERT是使用Transformer的編碼器來做爲語言模型,在語言模型預訓練的時候,提出了兩個新的目標任務(即遮擋語言模型MLM和預測下一個句子的任務),最後在11個NLP任務上取得了SOTA。優化
在語言模型上,BERT使用的是Transformer編碼器,而且設計了一個小一點Base結構和一個更大的Large網絡結構。ui
對比一下三種語言模型結構,BERT使用的是Transformer編碼器,因爲self-attention機制,因此模型上下層直接所有互相鏈接的。而OpenAI GPT使用的是Transformer解碼器,它是一個須要從左到右的受限制的Transformer,而ELMo使用的是雙向LSTM,雖然是雙向的,可是也只是在兩個單向的LSTM的最高層進行簡單的拼接。因此做者們任務只有BERT是真正在模型全部層中是雙向的。編碼
而在模型的輸入方面,BERT作了更多的細節,以下圖。他們使用了WordPiece embedding做爲詞向量,並加入了位置向量和句子切分向量。並在每個文本輸入前加入了一個CLS向量,後面會有這個向量做爲具體的分類向量。設計
在語言模型預訓練上,他們不在使用標準的從左到右預測下一個詞做爲目標任務,而是提出了兩個新的任務。第一個任務他們稱爲MLM,即在輸入的詞序列中,隨機的擋上15%的詞,而後任務就是去預測擋上的這些詞,能夠看到相比傳統的語言模型預測目標函數,MLM能夠從任何方向去預測這些擋上的詞,而不只僅是單向的。可是這樣作會帶來兩個缺點:1)預訓練用[MASK]提出擋住的詞後,在微調階段是沒有[MASK]這個詞的,因此會出現不匹配;2)預測15%的詞而不是預測整個句子,使得預訓練的收斂更慢。可是對於第二點,做者們以爲雖然是慢了,可是效果提高比較明顯能夠彌補。
對於第一點他們採用了下面的技巧來緩解,即不是老是用[MASK]去替換擋住的詞,在10%的時間用一個隨機詞取替換,10%的時間就用這個詞自己。
而對於傳統語言模型,並無對句子之間的關係進行考慮。爲了讓模型可以學習到句子之間的關係,做者們提出了第二個目標任務就是預測下一個句子。其實就是一個二元分類問題,50%的時間,輸入一個句子和下一個句子的拼接,分類標籤是正例,而另50%是輸入一個句子和非下一個隨機句子的拼接,標籤爲負例。最後整個預訓練的目標函數就是這兩個任務的取和求似然。
在微調階段,不一樣任務的模型以下圖,只是在輸入層和輸出層有所區別,而後整個模型全部參數進行微調。
下面咱們列出一下不一樣NLP上BERT的效果。
GLUE結果:
QA結果:
實體識別結果:
SWAG結果:
能夠看到在這些全部NLP任務上,BERT都取得了SOTA,並且相比EMLo和GPT的效果提高仍是比較大的。
在預訓練實驗分析上,能夠看到本文提出的兩個目標任務的做用仍是頗有效的,特別是在MLM這個目標任務上。
做者也作了模型規模的實驗,大規模的模型效果更好,即便在小數據集上。
此外,做者也作了像ELMo當成特徵加入的實驗,從下圖能夠看到,當成特徵加入最好效果能達到96.1%和微調的96.4%差很少,說明BERT對於基於特徵和基於微調這兩種方法都是有效的。
最後進行簡單的總結,和傳統的詞向量相比,使用語言模型預訓練其實能夠當作是一個句子級別的上下文的詞表示,它能夠充分利用大規模的單語語料,而且能夠對一詞多義進行建模。並且從後面兩篇論文能夠看到,經過大規模語料預訓練後,使用統一的模型或者是當成特徵直接加到一些簡單模型上,對各類NLP任務都能取得不錯的效果,說明很大程度上緩解了具體任務對模型結構的依賴。在目前不少評測上也都取得了SOTA。ELMo也提供了官網供你們使用。可是這些方法在空間和時間複雜度上都比較高,特別是BERT,在論文中他們訓練base版本須要在16個TGPU上,large版本須要在64個TPU上訓練4天,對於通常條件,一個GPU訓練的話,得用上1年。還有就是能夠看出這些方法裏面都存在不少工程細節,一些細節作得很差的話,效果也會大大折扣。
GLUE是一個天然語言任務集合,它包括如下這些數據集:
名稱 全名 用途
MNLI Multi-Genre NLI 蘊含關係推斷
QQP Quora Question Pairs 問題對是否等價
QNLI Question NLI 句子是否回答問句
SST-2 Stanford Sentiment Treebank 情感分析
CoLA Corpus of Linguistic Acceptability 句子語言性判斷
STS-B Semantic Textual Similarity 語義類似
MRPC Microsoft Research Paraphrase Corpus 句子對是否語義等價
RTE Recognizing Texual Entailment 蘊含關係推斷
WNLI Winograd NLI 蘊含關係推斷
包含了各類理解句子含義和關係的任務。看一下效果:
BERT在每個單項上的表現都是最優。一個頗有意思的現象是:在全部的任務上[Math Processing Error] BERT_{LARGE}BERT
LARGE
遠超過[Math Processing Error] BERT_{BASE}BERT
BASE
,其中甚至包括那些僅有少許訓練數據的任務。
Ablation Studies
BERT自己包含了不少創新點,下面看一下各個部分的貢獻。
先看一下pre-training中所用到的各類技術的重要性。
No NSP : 沒有next sentence prediction(NSP)任務
LTR & No NSP: 沒有MLM,而是用Left-to-Right(LTR) LM
+BiLSTM: fine-tuning過程當中,在LTR & No NSP上增長一個隨機初始化的BiLSTM
另外做者還實驗了模型大小,預訓練步數,已經feature-based版本的BERT,實驗結果也很是使人信服。特別要強調的一點是:咱們知道在大型任務中大的模型會帶來持續的效果增加,可是這是咱們第一次看見,只要模型通過了足夠的預訓練,在小任務中大模型也可以帶來顯著的增加。