天天看點

BERT, RoBERTa, DistilBERT, XLNet,Albert

BERT

BERT 是一個雙向Transformer,用于對大量未标記的文本資料進行預訓練,以學習可用于微調特定機器學習任務的語言表示。盡管BERT在一些艱巨的任務上勝過一些NLP的最新技術,但其性能的提高主要歸因于:雙向的Transformer,基于大量訓練資料的新穎的Masked Language Model和Next Structure Prediction預訓練任務。當然同樣重要的是谷歌強大的算力加持。

擴充Bert-wwm & Bert-wwm-ext

XLNet

XLNet是一個通過排列語言模型實作雙向上下文資訊的自回歸模型。它通過随機排列輸入序列而預測某個位置可能出現的詞,進而訓練出具有上下文的語境化詞向量。

XLNet是采用通用得自回歸預訓練方法(AR模型),而基于DAE(去噪自編碼器)得Bert模型采用得是降噪得自動編碼方法(AE模型),bert和AR模型的差別主要是:

  1. 獨立性假設

    bert中一個序列中會被mask掉不超過15%的單詞,但是在預訓練時的目标函數是基于mask值彼此獨立、互不幹擾的假設下進行計算的,而AR模型中不需要設定mask值,預訓練時的目标函數也不必設立獨立假設。同時,mask的設定會導緻預訓練-微調的資料上的不統一,這也是Bert的一個缺陷。

  2. 輸入噪聲

    Bert在預訓練時對輸入序列進行随機mask,這是一種輸入噪聲設定,但是在下遊任務進行微調時卻并沒有對輸入序列設定輸入噪聲,即随機mask,這引起了預訓練-微調間的差異。與之相反,AR模型不設定輸入噪聲,因而不會有這種問題。

  3. 上下文依賴

    AR模型隻考慮前向資訊或者後向資訊,而bert要考慮雙向資訊,結果就是,bert的目标函數允許模型被訓練為能夠更好地抓取雙向資訊。

XLNet與Bert比較

Bert隐藏了15%的詞,用85%去預測15%的詞。缺少了15%的詞中的關聯性(進而忽略了被 mask 位置之間的依賴關系)。

XLNet是通過整個上下文去預測某個詞,這樣的詞的使用率更高,理論上效果更好。

XLNet 的核心思想是 PLM,排列原來的句子,然後預測末尾的單詞。這樣可以學習到單詞之間的依賴關系,而且可以利用 token 前後向的資訊。

XLNet PLM 的實作需要用到 Two-Stream Self-Attention,包含兩個 Stream,Query Stream 用于預測,隻包含目前位置的位置資訊。而 Content Stream 儲存了 token 的内容。

XLNet 還使用了 Transformer-XL 的優化方式(段循環&相對位置編碼)。

BERT, RoBERTa, DistilBERT, XLNet,Albert

詳情參見:

https://cloud.tencent.com/developer/article/1449495

https://www.pianshen.com/article/6717954811/

PLM:https://baijiahao.baidu.com/s?id=1654814515140351919&wfr=spider&for=pc

https://blog.csdn.net/u012526436/article/details/93196139

中文預訓練模型下載下傳

RoBERTa

RoBERTa在模型層面沒有改變Google的Bert,改變的隻是預訓練的方法。這是對BERT的retraining,增加了1000%的文本資料和相應的計算能力。為了改進訓練過程,RoBERTa 從 BERT 的預訓練中移除了下一句預測(Next Sentence Prediction,NSP)任務,并引入了Dynamic Masking(動态 Masking),以便masked token在訓練期間發生變化。此外還發現在訓練過程中使用更大的batch-training更有用。

更重要的是,RoBERTa使用160 GB的文本進行預訓練,包括BERT中使用的16 GB的Books Corpus和English Wikipedia。 其他資料還包括Common Crawl News資料集(6300萬篇文章,76 GB),Web文本語料庫(38 GB)和Common Crawl的故事(31 GB)。加上一天的1024個Tesla 100 V GPU的出色表現,完成了對RoBERTa的預訓練任務。

學習奧運精神,更高更快更強;最強預訓練模型,(資料)更多(訓練)更久(批次)更大

1. 靜态Masking vs 動态Masking

原來Bert對每一個序列随機選擇15%的Tokens替換成[MASK],為了消除與下遊任務的不比對,還對這15%的Tokens進行(1)80%的時間替換成[MASK];(2)10%的時間不變;(3)10%的時間替換成其他詞。但整個訓練過程,這15%的Tokens一旦被選擇就不再改變,也就是說從一開始随機選擇了這15%的Tokens,之後的N個epoch裡都不再改變了。這就叫做靜态Masking。

而RoBERTa一開始把預訓練的資料複制10份,每一份都随機選擇15%的Tokens進行Masking,也就是說,同樣的一句話有10種不同的mask方式。然後每份資料都訓練N/10個epoch。這就相當于在這N個epoch的訓練中,每個序列的被mask的tokens是會變化的。這就叫做動态Masking。

那麼這樣改變是否真的有效果?作者在隻将靜态Masking改成動态Masking,其他參數不變的情況下做了實驗,動态Masking确實能提高性能。

可以看出,修改版的靜态mask與BERT原始靜态mask效果相當;動态mask又與靜态mask效果差不多,或者說略好于靜态mask。

BERT, RoBERTa, DistilBERT, XLNet,Albert

2. with NSP vs without NSP

原本的Bert為了捕捉句子之間的關系,使用了NSP任務進行預訓練,就是輸入一對句子A和B,判斷這兩個句子是否是連續的。在訓練的資料中,50%的B是A的下一個句子,50%的B是随機抽取的。

而RoBERTa去除了NSP,而是每次輸入連續的多個句子,直到最大長度512(可以跨文章)。這種訓練方式叫做(FULL - SENTENCES),而原來的Bert每次隻輸入兩個句子。實驗表明在MNLI這種推斷句子關系的任務上RoBERTa也能有更好性能。

BERT, RoBERTa, DistilBERT, XLNet,Albert

3. 更大的mini-batch

原本的BERT-base 的batch size是256,訓練1M個steps。RoBERTa的batch size為8k。為什麼要用更大的batch size呢?(除了因為他們有錢玩得起外)作者借鑒了在機器翻譯中,用更大的batch size配合更大學習率能提升模型優化速率和模型性能的現象,并且也用實驗證明了确實Bert還能用更大的batch size。

BERT, RoBERTa, DistilBERT, XLNet,Albert

4. 更多的資料,更長時間的訓練

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

BERT, RoBERTa, DistilBERT, XLNet,Albert

參考:

https://www.jianshu.com/p/eddf04ba8545

https://blog.csdn.net/ljp1919/article/details/100666563

中文預訓練模型下載下傳

wwm模型下載下傳

DistilBERT是一種蒸餾(近似)版本的BERT。它保留了BERT大概97%的性能,但僅有一半的參數量。具體來說,它沒有Token-type Embeddings和Pooler,僅保留了Google BERT的一半圖層。DistilBERT使用了一種稱為蒸餾的技術,它将Google的BERT近似為一個較小的神經網絡。這個想法是,一旦訓練了大型神經網絡,就可以使用較小的網絡來近似其完整的輸出分布。這在某種意義上類似于後驗近似。貝葉斯統計中用于後驗逼近的關鍵優化函數之一是Kulback-Leiber散度,自然也被用于此。

Albert

ALBERT模型是BERT的改進版,與最近其他State of the art的模型不同的是,這次是預訓練小模型,效果更好、參數更少。

它對BERT進行了三個改造 Three main changes of ALBert from Bert:

  1. 詞嵌入向量參數的因式分解 Factorized embedding parameterization
O(V * H) to O(V * E + E * H)
 如以ALBert_xxlarge為例,V=30000, H=4096, E=128
 那麼原先參數為V * H= 30000 * 4096 = 1.23億個參數
 現在則為V * E + E * H = 30000*128+128*4096 = 384萬 + 52萬 = 436萬,
 詞嵌入相關的參數變化前是變換後的28倍。
           
  1. 跨層參數共享 Cross-Layer Parameter Sharing
參數共享能顯著減少參數。共享可以分為全連接配接層、注意力層的參數共享;注意力層的參數對效果的減弱影響小一點。
           
  1. 段落連續性任務 Inter-sentence coherence loss.

    在ALBERT中,為了隻保留一緻性任務去除主題識别的影響,提出了一個新的任務 sentence-order prediction(SOP),SOP的正樣本和NSP的擷取方式是一樣的,負樣本把正樣本的順序反轉即可。SOP因為實在同一個文檔中選的,其隻關注句子的順序并沒有主題方面的影響。并且SOP能解決NSP的任務,但是NSP并不能解決SOP的任務,該任務的添加給最終的結果提升了一個點。

4. 移除dropout

除了上面提到的三個主要優化點,ALBERT的作者還發現一個很有意思的點,ALBERT在訓練了100w步之後,模型依舊沒有過拟合,于是乎作者果斷移除了dropout,沒想到對下遊任務的效果竟然有一定的提升。這也是業界第一次發現dropout對大規模的預訓練模型會造成負面影響。

總結:

ALBERT實際上是通過參數共享的方式降低了記憶體,預測階段還是需要和BERT一樣的時間,如果采用了xxlarge版本的ALBERT,那實際上預測速度會更慢。

參考:

https://blog.csdn.net/u012526436/article/details/101924049

https://baijiahao.baidu.com/s?id=1654588517875312379&wfr=spider&for=pc

中文預訓練模型下載下傳

中文版下載下傳位址

Base

https://storage.googleapis.com/albert_models/albert_base_zh.tar.gz

Large

https://storage.googleapis.com/albert_models/albert_large_zh.tar.gz

XLarge

https://storage.googleapis.com/albert_models/albert_xlarge_zh.tar.gz

Xxlarge

https://storage.googleapis.com/albert_models/albert_xxlarge_zh.tar.gz

ALBERT v2下載下傳位址

Base

[Tar File]:

https://storage.googleapis.com/albert_models/albert_base_v2.tar.gz

[TF-Hub]:

https://tfhub.dev/google/albert_base/2

Large

[Tar File]:

https://storage.googleapis.com/albert_models/albert_large_v2.tar.gz

[TF-Hub]:

https://tfhub.dev/google/albert_large/2

XLarge

[Tar File]:

https://storage.googleapis.com/albert_models/albert_xlarge_v2.tar.gz

[TF-Hub]:

https://tfhub.dev/google/albert_xlarge/2

Xxlarge

[Tar File]:

https://storage.googleapis.com/albert_models/albert_xxlarge_v2.tar.gz

[TF-Hub]:

https://tfhub.dev/google/albert_xxlarge/2

繼續閱讀