BERT相关模型汇总梳理
?PaperWeekly 原創 ·?作者|熊志偉
學校|清華大學
研究方向|自然語言處理
BERT 自 2018 年被提出以來,獲得了很大的成功和關注。基于此,學術界陸續提出了各類相關模型,以期對 BERT 進行改進。本文嘗試對此進行匯總和梳理。
MT-DNN
MT-DNN(Multi-Task DNN)在 Microsoft 于 2019 年發表的《Multi-Task Deep Neural Networks for Natural Language Understanding》中被提出。
模型結構如下:
模型整體是個 MTL(Multi-Task Learning)框架,底層的 Shared layers 復用了 BERT 的結構,為所有 task 所共有,頂層的 Task specific layers 則為單個 task 所獨有。總體來看,和 BERT 差異不大,區別僅在于 Pre-training 階段,MT-DNN 加入了 multi-task 進行訓練,期望學習到更好的 text representations(圖中的??)。
MTL 的優點:
標注數據較少的任務,可以利用其它相似任務的標注數據
降低針對特定任務的過擬合,起到正則化的作用
MT-DNN 引入了 4 中不同類型的 task,并相應設計了不同的 loss function:
Single-Sentence Classification:選用了 [CLS] 在??層對應的輸出,loss function 是交叉熵;
Text Similarity:選用了 [CLS] 在??層對應的輸出,loss function 是 MSE(建模為回歸問題);
Pairwise Text Classification:輸出后接了一個SAN(Stochastic Answer Network),loss function 是交叉熵;
Relevance Ranking:選用了 [CLS] 在??層對應的輸出,loss function 采用 LTR 的訓練范式。
MT-DNN 的 Pre-training 部分包括兩個階段:第一階段,采用 BERT 的訓練方式(MLM+NSP),學習 Shared layers 的參數;第二階段,采用 MTL 的方式,學習 Shared layers+Task specific layers 的參數,論文中此處采用的是 9 項 GLUE 的 task。詳細的訓練步驟描述如下:
論文中,作者采用了??作為 Shared layers 的初始化,并且證明,即使沒有 fine-tuning 階段,MT-DNN 的效果也要好于??。
總的來說,MT-DNN 相對于 BERT 的提升,來自于 MTL 和 special output module(輸出模塊和 loss function 設計更復雜)。
XLNet
XLNet 在 CMU+Google 于 2019 年發表的《XLNet: Generalized Autoregressive Pretraining for Language Understanding》中被提出。
論文中,作者提到了兩種 Pre-training 的方式:AR(autoregressive language modeling)、AE(denoising autoencoding)。前者的代表如 ELMo、GPT 系列,后者的代表則是 BERT。
兩種方式各有劣勢:
AR:只利用到單向 context 的信息(前向或后向)
AE(這里特指 BERT):Pre-training 階段引入的 [MASK] 占位符在 Fine-tuning 階段并不存在;同一個 sequence 如果有多個位置 [MASK],BERT 假定它們之間是獨立的,這與事實不符
為了解決 BERT 面臨的問題,XLNet 做了如下改進:
Pre-training的訓練目標調整為PLM (Permutation Language Modeling),具體實現時采用了 Two-Stream Self-Attention 機制,并對可能的排列進行了采樣
模型結構采用 Transformer-XL,解決 Transformer 對長文檔不友好的問題
采用更優質更大規模的語料
RoBERTa
RoBERTa 在華盛頓大學 +Facebook 于 2019 年發表的《RoBERTa: A Robustly Optimized BERT Pretraining Approach》中被提出。
RoBERTa 的改進點主要有:
1. 訓練時間更長:更大規模的訓練數據(16GB -> 160GB)、更大的 batch_size(256 -> 8K);
2. 去除 NSP 任務,輸入格式相應修改為 FULL-SENTENCES;
3. 輸入粒度:由 character-level BPE 改為 byte-level BPE;
4. masking 機制:由 static masking改為dynamic masking:
static masking:僅在數據預處理階段做一次隨機 mask,每條數據在每個 epoch 中的 mask 方式不變;
dynamic masking:每條數據在訓練時隨機mask,每個 epoch 中的 mask 方式不同。
SpanBERT
SpanBERT 在華盛頓大學+普林斯頓大學于 2019 年發表的《SpanBERT: Improving Pre-training by Representing and Predicting Spans》中被提出。
模型結構如下:
SpanBERT 的改進點主要有:
1. Span Masking:首先根據幾何分布??采樣出 span 的長度(大于 10 則重新采樣),然后根據均勻分布隨機選擇起始點,最后從起始點開始將 span 內的 token 進行 mask;注意,這個過程會進行多次,直到被 mask 的 token 數量達到閾值,如輸入序列的 15%;
2. Span Boundary Objective(SBO):對于 span 內的每一個 token,除了原始的 MLM 的 loss,再加 SBO 的 loss,即:
3. Single-Sequence Training:去掉 NSP 任務,用一個長句替代原來的兩個句子。
ALBERT
ALBERT 在 Google于 2019 年發表的《ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》中被提出。
ALBERT 的出發點在于,如果模型參數持續變大,會出現兩類問題:GPU/TPU OOM;模型效果退化。基于此,ALBERT 考慮減少模型的參數。
ALBERT 的改進點主要有:
1. Factorized embedding parameterization:之前的模型中,都會使??(E 是 vocabulary embedding size,H 是 hidden size),如此一來,H的提升會導致E的提升,從而使參數量呈平方級的增加。ALBERT 將 E 和 H 解綁,在 embedding 后再接一個??的矩陣,這樣可以保持 E 不變的情況下提升 H。在這種情況下,參數量由??降低至??,當??時,效果更加顯著;
2. Cross-layer parameter sharing:將 Transformer Encoder 中每一個 layer 的參數進行共享,也即,每個 layer 復用同一套參數;
3. Inter-sentence coherence loss:將 NSP 替換為 SOP(sentence-order prediction),即從同一個文檔中抽取兩個連續的句子作為正樣本,調換順序后作為負樣本(NSP 的負樣本來自兩個不同的文檔);
4. 采用更大規模的訓練數據并去除 Dropout(因為作者發現模型仍然沒有過擬合)。
ALBERT 和 BERT 在不同配置下的參數量如下:
ALBERT 和 BERT 在不同配置下的效果和訓練時間如下:
注意,這里的 Speedup 指的是訓練時間而非推理時間,因為 ALBERT 的優化點主要在于降低參數量,這可以加速訓練,但是模型層數并沒有變化,所以推理時間不受影響。
MASS
MASS 在 Microsoft 于 2019 年發表的《MASS: Masked Sequence to Sequence Pre-training for Language Generation》中被提出。
像 BERT 這類基于 Pre-training 和 fine-tuning 的模型在 NLU(Natural Language Understanding)任務中取得了很大的成功。與之相對應地,NLG(Natural Language Generation)任務如 neural machine translation(NMT)、text summarization 和 conversational response generation 等,經常面臨著訓練數據(paired data)匱乏的問題。
因此,在大量 unpaired data 上做 pre-training 然后在少量 paired data 上做 fine-tuning,對 NLU 任務而言是同樣有益的。然而,直接采用類似 BERT 的預訓練結構(僅用 encoder 或 decoder)是不可取的,因為 NLG 任務通常是基于 encoder-decoder 的框架。基于此,論文提出了一種適用于 NLG 任務的預訓練方式——MASS。
區別于單獨對 encoder 或 decoder 進行 pre-training,MASS 可以對二者進行聯合 pre-training,其結構如下:
整體基于 Transformer,Encoder 被 mask 的 token 是連續的,Decoder 將 Encoder 中未被 mask 的 token 進行 mask,預測 Encoder 中被 mask 的 token。
論文中提到,通過控制 Encoder 中 mask 的 token 長度 k,BERT 和 GPT 可看作是 MASS 的特例:
Pre-training:
由于 NMT 涉及跨語言,因此采用了 4 種語言的數據,并在 Encoder、Decoder 的 input 中給每個 token 加上了一個 language embedding
Encoder,mask 的 token 數量為序列長度的 50%,隨機選擇起點,mask 方式同 BERT(80% 替換為 [M],10%替換為其它隨機 token,10% 不變)
Decoder,移除被 mask 的 token,未 mask 的 token 依然保持它們的 positional encoding 不變
Fine-tuning:
同常規 Seq2Seq 任務
UNILM
UNILM 在 Microsoft 于 2019 發表的《Unified Language Model Pre-training for Natural Language Understanding and Generation》中被提出。
UNILM 是一種能同時適用于 NLU 和 NLG 任務的 Pre-training 框架,基于參數共享的 Transformer,對三種類型的無監督語言建模目標進行聯合預訓練:Unidirectional LM(left-to-right && right-to-left)、Bidirectional LM、Sequence-to-Sequence LM。預訓練后的 UNILM 可以進行 Fine-tuning(如有必要可添加 task-specific layers)以適應不同類型的下游任務。
模型結構如下:
Pre-training:
對于不同類型的 LM 目標,所使用的 segment embedding 不同,以示區分
對于所有類型的 LM 目標,預訓練采用的任務都是 cloze task,有所區分的是,不同的 LM 它們所能利用到的 context 不同:Unidirectional LM,context 是單側的 token(左側 or 右側);Bidirectional LM,context 是兩側的 token;Sequence-to-Sequence LM,context 是源序列的所有 token 以及目標序列的左側 token。不同的 context 是通過相應的 mask 矩陣來實現的
對于 Bidirectional LM,加入了 NSP 任務
對于 Sequence-to-Sequence LM,在 Pre-training 階段,源序列和目標序列都有可能被 mask
在一個 batch 中,1/3 的時間采用 Bidirectional LM,1/3 的時間采用 Sequence-to-Sequence LM,1/6 的時間采用 left-to-right Unidirectional LM,1/6 的時間采用 right-to-left Unidirectional LM
80% 的時間 mask 一個 token,20% 的時間 mask一個bigram 或 trigram
Fine-tuning:
對于 NLU 任務,同 BERT
對于 NLG 任務,若是 Seq2Seq 任務,則只 mask 目標序列中的 token
UNILM 的優勢:
統一的預訓練流程讓單個 Transformer 能為不同類型的語言模型使用共享的參數和架構,從而減輕對分開訓練和管理多個語言模型的需求
參數共享使得學習到的文本表征更通用,因為它們針對不同的語言建模目標(其中利用上下文的方式各不相同)進行了聯合優化,這能緩解在任意單個語言模型任務上的過擬合
除了在 NLU 任務上的應用,作為 Sequence-to-Sequence LM 使用的 UNILM 也使其能自然地用于 NLG 任務,比如抽象式摘要和問答
BART
BART在Facebook于2019年發表的《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》中被提出。
BART 采用了 Transformer 的 Seq2Seq 框架,和 MASS 類似,只不過它的 Pre-training 任務是:在 Encoder 端輸入被破壞的文本,在 Decoder 端復原原始文本。
模型結構如下:
破壞文本的方式有如下幾種(可組合使用):
Fine-tuning:
Sequence Classification Tasks:
Token Classification Tasks:將完整文檔輸入到 Encoder 和 Decoder 中,使用 Decoder 最上方的隱藏狀態作為每個 token 的表征,進行分類
Sequence Generation Tasks:同常規 Seq2Seq 任務
Machine Translation:新增了一個 Encoder 結構(隨機初始化),視作對預訓練 Encoder 的 embedding layer 的替換
參考文獻
[1] https://arxiv.org/pdf/1901.11504.pdf
[2] https://fyubang.com/2019/05/23/mt-dnn/
[3] https://zhuanlan.zhihu.com/p/103220246
[4]?https://zhpmatrix.github.io/2019/08/08/mt-dnn/
[5]?https://blog.csdn.net/magical_bubble/article/details/89517709
[6] https://arxiv.org/pdf/1906.08237.pdf
[7] https://medium.com/ai-academy-taiwan/2019-nlp%E6%9C%80%E5%BC%B7%E6%A8%A1%E5%9E%8B-xlnet-ac728b400de3
[8]?http://fancyerii.github.io/2019/06/30/xlnet-theory/
[9]?http://fancyerii.github.io/2019/06/30/xlnet-theory/
[10] https://arxiv.org/pdf/1907.11692.pdf
[11]?https://blog.csdn.net/ljp1919/article/details/100666563
[12]?https://www.jiqizhixin.com/articles/2019-09-05-6
[13] https://arxiv.org/pdf/1909.11942.pdf
[14]?https://cloud.tencent.com/developer/article/1682418
[15]?https://zhuanlan.zhihu.com/p/85221503
[16] https://arxiv.org/pdf/1907.10529.pdf
[17]?https://zhuanlan.zhihu.com/p/75893972
[18]?https://zhuanlan.zhihu.com/p/149707811
[19] https://arxiv.org/pdf/1905.02450.pdf
[20]?https://easyai.tech/blog/mass-bert-gpt/
[21]?https://zhuanlan.zhihu.com/p/67687640
[22]?https://blog.csdn.net/ljp1919/article/details/90312229
[23]?https://www.zhihu.com/question/324019899
[24] https://arxiv.org/pdf/1905.03197.pdf
[25]?https://zhuanlan.zhihu.com/p/68327602
[26]?https://www.jiqizhixin.com/articles/2019-12-09-16
[27]?https://blog.csdn.net/qq_42189083/article/details/104413886
[28]?https://cloud.tencent.com/developer/article/1580364
[29]?https://zhuanlan.zhihu.com/p/113380840
[30] https://arxiv.org/pdf/1910.13461.pdf
[31] https://www.mdeditor.tw/pl/pLHV
[32]?https://zhuanlan.zhihu.com/p/90173832
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的BERT相关模型汇总梳理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯音乐发布一季度财报 总营收78.
- 下一篇: 沙漠之鹰的坦克怎么画