BERT:google的fine-tune演算法
最近,BERT這篇文章刷爆了朋友圈,我也去拜讀了一下。這是Google AI Language這個月放在arXiv上的文章,主要是通過pre-train和fine-tuning的方式,解決多個NLP任務。 文章網址為:ofollow,noindex">https://arxiv.org/pdf/1810.04805.pdf 。
文章具體的做法如下:對於NLP任務比如閱讀理解,命名實體識別等,我們通常是設計一個模型,然後利用這個任務特有的資料對模型進行訓練,從而得到比較好的實驗結果。而BERT則是利用任務無關的資料,在Masked LM和Next Sentence Prediction兩個任務上進行pre-train,然後再利用一個類似FFN層的子網路針對不同的具體任務進行fine-tuning,並且可以得到非常好的效果。
BERT也是使用google先前提出的Transformer作為預訓練模型,在Masked LM的預訓練中,他們隨機選擇語料中15%的token進行Masked處理,並利用Transformer進行訓練去預測被Masked掉的單詞。 因為在pre-train和fine-tuning過程中有mismatch(被masked掉的單詞在fine-tuning中 is never seen),所以他們對於mask詞,在訓練的時候,有10%的情況是沒有進行mask的,有10%的情況是隨機替換成另一個詞,有80%的情況是mask掉的。 對於Next Sentence Prediction任務,BERT也執行了差不多的操作。 同時BERT對於embedding 的輸入也有了變化,他們引入了可訓練的位置向量,具體的細節可以參見論文。
在我看來,BERT的pre-training方法其實和meta-learning的觀點非常契合,都是首先訓練一個無偏的預訓練模型然後再通過的fine-tune即可在很多工上獲得成功。同時,BERT僅僅通過兩個任務的預訓練就可以在11個NLP任務上取得效果,這證明了一件事情,神經網路(Transformer)其實是可以學習到和任務無關的,但是對於自然語言來說更深層次的語義關係和語言表示的。那麼BERT這種訓練方式可不可以在NMT上也獲得成功呢? 訓練一個通用的語言無關的翻譯模型,然後通過fine-tune的方式可以在各個語言對上都獲得很好的翻譯效果。