NLP中的預訓練語言模型(一)—— ERNIE們和BERT-wwm

  隨着bert在NLP各類任務上取得驕人的戰績,預訓練模型在這不到一年的時間內獲得了很大的發展,本系列的文章主要是簡單回顧下在bert以後有哪些比較有名的預訓練模型,這一期先介紹幾個國內開源的預訓練模型。git

一,ERNIE(清華大學&華爲諾亞)github

  論文:ERNIE: Enhanced Language Representation with Informative Entities 架構

  GitHub:https://github.com/thunlp/ERNIE測試

  清華大學和華爲諾亞方舟實驗室聯合提出的引入知識圖譜來加強預訓練模型的語義表達能力,其實預訓練時就是在原來bert的基礎上增長了一個實體對齊的任務。咱們來看看這個新的任務是怎麼作的,首先來看看整個預訓練模型的架構ui

  

  這裏有兩個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$上。spa

  T-encoder的做用是對序列進行編碼,結構和bert-base相似,可是層數是6層。K-encoder是對知識圖譜實體和序列作聚合,知識圖譜中的實體經過TransE作嵌入,具體表達式以下:3d

    

  先對序列和實體編碼,而後作聚合,聚合完以後更新$w$ 和$e$的狀態code

    

  對於非實體的token的處理,直接對序列中的token更新便可:orm

    

   瞭解了怎麼將知識圖譜中的實體引入到任務中,再來看看具體的任務是怎麼構建的,本文提出了隨機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都有一些提高,所以推薦使用。

相關文章
相關標籤/搜索