預訓練模型(5)---- SpanBERT&RoBERTa&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是如何預訓練的,具體如下圖所示:

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

在這裏插入圖片描述
函數f(.)表示如下:

在這裏插入圖片描述
除了這些之外還有兩個策略,一是動態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數據集上

在這裏插入圖片描述
SpanBERT是有很大的提升的,另外去除NSP任務也有提升,作者認爲NSP任務使得單條序列的長度不夠,以至於模型無法很好的捕獲長距離信息。另外在其他的抽取式QA任務上也有很大的提升。

在這裏插入圖片描述
個人認爲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。結果對比如下:

在這裏插入圖片描述
說實話,沒覺得有多大提升,畢竟我們在訓練模型的時候,一條數據也會被模型看到多次。

模型輸入

對比了有無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。

在這裏插入圖片描述

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中),這時候更能體現一個人的快速學習能力。稍微扯遠了,迴歸下正題。持續學習包括持續構建預訓練任務和增量多任務學習兩個部分,具體下圖:

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

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

在這裏插入圖片描述
就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好一些,這是不是反映模型改進提升有限,當前還是多增加預訓練數據效果來得更快些。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章