隨着bert在NLP各種任務上取得驕人的戰績,預訓練模型在這不到一年的時間內得到了很大的發展,本系列的文章主要是簡單回顧下在bert之后有哪些比較有名的預訓練模型,這一期先介紹幾個國內開源的預訓練模型。
一,ERNIE(清華大學&華為諾亞)
論文:ERNIE: Enhanced Language Representation with Informative Entities
GitHub:https://github.com/thunlp/ERNIE
清華大學和華為諾亞方舟實驗室聯合提出的引入知識圖譜來增強預訓練模型的語義表達能力,其實預訓練時就是在原來bert的基礎上增加了一個實體對齊的任務。我們來看看這個新的任務是怎么做的,首先來看看整個預訓練模型的架構
這里有兩個encoder,T-encoder和K-encoder,其實這里的K-encoder只有在預訓練的時候有作用,在之后的fine-tuning階段只要使用T-encoder就可以了,所以這里的重要就是引入了實體對齊這個任務而已。
如上圖中右邊所示,給定一條序列由$w_1, w_2, ...w_n$組成,與及這條序列對齊的實體$e_1, e_2, ...e_m$,這些實體來自於知識圖譜。因為一個實體會涉及到多個詞,以上面圖中為例$e_1 = Bob Dylan$,而在序列中與之對應的實體由兩個token組成,即$w_1=bob, w_2=dylan$。因此對齊時我們將知識圖譜中的實體和序列中實體的首個詞對應,即在位置上將$e_1$對應到$w_1$上。
T-encoder的作用是對序列進行編碼,結構和bert-base類似,但是層數是6層。K-encoder是對知識圖譜實體和序列做聚合,知識圖譜中的實體通過TransE做嵌入,具體表達式如下:
先對序列和實體編碼,然后做聚合,聚合完之后更新$w$ 和$e$的狀態
對於非實體的token的處理,直接對序列中的token更新即可:
了解了怎么將知識圖譜中的實體引入到任務中,再來看看具體的任務是怎么構建的,本文提出了隨機mask tokens-entity中的entity,然后去預測該位置對應的entity,本質上和MLM(mask language model)任務一致,都屬於去噪自編碼。具體mask的細節:
1)5%的tokens-entity對采用隨機用其他的entity來替換,這主要是引入噪聲,因為在實際的任務中也存在這種情況。
2)15%的tokens-entity對采用隨機maskentity,然后來預測這個entity。
3)80%保持正常。
這篇論文主要的工作就是增加了這個任務,另外也提出了在實體類型和關系抽取兩個任務上新的預訓練方式,具體如下圖:
就是引入了一些特殊的token來表明另外一些特殊token的身份。因為引入了實體對齊任務,因此該模型在一些和知識圖譜相關的下游任務上要優於bert。
二,ERNIE(百度)
論文:ERNIE: Enhanced Representation through Knowledge Integration
GitHub:https://github.com/PaddlePaddle/ERNIE
百度提出的這個模型名稱和上面一致,而且也號稱引入了知識信息,但是做法完全不一樣,這里主要的改變是針對bert中的MLM任務做了一些改進。具體的如下圖所示
在bert中只是mask了單個token,但是在語言中,很多時候都是以短語或者實體存在的,如果不考慮短語或者實體中詞之間的相關性,而將所有的詞獨立開來,不能很好的表達句法,語義等信息,因此本文引入了三種mask的方式,分別對token,entity,phrase進行mask。除此之外,本論文中還引入了對話語料,豐富語料的來源,並針對對話語料,給出了一個和NSP相似的任務。具體如下圖:
這里構建了一個DLM的任務,其實做法和NSP類似,隨機生成一些假的多輪QR對,然后讓模型去預測當前的多輪對話是真實的還是假的。
作者測試了在很多任務上較bert都有1-2%的提升,並且作者做了實驗表明DLM任務在NLI任務上有提升。
三,ERNIE 2.0(百度)
論文:ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FORLANGUAGE UNDERSTANDING
GitHub:https://github.com/PaddlePaddle/ERNIE
這是百度在之前的模型上做了新的改進,這篇論文主要是走多任務的思想,引入了多大7個任務來預訓練模型,並且采用的是逐次增加任務的方式來預訓練,具體的任務如下面圖中所示:
因為在這里不同的任務輸入不同,因此作者引入了Task Embedding,來區別不同的任務,訓練的方法是先訓練任務1,保存模型,然后加載剛保存的模型,再同時訓練任務1和任務2,依次類推,到最后同時訓練7個任務。個人猜測這樣的做法可能是因為直接同時訓練7個模型的效果並不好,但現在這種訓練方式,一開始在任務1上已經預訓練過,相當於已經有了一個很好的初始化參數,然后再去訓練任務1和任務2能保證模型更好的收斂。
在效果上較ERNIE1.0版本基本上全面提升,並且在閱讀理解的任務上有很大的提升。
四,BERT-wwm
論文:Pre-Training with Whole Word Maskingfor Chinese BERT
GitHub:https://github.com/ymcui/Chinese-BERT-wwm
BERT-wwm是哈工大開源出來的,在原始bert-base的基礎上引入whole word mask,其實就是分詞后的詞進行mask,如下圖所示:
因為是在bert-base的基礎上訓練的,因此無縫對接現在的bert的使用方法,直接替換預訓練模型即可,都不需要更改任何文件。而且在很多中文任務上較bert都有一些提升,因此推薦使用。