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]聯絡;如發現文中內容侵犯到您的權利,請聯絡作者予以處理。