天天看點

《RoBERTa: A Robustly Optimized BERT Pretraining Approach》論文筆記🚀主要内容⭐主要貢獻:⭐模型結構:⭐動态Maksing:⭐去除NSP預訓練任務:⭐使用更大的batch_size訓練:⭐更多的資料,更長的訓練時長⭐對Text Encoding的調整:⭐評估benchmarks:⭐總結:

 論文來源: 2019 發在arXiv上

 論文連結:https://arxiv.org/abs/1907.11692v1

🚀主要内容

 現有的一些預訓練模型在NLP領域取得了不錯的成績,但是要确定哪些方面對模型性能的提升貢獻最大是困難的。畢竟這些模型訓練成本比較高,調優麻煩。且我們在訓練的時候通常是在不同大小的私有資料集上進行的,限制了對模型效果的評測。

 是以該篇論文主要就是重新對BERT模型進行了研究及調整,提出了一種改價方法來訓練BERT模型,稱為RoBERTa。細緻地評估了其中的關鍵超參數、資料集大小對性能的影響。

 實驗表明,BERT的預訓練不夠充分,且經過調整BERT能超越在其後面釋出的一些改進模型。實驗在一些下遊任務上達到了SOTA。這也充分說明先前忽視掉的一些訓練時的設計選擇。

⭐主要貢獻:

 1.對BERT的設計選擇以及一些訓練政策進行了調整,并引入了一些能使下遊任務達到更好性能的替代方案。

 2.建構了一個新的資料集CC-NEWS(其大小與其他的一些私有資料集大小相當,以更好的控制訓練集大小的影響),并證明了在預訓練階段使用更多的資料訓練,能夠提升下遊任務的性能。

 3.經過訓練上的一些調整,實驗證明了性能得到了提升,同時能夠說明在合适的設計選擇下,MLM預訓練任務能夠和最近釋出的一些方法相抗衡。

【注:預訓練和微調代碼開源在了github】

 論文對BERT的修改也比較簡單,如下:

 1.加長訓練時間、加大批次大小、加大訓練資料量。

 2.去掉NSP預訓練任務。

 3.對更長的序列進行訓練。

 3.動态地對訓練資料進行MASK。

⭐模型結構:

 使用的是BERT_base(L=12, H = 768, A = 12, 110M params),結構不作變化。

⭐動态Maksing:

 之前BERT裡MLM預訓練任務的mask政策是:

 先随機選擇15%的token,80%替換成[MASK],10%不變,10%替換别的詞。

 但是這個過程是靜态的,也就是在訓練前的資料預處理階段已經結束,後面就當成訓練集訓練。是以叫靜态Making。

 而RoBERTa中則是将每條資料複制10份當成資料集,每份也是随機選擇15%token,但是每份都采用了不同的mask方式。也就是說在一個epoch内(一個epoch會周遊完資料集),同一個序列将會訓練10次,但是這10次都是不同的mask方式。其實這就叫動态Masking了。大概像下面這樣:

N = N * 10   # N:資料集大小
for epoch in range(epoches):
    for step in range(N / 10):  # 按每次都是全部資料 來了解
          對mask1訓練
    .....
    for step in range(N / 10):
          對mask10訓練

           

 作者在固定其他參數不變,對比了靜态和動态Masking,确實帶來了性能的輕微提升。當資料集更大或者訓練步數較多時,這變得至關重要。

 下面實驗都使用動态Masking進行。

《RoBERTa: A Robustly Optimized BERT Pretraining Approach》論文筆記🚀主要内容⭐主要貢獻:⭐模型結構:⭐動态Maksing:⭐去除NSP預訓練任務:⭐使用更大的batch_size訓練:⭐更多的資料,更長的訓練時長⭐對Text Encoding的調整:⭐評估benchmarks:⭐總結:

⭐去除NSP預訓練任務:

 在BERT裡,使用NSP預訓練任務是為了捕捉句子之間的關系,每次輸入兩句話判斷其是否連續。而RoBERTa去除了NSP,每次連續輸入多個句子,直到最大長度(可以跨文章),這種方式叫FULL-SENTENCES。實驗表明在MNLI這種推斷句子關系的任務上RoBERTa也能有更好性能。

 本文設計了以下4種訓練方式:

【注:SEGMENT-PAIR和SENTENCE-PAIR就是BERT裡的那種形式,一個SEGMENT包含多個SENTENCES。DOC-SENTENCES:也是和FULL-SENTENCES一樣(不過不能跨文章)】

《RoBERTa: A Robustly Optimized BERT Pretraining Approach》論文筆記🚀主要内容⭐主要貢獻:⭐模型結構:⭐動态Maksing:⭐去除NSP預訓練任務:⭐使用更大的batch_size訓練:⭐更多的資料,更長的訓練時長⭐對Text Encoding的調整:⭐評估benchmarks:⭐總結:

 去掉NSP損失在下遊任務的性能上能夠與原始BERT持平或略微升高。可能的原因:原始 BERT 實作采用僅僅是去掉NSP的損失項,但是仍然保持 SEGMENT-PARI的輸入形式。對比沒有NSP的兩種情況,DOC會好些,他的SENTENCES來自同一文章。由于DOC在同一篇文章采樣時到了文章末尾處,可能采樣小于512token(作者預訓練統一将輸入長度設定為了512tokens。)而作者是通過動态調整batch_size來平衡和FULL-SENTENCES有差不多的tokens。

 為了友善對比,作者還是使用了FULL-SENTENCES實驗。

⭐使用更大的batch_size訓練:

  BERT_base中:batch_size = 256

  而RoBERTa中:batch_size = 8K。

 這主要是作者借鑒了在過去的機器翻譯任務中,适當增大學習率時,更大的batch_size配合能提升模型優化速率和模型性能。且近期的一些工作表明BERT适合用大批量資料訓練。

  同時更大批次也容易通過并行處理。

⭐更多的資料,更長的訓練時長

 借鑒XLNet用了比Bert多10倍的資料,RoBERTa也用了更多的資料。性能确實再次提升。當然,也需要配合更長時間的訓練。

⭐對Text Encoding的調整:

 位元組對編碼(BPE)(Sennrich et al.,2016)是字元級和單詞級表示的混合,該編碼方案可以處理自然語言語料庫中常見的大量詞彙。BPE不依賴于完整的單詞,而是依賴于子詞(sub-word)單元,這些子詞單元是通過對訓練語料庫進行統計分析而提取的,其詞表大小通常在 1萬到 10萬之間。當對海量多樣語料模組化時,unicode characters占據了該詞表的大部分。Radford et al.(2019)的工作中介紹了一個簡單但高效的BPE, 該BPE使用位元組對而非unicode characters作為子詞單元。

總結下兩種BPE實作方式:

 基于 char-level :原始 BERT 的方式,它通過對輸入文本進行啟發式的詞幹化之後處理得到。

 基于 bytes-level:與 char-level 的差別在于bytes-level 使用 bytes 而不是 unicode 字元作為 sub-word 的基本機關,是以可以編碼任何輸入文本而不會引入 UNKOWN 标記。

 當采用 bytes-level 的 BPE 之後,詞表大小從3萬(原始 BERT 的 char-level )增加到5萬。這分别為 BERT-base和 BERT-large增加了1500萬和2000萬額外的參數。

 之前有研究表明,這樣的做法在有些下遊任務上會導緻輕微的性能下降。但是本文作者相信:這種統一編碼的優勢會超過性能的輕微下降。

⭐評估benchmarks:

 使用如下3個benchmarks對在下遊任務上的性能進行評估:

1.GLUE

2.SQuAD

3.RACE

 結合上述的所有調整,通過BERT_Large預訓練模型 (L = 24, H = 1024, A = 16, 355M parameters)來微調下遊任務。在GLUE,RACE和SQuAD上實作了SOTA。

⭐總結:

 RoBERTa通過更長時間地訓練模型,處理更多資料,增大batch_size可以顯著提高模型性能;去除NSP預訓練,在更長的序列上訓練。并動态地改變應用于訓練資料的遮蔽模式。該方案在GLUE,RACE和SQuAD上實作了SOTA。【注:在GLUE上沒有進行多任務微調,在SQuAD上沒有使用附加資料。】這些結果說明這些先前被忽視的設計決策的重要性,并表明BERT的預訓練目标與最近提出的替代方案相比仍然具有競争性。

繼續閱讀