1. 程式人生 > 實用技巧 >BERT家族的那些事——RoBERTa篇

BERT家族的那些事——RoBERTa篇

本文是BERT家族系列文章的第二篇,主要是自己對於RoBERTa模型的一些理解,寫的不好的地方還請大佬們多多指教。

目錄

  • RoBERTa簡介
  • RoBERTa模型結構
    模型結構層面的修改
    資料層面的修改
  • 總結

RoBERTa簡介

RoBERTa全稱:“A Robustly Optimized BERT Pretraining Approach”,從名字上可以看出RoBERTa是對BERT模型做了若干改進。RoBERTa模型在眾多資料集上的效果相較於BERT提高了5%-20%,

RoBERTa模型結構

RoBERTa模型主要從模型結構和資料兩個層面對BERT模型進行了修改,具體如下:

模型結構層面:

1.Static vs Dynamic Masking(MLM):

(1)原始Bert版Static Mask
原始的bert模型在與訓練任務中會抽取15%的token進行mask,但之後的每個epoche中mask不會再發生變化,這將導致在整個預訓練過程中,mask不會發生變化,即單個static mask。

(2)改進版Static Mask
RoBERTa中對於static mask稍做改進,將整個預訓練任務的40個epoche分為10組,每組預訓練過程依舊抽取15%的token進行mask,但與原始版static mask不同的是每組預訓練任務隨機選取的token位置,這相當於每個mask位置大約會參與4個epoche過程,與此同時被mask的token數量大約增加了10倍,有利於提高預訓練任務的效果。

(3)動態版Dynamic Masking
RoBERTa中也提出了dynamic mask的方法,即每次向模型輸入資料時動態的生成mask,在40個epoche的情況下與原始版static mask相比,被mask的token數量大約增加了40倍。

具體結果如下圖所示,文章後續使用Dynamic Masking預訓練任務。
在這裡插入圖片描述
2.Next Sentence Prediction(NSP)

原始Bert版NSP任務:
Bert中的NSP任務使用兩句話拼接到一起輸入進模型進行預訓練,其中50%的正例資料是統一文章中的上下句,50%的負例是不同文章中的兩個句子句。MLM任務和NSP任務本是Bert的兩大核心預訓練任務,但(Lample and Conneau,2019; Yang et al.2019; Joshi et al.2019)對NSP任務的作用產生質疑,RoBERTa對NSP任務進行了四個方面的改進嘗試:

(1) SEGMENT-PAIR+NSP:
輸入分兩部分,分別是來自同一文件和不同文件的片段,每個文件片段包括若干個完整的句子,文件片段長度必須小於512。預訓練仍為MLM和NSP兩個任務。

(2) SENTENCE-PAIR+NSP:
和SEGMENT-PAIR+NSP類似,輸入包括兩部分,分別是來自於同一文件和不同文件的單個句子,考慮到一般句子的長度遠小於512,所以增加了訓練時的batch size,這樣可以使得SENTENCE-PAIR+NSP預訓練任務和SEGMENT-PAIR+NSP預訓練任務更為相似。預訓練仍為MLM和NSP兩個任務。

(3) FULL-SENTENCES:
輸入只有一部分,是由來著同一文件或更多文件中的若干個連續句子組成,輸入長度不超過512,但因為輸入文字長度較長,所以可能會遇到跨越文件邊界問題,文章的處理是在兩篇文件之間插入一個特殊的token用於區分。預訓練中去除了NSP任務。

(4) DOC-SENTENCES
和FULL-SENTENCES類似,只是用另一種方式處理輸入跨越文件邊界問題,文件邊界附近的輸入長度小於512,對於這些輸入會動態的增加訓練時的batch size,這樣可以使得FULL-SENTENCES預訓練任務和DOC-SENTENCES預訓練任務更為相似。預訓練中去除了NSP任務。

具體結果如下圖所示,從結果來看,DOC-SENTENCES的表現結果略好於其他三種,但考慮到DOC-SENTENCES需要動態調整batch size,故文章後續使用效果近似的FULL-SENTENCES預訓練任務。
在這裡插入圖片描述
3.Training with large batches

(Ott et al.2018)的工作證明增大batche-size能夠加速機器翻譯任務的訓練速度和正確率,(You et al.2019)的工作證明BERT增大batche-size後也會有類似效果。

(Devlin et al.2019) 採用256的batche-size訓練1M個epoches,這種訓練方式與採用2K的batche-size訓練125K個epoches或採用8K的batche-size訓練31K個epoches在計算成本上是基本等價的。

實驗結果證明適當增大batche-size會降低語言模型的困惑度和提高模型效果。具體結果如下圖所示,文章後續採用8K的batche-size進行訓練,增大batche-size數量將會是未來模型迭代的一個研究方向。
在這裡插入圖片描述
4.Text Encoding

Byte-Pair Encoding(BPE)是字元級和單詞級的混合表示,BPE依賴於子詞(sub-word)單元,這些子詞單元是通過對訓練語料庫進行統計分析而提取的,BPE詞表大小通常在 1萬到 10萬之間。當對海量多樣語料建模時,unicode characters佔據了該詞表的大部分。(Radford et al.2019)的工作中介紹了一個簡單但高效的BPE, 該BPE使用位元組對而非unicode characters作為子詞單元。

當採用 bytes-level 的 BPE 之後,詞表大小從30K增加到50K。這分別為 BERT-base和 BERT-large增加了15M和20M額外的引數。

之前研究表明,BPE在有些下游任務上會導致輕微的效能下降。但是本文作者相信:這種統一編碼的優勢會掩蓋模型效能的輕微下降。作者在未來工作中將進一步對比不同的encoding方案。

資料層面:

1.增加預訓練過程的語料數量,增加訓練的step

下圖中給出了和原始BERT模型及XLNet相比的結果,其中RoBERTa模型的正常訓練步數為100Kstep,pretrain longer的訓練步數為300Kstep,pretrain even longer的訓練步數為500Kstep。
在這裡插入圖片描述
模型效果:

1.在GLUE上的結果
在這裡插入圖片描述
2.在SQuAD上的結果
在這裡插入圖片描述

總結

在預訓練過程中,我們發現延長模型訓練時間,在更大量的訓練資料的基礎上使用更大的batche-size,移除NSP預訓練任務,在訓練中使用更長的句子序列以及使用dynamic masking預訓練任務等一系列模型改進方法均可提升模型效果,即本文提出的RoBERTa模型,模型在GLUE,RACE和SQuAD上均取得state-of-the-art結果,這些結果說明之前被忽略決策的重要性,同時也證明了BERT模型的預訓練過程和近期提出的替代方案相比仍具有競爭力。


部落格不定時更新,歡迎NLP愛好者們加我微信:kaifeng3922,一起學習一起衝~