前言
在之前寫過的《NLP的遊戲規則從此改寫?從word2vec, ELMo到BERT》一文中,介紹了從word2vec到ELMo再到BERT的發展路徑。而在BERT出現之後的這大半年的時間裡,模型預訓練的方法又被Google、Facebook、微軟、百度、OpenAI等極少數幾個玩得起遊戲的核心玩家反覆迭代了若干版,一次次的重新整理我們這些吃瓜群眾的案板上的瓜。
有沒有感覺出瓜速度太快以至於吃速跟不上?不用擔心,小編幫你們找來了這篇總結的恰到好處的文章,對ELMo以來的15個代表性的預訓練語言模型進行了多維度的對比和分析。尤其是近期找工作的小夥伴們注意啦,這篇文章裡面提出來的一些問題很適合作為面試考點(劃掉,交流點)噢~
Question List
Q1:從不同維度對比各【預訓練語言模型】? Q2:基於深度學習的NLP特徵抽取機制有哪些?各有哪些優缺點? Q3:自迴歸和自編碼語言模型各有什麼優缺點? Q4:單向模型的核心機制是怎樣的?有哪些缺點? Q5:Transformer內部機制的深入理解: 為什麼是縮放點積,而不是點積模型? 相較於加性模型,點積模型具備哪些優點? 多頭機制為什麼有效?
Q6-Q10:BERT核心機制探究 BERT為什麼如此有效? BERT存在哪些優缺點? BERT擅長處理哪些下游NLP任務? BERT基於“字輸入”還是“詞輸入”好?(對於中文任務) BERT為什麼不適用於自然語言生成任務(NLG)?
Q11-Q15:針對BERT原生模型的缺點,後續的BERT系列模型是: 如何改進【生成任務】的? 如何引入【知識】的? 如何引入【多工學習機制】的? 如何改進【mask策略】的? 如何進行【精細調參】的?
Q16:XLNet提出的背景是怎樣的? Q17:XLNet為何如此有效: 為什麼PLM可以實現雙向上下文的建模? 怎麼解決沒有目標(target)位置資訊的問題?
Q18:Transformer-XL怎麼實現對長文字建模?
下面本文將從以下幾個方面來對上述問題一一探討
一. 不同視角下的預訓練語言模型對比
二.預訓練語言模型的基礎:特徵抽取機制+語言模型的分類三.單向模型回顧+核心機制探究
四.BERT的核心機制探究
五.BERT系列模型進展介紹
六.XLNET的核心機制探究
七.預訓練語言模型的未來
一、不同視角下的預訓練語言模型對比
不同的特徵抽取機制 RNNs:ELMO/ULMFiT/SiATL; Transformer:GPT1.0/GPT2.0/BERT系列模型; Transformer-XL:XLNet;
不同的預訓練語言目標 自編碼(AutoEncode):BERT系列模型; 自迴歸(AutoRegression):單向模型(ELMO / ULMFiT / SiATL / GPT1.0 / GPT2.0)和XLNet;
BERT系列模型的改進 引入常識:ERNIE1.0 / ERNIE(THU) / ERNIE2.0(簡稱為“ERNIE系列”); 引入多工學習:MTDNN/ERNIE2.0; 基於生成任務的改進:MASS/UNILM; 不同的mask策略:WWM/ERNIE系列/SpanBERT; 精細調參:RoBERTa;
特徵表示(是否能表示上下文) 單向特徵表示:單向模型(ELMO/ULMFiT/SiATL/GPT1.0/GPT2.0); 雙向特徵表示:BERT系列模型+XLNet;
二、預訓練語言模型的基礎:特徵抽取機制+語言模型的分類
長距離依賴建模能力:Transformer-XL > Transformer > RNNs > CNNs
MLP:不考慮序列(位置)資訊,不能處理變長序列,如NNLM和word2vec; CNNs:考慮序列(位置)資訊,不能處理長距離依賴,聚焦於n-gram提取,pooling操作會導致序列(位置)資訊丟失; RNNs:天然適合處理序列(位置)資訊,但仍不能處理長距離依賴(由於BPTT導致的梯度消失等問題),故又稱之為“較長的短期記憶單元(LSTM)”; Transformer/Transformer-XL:self-attention解決長距離依賴,無位置偏差;
2)前饋/迴圈網路 or 序列/平行計算
MLP/CNNs/Transformer:前饋/並行 RNNs/ Transformer-XL:迴圈/序列:
3)計算時間複雜度(序列長度n,embedding size為d,filter大小k)
CNNs: RNNs: Self Attention:
優點: 文字序列聯合機率的密度估計,即為傳統的語言模型,天然適合處理自然生成任務;
缺點: 聯合機率按照文字序列從左至右分解(順序拆解),無法透過上下文資訊進行雙向特徵表徵;
代表模型:ELMO/GPT1.0/GPT2.0; 改進:XLNet將傳統的自迴歸語言模型進行推廣,將順序拆解變為隨機拆解(排列語言模型),產生上下文相關的雙向特徵表示;
2)自編碼語言模型
優點:本質為降噪自編碼特徵表示,透過引入噪聲[MASK]構建MLM,獲取上下文相關的雙向特徵表示; 缺點:引入獨立性假設,為聯合機率的有偏估計,沒有考慮預測[MASK]之間的相關性 不適合直接處理生成任務,MLM預訓練目標的設定造成預訓練過程和生成過程不一致; 預訓練時的[MASK]噪聲在finetune階段不會出現,造成兩階段不匹配問題;
代表模型:BERT系列模型;
三、單向模型回顧+核心機制探究
要點: 引入雙向語言模型,其實是2個單向語言模型(前向和後向)的整合; 透過儲存預訓練好的2層biLSTM,透過特徵整合或finetune應用於下游任務;
缺點: 本質上為自迴歸語言模型,只能獲取單向的特徵表示,不能同時獲取上下文表示; LSTM不能解決長距離依賴。
為什麼不能用biLSTM構建雙向語言模型? 不能採取2層biLSTM同時進行特徵抽取構建雙向語言模型,否則會出現標籤洩漏的問題;因此ELMO前向和後向的LSTM引數獨立,共享詞向量,獨立構建語言模型;
三階段訓練:LM預訓練+精調特定任務LM+精調特定分類任務; 特徵抽取:3層AWD-LSTM; 精調特定分類任務:逐層解凍;
二階段訓練:LM預訓練+特定任務精調分類任務(引入LM作為輔助目標,輔助目標對於小資料有用,與GPT相反);
- 特徵抽取:LSTM+self-attention;精調特定分類任務:逐層解凍; 都透過一些技巧解決finetune過程中的災難性遺忘問題:如果預訓練用的無監督資料和任務資料所在領域不同,逐層解凍帶來的效果更明顯[9];
GPT1.0[10]要點: 採用Transformer進行特徵抽取,首次將Transformer應用於預訓練語言模型; finetune階段引入語言模型輔助目標(輔助目標對於大資料集有用,小資料反而有所下降,與SiATL相反),解決finetune過程中的災難性遺忘; 預訓練和finetune一致,統一二階段框架;
GPT2.0[11]要點: 沒有針對特定模型的精調流程:GPT2.0認為預訓練中已包含很多特定任務所需的資訊。 生成任務取得很好效果,使用覆蓋更廣、質量更高的資料;
缺點: 依然為單向自迴歸語言模型,無法獲取上下文相關的特徵表示;
四、BERT核心機制探究
為什麼是縮放點積,而不是點積模型? 當輸入資訊的維度 d 比較高,點積模型的值通常有比較大方差,從而導致 softmax 函式的梯度會比較小。因此,縮放點積模型可以較好地解決這一問題。
為什麼是雙線性點積模型(經過線性變換Q K)? 雙線性點積模型,引入非對稱性,更具健壯性(Attention mask對角元素值不一定是最大的,也就是說當前位置對自身的注意力得分不一定最高)。
相較於加性模型,點積模型具備哪些優點? 常用的Attention機制為加性模型和點積模型,理論上加性模型和點積模型的複雜度差不多,但是點積模型在實現上可以更好地利用矩陣乘積,從而計算效率更高(實際上,隨著維度d的增大,加性模型會明顯好於點積模型)。
多頭機制為什麼有效? 類似於CNN中透過多通道機制進行特徵選擇; Transformer中先透過切頭(spilt)再分別進行Scaled Dot-Product Attention,可以使進行點積計算的維度d不大(防止梯度消失),同時縮小attention mask矩陣。
FFN 將每個位置的Multi-Head Attention結果對映到一個更大維度的特徵空間,然後使用ReLU引入非線性進行篩選,最後恢復回原始維度。 Transformer在拋棄了 LSTM 結構後,FFN 中的 ReLU成為了一個主要的提供非線性變換的單元。
將Positional Embedding改為Positional Encoding,主要的區別在於Positional Encoding是用公式表達的、不可學習的,而Positional Embedding是可學習的(如BERT),兩種方案的訓練速度和模型精度差異不大;但是Positional Embedding位置編碼範圍是固定的,而Positional Encoding編碼範圍是不受限制的。
為什麼引入 和 建模Positional Encoding?
引入 和 是為了使模型實現對相對位置的學習,兩個位置 pos 和 pos+k 的位置編碼是固定間距k的線性變化: 可以證明:間隔為k的任意兩個位置編碼的歐式空間距離是恆等的,只與k有關。
引入Masked Language Model(MLM)預訓練目標,能夠獲取上下文相關的雙向特徵表示; 引入Next Sentence Prediction(NSP)預訓練目標,擅長處理句子或段落的匹配任務; 引入強大的特徵抽取機制Transformer(多種機制並存): Multi-Head self attention:多頭機制類似於“多通道”特徵抽取,self attention透過attention mask動態編碼變長序列,解決長距離依賴(無位置偏差)、可平行計算; Feed-forward :在位置維度計算非線性層級特徵; Layer Norm & Residuals:加速訓練,使“深度”網路更加健壯;
引入大規模、高質量的文字資料;
Q7:BERT存在哪些優缺點?
優點:能夠獲取上下文相關的雙向特徵表示; 缺點: 生成任務表現不佳:預訓練過程和生成過程的不一致,導致在生成任務上效果不佳; 採取獨立性假設:沒有考慮預測[MASK]之間的相關性,是對語言模型聯合機率的有偏估計(不是密度估計); - 輸入噪聲[MASK],造成預訓練-精調兩階段之間的差異;
無法文件級別的NLP任務,只適合於句子和段落級別的任務;
1. 適合句子和段落級別的任務,不適用於文件級別的任務;
Q9:BERT基於“字輸入”還是“詞輸入”好?(對於中文任務)
五、BERT系列模型進展介紹
這一部分介紹一些模型,它們均是對BERT原生模型在一些方向的改進。
統一預訓練框架:透過類似的Seq2Seq框架,在預訓練階段統一了BERT和LM模型; Encoder中理解unmasked tokens;Decoder中需要預測連續的[mask]tokens,獲取更多的語言資訊;Decoder從Encoder中抽取更多資訊; 當k=1或者n時,MASS的機率形式分別和BERT中的MLM以及GPT中標準的LM一致(k為mask的連續片段長度))
統一預訓練框架:和直接從mask矩陣的角度統一BERT和LM; 3個Attention Mask矩陣:LM、MLM、Seq2Seq LM; 注意:UNILM中的LM並不是傳統的LM模型,仍然是透過引入[MASK]實現的;
Q12:針對BERT原生模型,後續的BERT系列模型是如何引入【知識】的?
在預訓練階段引入知識(實際是預先識別出的實體),引入3種[MASK]策略預測: Basic-Level Masking:跟BERT一樣,對subword進行mask,無法獲取高層次語義; Phrase-Level Masking:mask連續短語; Entity-Level Masking:mask實體;
基於BERT預訓練原生模型,將文字中的實體對齊到外部的知識圖譜,並透過知識嵌入得到實體向量作為ERNIE的輸入; 由於語言表徵的預訓練過程和知識表徵過程有很大的不同,會產生兩個獨立的向量空間。為解決上述問題,在有實體輸入的位置,將實體向量和文字表示透過非線性變換進行融合,以融合詞彙、句法和知識資訊; - 引入改進的預訓練目標 Denoising entity auto-encoder (DEA):要求模型能夠根據給定的實體序列和文字序列來預測對應的實體;
Q13:針對BERT原生模型,後續的BERT系列模型是如何引入【多工學習機制】的?
1)MTDNN(微軟)[20]:在下游任務中引入多工學習機制
MTDNN是在下游任務引入多工機制的,而ERNIE 2.0 是在預訓練引入多工學習(與先驗知識庫進行互動),使模型能夠從不同的任務中學到更多的語言知識。 主要包含3個方面的任務: word-aware 任務:捕捉詞彙層面的資訊; structure-aware 任務:捕捉句法層面的資訊; semantic-aware 任務:捕捉語義方面的資訊;
主要的方式是構建增量學習(後續可以不斷引入更多的任務)模型,透過多工學習持續更新預訓練模型,這種連續交替的學習正規化不會使模型忘記之前學到的語言知識。 - 將3大類任務的若干個子任務一起用於訓練,引入新的任務時會將繼續引入之前的任務,防止忘記之前已經學到的知識,具體是一個逐漸增加任務數量的過程[22]:
(task1)->(task1,task2)->(task1,task2,task3)->…->(task1,task2,…,taskN),
- 將3大類任務的若干個子任務一起用於訓練,引入新的任務時會將繼續引入之前的任務,防止忘記之前已經學到的知識,具體是一個逐漸增加任務數量的過程[22]:
Q14:針對BERT原生模型,後續的BERT系列模型是如何改進【mask策略】的?
原生BERT模型:按照subword維度進行mask,然後進行預測; BERT WWM(Google):按照whole word維度進行mask,然後進行預測; ERNIE等系列:引入外部知識,按照entity維度進行mask,然後進行預測; SpanBert:不需要按照先驗的詞/實體/短語等邊界資訊進行mask,而是採取隨機mask: 採用Span Masking:根據幾何分佈,隨機選擇一段空間長度,之後再根據均勻分佈隨機選擇起始位置,最後按照長度mask;透過取樣,平均被遮蓋長度是3.8 個詞的長度; 引入Span Boundary Objective:新的預訓練目標旨在使被mask的Span 邊界的詞向量能學習到 Span中被mask的部分;新的預訓練目標和MLM一起使用;
注意:BERT WWM、ERNIE等系列、SpanBERT旨在隱式地學習預測詞(mask部分本身的強相關性)之間的關係[23],而在 XLNet 中,是透過 PLM 加上自迴歸方式來顯式地學習預測詞之間關係;
Q15:針對BERT原生模型,後續的BERT系列模型是如何進行【精細調參】的?
RoBERTa(FaceBook)[24]
丟棄NSP,效果更好; 動態改變mask策略,把資料複製10份,然後統一進行隨機mask; 對學習率的峰值和warm-up更新步數作出調整; 在更長的序列上訓練:不對序列進行截短,使用全長度序列;
六、XLNet的核心機制探究
在BERT系列模型後,Google釋出的XLNet在問答、文字分類、自然語言理解等任務上都大幅超越BERT;XLNet的提出是對標準語言模型(自迴歸)的一個復興[25],提出一個框架來連線語言建模方法和預訓練方法。
Q16:XLNet[26]提出的背景是怎樣的?
對於ELMO、GPT等預訓練模型都是基於傳統的語言模型(自迴歸語言模型AR),自迴歸語言模型天然適合處理生成任務,但是無法對雙向上下文進行表徵,因此人們反而轉向自編碼思想的研究(如BERT系列模型); 自編碼語言模型(AE)雖然可以實現雙向上下文進行表徵,但是: BERT系列模型引入獨立性假設,沒有考慮預測[MASK]之間的相關性; MLM預訓練目標的設定造成預訓練過程和生成過程不一致; 預訓練時的[MASK]噪聲在finetune階段不會出現,造成兩階段不匹配問題;
有什麼辦法能構建一個模型使得同時具有AR和AE的優點並且沒有它們缺點呢?
Q17:XLNet為何如此有效:核心機制分析
1)排列語言模型(Permutation LM,PLM)
- 為什麼PLM可以實現雙向上下文的建模?
PLM的本質就是LM聯合機率的多種分解機制的體現; 將LM的順序拆解推廣到隨機拆解,但是需要保留每個詞的原始位置資訊(PLM只是語言模型建模方式的因式分解/排列,並不是詞的位置資訊的重新排列!) 如果遍歷 ?! 種分解方法,並且模型引數是共享的,PLM就一定可以學習到各種雙向上下文;換句話說,當我們把所有可能的?! 排列都考慮到的時候,對於預測詞的所有上下文就都可以學習到了! 由於遍歷 ?! 種路徑計算量非常大(對於10個詞的句子,10!=3628800)。因此實際只能隨機的取樣?!裡的部分排列,並求期望;
2)Two-Stream Self-Attention
怎麼解決沒有目標(target)位置資訊的問題?
對於沒有目標位置資訊的問題,XLNet 引入了Two-Stream Self-Attention:
Query 流就為了預測當前詞,只包含位置資訊,不包含詞的內容資訊; Content 流主要為 Query 流提供其它詞的內容向量,包含位置資訊和內容資訊;
3) 融入Transformer-XL的優點(具體見Q18)
Q18:Transformer-XL[28]怎麼實現對長文字建模?
BERT(Transformer)的最大輸入長度為512,那麼怎麼對文件級別的文字建模? vanilla model進行Segment,但是會存在上下文碎片化的問題(無法對連續文件的語義資訊進行建模),同時推斷時需要重複計算,因此推斷速度會很慢;
Transformer-XL改進 對於每一個segment都應該具有不同的位置編碼,因此Transformer-XL採取了相對位置編碼; 前一個segment計算的representation被修復並快取,以便在模型處理下一個新的segment時作為擴充套件上下文resume; 最大可能依賴關係長度增加了N倍,其中N表示網路的深度; 解決了上下文碎片問題,為新段前面的token提供了必要的上下文; 由於不需要重複計算,Transformer-XL在語言建模任務的評估期間比vanilla Transformer快1800+倍; 引入recurrence mechanism(不採用BPTT方式求導): 引入相對位置編碼方案:
七、預訓練語言模型的未來
上述的【預訓練語言模型】主要從2大方面進行介紹:一是總的對比;二是分別介紹單向語言模型、BERT系列模型、XLNet模型。
復興語言模型:進一步改進語言模型目標,不斷突破模型的上界; 大資料、大算力:將大資料、大算力推到極致; 更快的推斷:輕量級模型是否有可能達到SOTA效果? 引入更豐富的知識資訊,更精細的調參,更有價值的MASK策略; 統一條件生成任務框架,如基於XLNet統一編碼和解碼任務,同時可考慮更快的解碼方式;
參考文獻
[1] NLP將迎來黃金十年 https://www.msra.cn/zh-cn/news/executivebylines/tech-bylines-nlp
[2] a review of the recent history of nlp
[3] AIS:ACL2019進展報告
[4] ACL 主席周明:一起擁抱 ACL 和 NLP 的光明未來
[5] 自然語言處理中的語言模型預訓練方法 https://www.jiqizhixin.com/articles/2018-10-22-3
[6] ELMO:Deep contextualized word representations
[7] ULMFiT:Universal Language Model Fine-tuning)
[8] SiATL:An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models
[9] BERT時代與後時代的NLP https://zhuanlan.zhihu.com/p/66676144
[10] GPT:Improving Language Understanding by Generative Pre-Training
[11] GPT2.0:Language Models are Unsupervised Multitask Learners
[12] Transformer:Attention is all you need
[13] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[14] Bert時代的創新(應用篇):Bert在NLP各領域的應用進展 https://zhuanlan.zhihu.com/p/68446772
[15] MASS: Masked Sequence to Sequence Pre-training for Language Generation
[16] UNILM:Unified Language Model Pre-training for Natural Language Understanding and Generation
[17] ERNIE: Enhanced Representation through Knowledge Integration
[18] ERNIE: Enhanced Language Representation with Information Entities
[19] nndl:神經網路與深度學習
[20] MT-DNN:Multi-Task Deep Neural Net for NLU
[21] ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FOR LANGUAGE UNDERSTANDING
[22] 陳凱:https://www.zhihu.com/question/337827682/answer/768908184
[23] SpanBert:對 Bert 預訓練的一次深度探索
[24] RoBERTa: A Robustly Optimized BERT Pretraining Approach
[25] ab他們創造了橫掃NLP的XLNet:專訪CMU博士楊植麟
[26] XLnet: Generalized Autoregressive Pretraining for Language Understanding
[27] Neural autoregressive distribution estimation
[28] Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
原文連結
https://zhuanlan.zhihu.com/p/76912493