簡介:
BERT,全稱Bidirectional Encoder Representations from Transformers,是一個預訓練的語言模型,可以通過它得到文本表示,然后用於下游任務,比如文本分類,問答系統,情感分析等任務.BERT像是word2vec的加強版,同樣是預訓練得到詞級別或者句子級別的向量表示,word2vec是上下文無關的(Context-Free),而BERT是上下問有關的(Contextual).意思就是,word2vec只是具有詞本身的語義信息,而沒有包含文本(不是特指某個文本,而是所有跟該詞相關的文本信息)上下文信息,BERT卻是相反的.目前為止,BERT已經取得了所有NLP任務的最好結果,所以才稱之為最強NLP模型.
以下是BERT的詳細介紹:
1.Mask-LM
傳統的一般形式語言模型,都是從前向后(從左到右)的得到文本的語義表示.

這樣得到的文本表示句子結尾處的詞可以包含前面詞的語義信息,但是前面的詞並有包含后面詞的語義信息.為了解決這一問題,從而引出了雙向RNN結構的模型(Bi-RNN/Bi-LSTM).但是如果模型加深,那么最后可能會形成一個"cycle"(作者原話),這是因為一層Bi-RNN會使前面的詞包含后面詞的語義,后面的詞包含前面詞的語義,那么一層一層的加深,每個詞都會包含整個句子的語義信息,最后加深就變成了自己包含自己的"cycle".
所以作者在這里並沒有使用循環神經網絡架構,而是使用一種叫做Mask-LM的方法,使用Transformer進行訓練:
We mask out 15% of the words in the input, run the entire sequence through a deep bidirectional Transformer encoder, and then predict only the masked words. For example:

根據文中的意思很好理解Mask-LM的意思,就是隨機的去掉部分輸入句子的單詞,讓其作為要預測的label(相當於完形填空),然后用雙向深度Transformer模型進行訓練.
2.Next Sentence Prediction
此外,為了學習句子之間的關系,作者還訓練一個簡單任務:給出兩個句子A和B,B是A之后的實際下一個句子,或者只是語料庫中的隨機句子?也就是判斷句子B是不是句子A的下一個句子,是或者不是,這是一個二分類問題,稱之為Next Sentence Prediction,它是BERT論文新提出的一項NLP任務,所以目前應該沒有專門針對NSP的語料庫.

3.模型結構
BERT包括兩個步驟:預訓練Pre-training和微調fine-tuning.預訓練是要花費很長的時間,而且硬件要求也很高,作用使用了4到16個雲TPU訓練了4天,所以家里沒有礦的伙伴就直接使用預訓練好的模型參數進行微調吧.文章開頭也說了,BERT可以作為預訓練模型,用於其他下游NLP任務,所以只需要使用預訓練好的模型參數,加上微調就可以在常見的NLP任務上取得較好的效果.
作者給出了兩個主要模型:Basic-model,Large-model.分別有12層/768個神經單元/12-heads/110M參數和24層/1024個神經單元/16heads/340M參數.以下是一些模型的其他release版本,其中uncased是指文本已經分詞和小寫處理.

作者強調,BERT模型的硬件要求高,參數量較小的Basic-model也需要在12g-16g的GPU上才可以運行(所以我也就只能看看文章--.).
模型更詳細的其他信息,可參考BERT代碼github:BERT