NLP中的預訓練語言模型(二)—— Facebook的SpanBERT和RoBERTa

  本篇帶來Facebook的提出的兩個預訓練模型——SpanBERT和RoBERTa。git

一,SpanBERTgithub

  論文:SpanBERT: Improving Pre-training by Representing and Predicting Spans 算法

  GitHub:https://github.com/facebookresearch/SpanBERT函數

  這篇論文中提出了一種新的mask的方法,以及一個新損失函數對象。而且討論了bert中的NSP任務是否有用。接下來SpanBERT是如何預訓練的,具體以下圖所示:性能

    

   如上圖所示,首先這裏的mask策略是span mask。具體的作法是首先從一個幾何分佈中採樣span的長度,且限制最大長度爲10,而後再隨機採樣(如均勻分佈) span的初始位置。整個訓練任務就是預測mask的token,另外mask的比例問題和bert中相似。可是在這裏引入了兩個損失對象,$L_{MLM}$ 和$L_{SBO}$,$L_{MLM}$和bert中的同樣,而這個$L_{SBO}$是隻經過span的邊界處的兩個token來預測span中mask的詞,公式表示以下:測試

    

   函數$f(.)$表示以下:spa

    

  除了這些以外還有兩個策略,一是動態mask,在bert中是在數據預處理階段對一條序列隨機不一樣的mask 10次,而在這裏是每次epoch時對序列使用不一樣的mask。二是bert中會在數據預處理階段生成10%的長度短於512的序列,而在這裏不作這樣的操做,只是對一個document一直截取512長度的序列,但最後一個序列長度可能會小於512。另外將adam中的$\epsilon$設置爲1e-8。做者根據這兩個策略重新訓練了一個bert模型,同時去除NSP任務只使用單條序列訓練了一個bert模型。所以做者給出了四個模型的性能對比:3d

  Google BERT:谷歌開源的berthtm

  Our BERT:基於上面兩個策略訓練出來的bert對象

  Our BERT-1seq:基於上面兩個策略,且去除NSP任務的bert

  SpanBERT:本篇論文提出的模型

  做者給出的第一個性能測試的表格是在SQuAD數據集上,

    

   SpanBERT是有很大的提高的,另外去除NSP任務也有提高,做者認爲NSP任務使得單條序列的長度不夠,以致於模型沒法很好的捕獲長距離信息。另外在其餘的抽取式QA任務上也有很大的提高

    

   我的認爲SpanBERT在抽取式QA任務上能取得如此大的提高,是由於SpanBERT中構造的任務,尤爲是SBO任務其實是有點貼合抽取式QA任務的。

  在其餘任務上SpanBERT也有一些提高,可是沒有在抽取式QA任務上提高這麼大,此外做者也作實驗表示隨機mask span的效果是要優於mask 實體或者短語的。

  綜合來講,SpanBERT在抽取式QA上的效果表現優異,在抽取式QA上是值得嘗試的。

 

二,RoBERTa

  論文:RoBERTa: A Robustly Optimized BERT Pretraining Approach

  GitHub:https://github.com/brightmart/roberta_zh

  本篇論文主要是在bert的基礎上作精細化調參,能夠看做是終極調參,最後性能不只全面碾壓bert,且在大部分任務上超越了XL-Net。

   總結下,主要有如下六處改變的地方:

  1)Adam算法中的參數調整,$\epsilon$由1e-6改爲1e-8,$\beta_2$由0.999改爲0.98。

  2)使用了更多的數據,從16GB增長到160GB。

  3)動態mask取代靜態mask。

  4)去除NSP任務,並採用full-length 序列。

  5)更大的batch size,更多的訓練步數。

  6)用byte-level BPE取代character-level BPE。

  接下來咱們來結合做者的實驗看看。首先做者任務調整adam的參數是可使得訓練更加穩定且也能取得更好的性能,但並無給出實驗數據。增長數據提高性能是毋庸置疑的。

  動態mask

  在bert中是在數據預處理時作不一樣的mask 10次,這樣在epochs爲40的時候,平均每條mask的序列會出現4次,做者在這裏使用動態mask,即每次epochs時作一次不一樣的mask。結果對好比下:

    

   說實話,沒以爲有多大提高,畢竟咱們在訓練模型的時候,一條數據也會被模型看到屢次。

  模型輸入

  對比了有無NSP任務的性能,以及不一樣的序列輸入的性能,做者在這裏給出了四種輸入形式:

  1)SEGMENT-PAIR + NSP:兩個segment組成句子對,而且引入NSP任務

  2)SENTENCE-PAIR + NSP:兩個sentence組成句子對,而且引入NSP任務,總長可能會比512小不少。

  3)FULL-SENTENCES:有多個完成的句子組成,對於跨文檔的部分,用一個標識符分開,可是總長不超過512,無NSP任務

  4)DOC-SENTENCES:有多個完整的句子組成,可是不跨文檔,總長不超過512

  性能以下:

    

   顯然直接用句子對效果最差,做者認爲主要時序列長度不夠,致使模型沒法捕捉長距離信息。而且去除NSP任務效果也有所提高。

  更大的batch size,更多的訓練次數

  做者認爲適當的加大batch size,既能夠加速模型的訓練,也能夠提高模型的性能。

    

   以後做者在8k的batch size下又增大訓練次數

    

  從實驗中能夠看出採用更大的訓練次數,性能也是有不小的提高的。而且能夠看到即便在訓練數據差很少的狀況下,RoBERTa也是要優於BERT的。

  總之RoBERTa是一個調參成功的BERT,在諸多任務上全面超越bert,大部分超越XL-Net。

    

相關文章
相關標籤/搜索