Transformer模型自提出以來,已經在很多地方都取得了不錯的成果,尤其是在nlp領域,它取得的成果是令人矚目的,相比於之前的模型,transformer模型的attention機制更夠更好地學習到句子當中單詞與單詞之間的聯繫,從而能夠結合上下文語境來提高準確度。
更重要的是,transformer的這種attention機制是一種底層的方法,我們基於它可以構造出一些新的模型,而這些模型在nlp中往往有著出色的表現,下面介紹的BERT模型就是其中之一。
如果對Transformer模型還不熟悉的話,可以看我之前的文章:Transformer模型淺析
一、預訓練過程
BERT是一種預訓練語言模型,因此在介紹它之前,先簡單說一下什麼是nlp中的預訓練過程。顧名思義,預訓練就是在拿樣本數據對模型進行訓練之前做的訓練,那麼為什麼要有預訓練呢?其實在nlp的下游任務(比如機器翻譯、閱讀理解等)中,可以使用的樣本數據是比較少的,因為這些任務需要的都是經過專門標註的數據,這樣就使得拿這些樣本數據直接訓練出來的模型效果比較一般,因此就需要對模型進行預訓練了。
預訓練的目的就是,提前訓練好這些下游任務中底層的、共性的部分模型,然後再用下游任務各自的樣本數據來訓練各自的模型,這樣就可以極大地加快收斂速度。在這裡舉一個cv的例子,對於人臉識別和數字識別兩種任務,顯然它們有很多的區別,然而在用CNN進行訓練的時候,其實比較淺的幾層網路學習到的特徵是很相似的,都是類似於邊角線的這類基礎特徵(下圖紅色框部分),因此我們可以認為這幾層網路可以共用,如果我們能夠預先訓練好這部分,那麼模型的訓練收斂速度將會大大加快。