天天看點

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

比較小衆的預訓練模型

    • 1. SpanBERT
    • 2. RoBERTa
    • 3. ERNIE2

本文主要介紹一些比較小衆的預訓練模型,這些模型不像Bert、XLNet等那麼有影響力,都是在這些模型的基礎上做的相關改進工作,但是這些工作可以引導我們學會如何優化模型,對我們的學習以及科研都會有很大的幫助。

首先是Facebook的提出的兩個預訓練模型——SpanBERT和RoBERTa。

1. SpanBERT

論文連結:

SpanBERT: Improving Pre-training by Representing and Predicting Spans

代碼連結:

https://github.com/facebookresearch/SpanBERT

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

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

如上圖所示,首先這裡的mask政策是span mask。具體的做法是首先從一個幾何分布中采樣span的長度,且限制最大長度為10,然後再随機采樣(如均勻分布) span的初始位置。整個訓練任務就是預測mask的token,另外mask的比例問題和bert中類似。但是在這裡引入了兩個損失對象,LMLM 和LSBO,LMLM和bert中的一樣,而這個LSBO是隻通過span的邊界處的兩個token來預測span中mask的詞,公式表示如下:

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

函數f(.)表示如下:

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

除了這些之外還有兩個政策,一是動态mask,在bert中是在資料預處理階段對一條序列随機不同的mask 10次,而在這裡是每次epoch時對序列使用不同的mask。二是bert中會在資料預處理階段生成10%的長度短于512的序列,而在這裡不做這樣的操作,隻是對一個document一直截取512長度的序列,但最後一個序列長度可能會小于512。另外将adam中的ϵ設定為1e-8。作者根據這兩個政策從新訓練了一個bert模型,同時去除NSP任務隻使用單條序列訓練了一個bert模型。是以作者給出了四個模型的性能對比:

  1. Google BERT:谷歌開源的bert
  2. Our BERT:基于上面兩個政策訓練出來的bert
  3. Our BERT-1seq:基于上面兩個政策,且去除NSP任務的bert
  4. SpanBERT:本篇論文提出的模型

作者給出的第一個性能測試的表格是在SQuAD資料集上

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

SpanBERT是有很大的提升的,另外去除NSP任務也有提升,作者認為NSP任務使得單條序列的長度不夠,以至于模型無法很好的捕獲長距離資訊。另外在其他的抽取式QA任務上也有很大的提升。

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

個人認為SpanBERT在抽取式QA任務上能取得如此大的提升,是因為SpanBERT中構造的任務,尤其是SBO任務實際上是有點貼合抽取式QA任務的。

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

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

2. RoBERTa

論文連結:

RoBERTa: A Robustly Optimized BERT Pretraining Approach

代碼連結:

https://github.com/brightmart/roberta_zh

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

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

  1. Adam算法中的參數調整,ϵ由1e-6改成1e-8,β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。結果對比如下:

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

說實話,沒覺得有多大提升,畢竟我們在訓練模型的時候,一條資料也會被模型看到多次。

模型輸入

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

  1. SEGMENT-PAIR + NSP:兩個segment組成句子對,并且引入NSP任務。
  2. SENTENCE-PAIR + NSP:兩個sentence組成句子對,并且引入NSP任務,總長可能會比512小很多。
  3. FULL-SENTENCES:有多個完成的句子組成,對于跨文檔的部分,用一個辨別符分開,但是總長不超過512,無NSP任務。
  4. DOC-SENTENCES:有多個完整的句子組成,但是不跨文檔,總長不超過512。

性能如下:

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

顯然直接用句子對效果最差,作者認為主要時序列長度不夠,導緻模型無法捕捉長距離資訊。并且去除NSP任務效果也有所提升。

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

作者認為适當的加大batch size,既可以加速模型的訓練,也可以提升模型的性能。

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

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

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

從實驗中可以看出采用更大的訓練次數,性能也是有不小的提升的。并且可以看到即使在訓練資料差不多的情況下,RoBERTa也是要優于BERT的。

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

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

3. ERNIE2

論文連結:

ERNIE 2.0: A Continual Pre-training Framework for Language Understanding

代碼連結:

https://github.com/PaddlePaddle/ERNIE

ERNIE2是百度在ERNIE1基礎上的一個更新版,不過這次更新幅度比較大,提出了一個持續學習的機制(continual learning)。這個機制比較有意思,有點模仿人學習的形式。我們人是在不斷學習,并且是多種任務不停交叉學習。有人覺得工作後就不用學習了,但其實工作才是真正學習的開始。上學期間你可能隻是單純地學習,但在工作中需要快速邊做邊學(learning by doing,不知道這種機制能否引入到AI中),這時候更能展現一個人的快速學習能力。稍微扯遠了,回歸下正題。持續學習包括持續建構預訓練任務和增量多任務學習兩個部分,具體下圖:

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

連續預訓練的架構如下圖,它包含一系列共享的文本編碼層來編碼上下文資訊,這些文本編碼層可以通過循環神經網絡或 Transformer 建構,且編碼器的參數能通過所有預訓練任務更新。

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

不同于ERNIE1僅有詞級别的Pretraining Task,ERNIE2考慮了詞級别、結構級别和語義級别3類Pretraining Task,詞級别包括Knowledge Masking(短語Masking)、Capitalization Prediction(大寫預測)和Token-Document Relation Prediction(詞是否會出現在文檔其他地方)三個任務,結構級别包括Sentence Reordering(句子排序分類)和Sentence Distance(句子距離分類)兩個任務,語義級别包括Discourse Relation(句子語義關系)和IR Relevance(句子檢索相關性)兩個任務。三者關系如圖:

預訓練模型(5)---- SpanBERT&RoBERTa&ERNIE2

就pre-train的多任務loss而言,個人覺得已經考慮很全了,并且個人之前也比較看好pre-train multi-task學習方向。BERT某種程度上也是一個multi-task學習,包含兩個loss。雖然RoBERTa和其他一些文章說next prediction loss已是非必須,但multi-task始終是一個可以前進的方向,尤其是在資料和模型結構不變的情況下,使用multi-task理論上會有些提升。當然multi-task的不足在于如何有效訓練多任務,ERNIE2采用了持續學習的機制,多個任務輪番學習,這有點類似于我們人上學,這節課學國文,下節課學數學,再下節課學英語。預訓練資料相比BERT來說有所增加,英文約增加了2倍,中文約增加了1倍多。

ERNIE2要優于BERT和XLNet。但也有兩點疑惑:

  • 作者為什麼不再探索下多任務帶來的效果到底有多少,可以在定量分析下。要不然現在的結果到底多少是資料帶來的,多少是多任務帶來的,其實并不清楚,multi-task這條路到底能走多遠沒有給出答案;
  • RoBERTa與ERNIE2相比,RoBERTa英文資料增加了10倍,ERNIE2資料應該是增加兩倍,但做了很多模型loss上的增加,從GLUE效果上看,顯然RoBERTa要比ERNIE2好一些,這是不是反映模型改進提升有限,目前還是多增加預訓練資料效果來得更快些。

繼續閱讀