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


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

一,SpanBERT

  論文: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(.)$表示如下:

    

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

  Google BERT:谷歌開源的bert

  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。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM