1. 程式人生 > 其它 >NLP預訓練發展小結二(Bert之後)

NLP預訓練發展小結二(Bert之後)

本篇博文簡要記錄基於Transformer的各類自然語言處理預訓練模型(自Bert開始)的特點及使用。

1. Bert

BERT(Bidirectional Encoder Representations from Transformers)做的是一個上下文雙向的資訊編碼器;

Bert與之前的ELMo、GPT相比較:

  • ELMo只是拼接LSTM 的正向向量和反向向量,並沒有發生互動,所以並不是真正的雙向,並且其用的是能力有限的LSTM結構;
  • GPT編碼器部分採用的是Transformer的Decoder來訓練語言模型,但是訓練方式為單向。

Bert預訓練任務:

  • 任務一:Masked LM(MLM)

把輸入的句子對進行 WordPiece 處理後,隨機選 15% 的 token【MASK】掉,然後對【MASK】掉的 token 進行預測。
MLM 任務會引起一個問題:預訓練和下游任務輸入不一致,因為下游任務的時候,輸入是不帶【MASK】的,這種不一致會損害 BERT 的效能,這也是後面研究的改善方向之一。BERT 自身也做出了一點緩解,就是對這 15% 要預測的 token 的輸入進行一些調整:
80% 用【MASK】代替;
10% 用隨機的詞 token 替;
10% 保持原來的 token 不變。

  • 任務二:Next Sentence Prediction(NSP)

判斷句子對是否是真正連續的句子對。
具體來說,當取樣預訓練樣本時,句子對 A 和 B,B 有 50% 的概率是 A 的真實的後一句;有 50% 的概率是語料庫中的隨機一句,在預訓練時,讓模型去學習。

預訓練模型應用的兩種正規化:feature-based & fine-tuning

  • feature-based:代表如EMLo,用於下游任務時,用訓練好的詞向量作為embedding,去初始化RNN/LSTM/CNN 等網路結構,即預訓練模型只提供feature-based的embedding;
  • fine-tunning:代表如 GPT,用於下游任務時,不僅保留了輸入embedding,模型裡面的引數(如 attention 層、全連線層)也同樣保留,在fine-tuning的時候只需在原來的模型上加一些簡單的層,就可以應用於具體的下游任務。
把BERT某些層的向量拿出來,作為token的embedding,這些embedding在後面的任務中不更新,即以feature-based方式使用BERT;另一方式即類似於GPT,將BERT整個結構應用到下游任務上。實驗證明,BERT 無論是作為 feature-based 正規化還是 fine-tuning 正規化,效果俱佳。

2. RoBERTa

RoBERTa(Robustly optimized BERT approach)在BERT基礎上做了以下改動:

  • 採用更多訓練語料
    在 BERT 採用的資料 BOOKCORPUS + English WIKIPEDIA(共 16G)基礎上,增加 CC-NEWS(76GB),OPENWEBTEXT(38GB),STORIES(31GB);

  • 採用動態【MASK】
    對於同一個樣本,BERT在不同的epoch中【MASK】掉的token不變,而RoBERTa在預訓練階段的每一個step,重新挑選15%的token進行【MASK】;

  • 去掉NSP任務
    RoBERTa是採用去掉NSP任務,而且一個樣本是從同一個文件裡面進行取樣;

  • 增大batch_size
    BERT的batch_size是256,一共訓練了1M步;實驗證明採用更大的batch_size以及訓練更多步可以提高效能,RoBERTa採用的batch_size是8K;

  • 文字編碼方式
    BERT 採用的是基於 character level 的 Byte-Pair Encoding(BPE)編碼,詞表大小是 30K;RoBERTa 採用的是基於 bytes-level 的 BPE 編碼,該方法用 bytes(位元組)作為基礎的子詞單元,詞表的大小是 50K,好處是可以在不需要引入任何未知字元前提下對任意文字進行編碼。

3. ALBERT

ALBERT(A Lite BERT)旨在減少模型引數量,並提出SOP任務:

  • 矩陣分解
    BERT 採用的是 WordPiece,大概有 30K 個 token,採用的 embedding 維度為 768,所以引數量約為 3000 * 768 = 2304000;通過一個矩陣分解去代替本來的 embedding 矩陣,embedding 取為 128,則引數量變為 3000 * 128+128 * 768=482304,引數量變為原來的 20%;

  • 引數共享
    BERT 的 Transformer 共用了 12 層的 encoder,讓這 12 層的 attention 層和全連線層層共享引數;

  • SOP任務
    sentence order prediction(SOP)即預測句對的順序, 正例的構建和NSP是一樣的,負例則是將正例的兩句話反過來。

  • 模型版本
    albert-base、albert-large、albert-xlarge、albert-xxlarge

4. ERNIE

截至本文發出時,百度共推出ERNIE-1.0、ERNIE-2.0、ERNIE-3.0三個版本的ERNIE預訓練模型:

ERNIE1.0從兩方面做修改:1.Knowledge Integration型【MASK】 ;2.增加對話資料的任務;
ERNIE2.0 的結構與 ERNIE1.0 、BERT 一樣,ERNIE2.0 主要是從修改預訓練任務來提升效果;
ERNIE3.0增加了知識圖譜等外部資訊。

5. ELECTRA

模型架構
  • 生成器
    首先對一句話裡面的 token 進行隨機的【MASK】,然後訓練一個生成器,對【MASK】掉的 token 進行預測(就是原生 BERT 的 MLM 任務);生成器對【MASK】掉的 token 預測完後,得到一句新的話;
  • 判別器
    將生成器的輸出,輸入到判別器,判別器判斷每個 token,是否是原樣本的,還是被替換過的。假如生成器預測出的 token 為原來的 token,那這個 token 在判別器的輸出標籤裡還是算原樣本,而不是被替換過的(如上圖的 "the",生成器預測為 "the",則 "the" 在判別器中的真實標籤就為 original,而不是 replaced)。

作者: python之家

出處: http://www.cnblogs.com/pythonfl/

本文版權歸作者和部落格園共有,轉載時請標明本文出處;如對本文有疑問,歡迎郵件[email protected]聯絡;如發現文中內容侵犯到您的權利,請聯絡作者予以處理。