预训练综述
一、簡介
1.1、預訓練影響:
? ? ? ? ?ELMo/GPT/BERT預訓練模型的相繼提出,NLP找到了可以像計算機視覺那樣的遷移學習方法。NLP領域預訓練模型,采用自監督 學習方法,將大量無監督文本送入模型中進行學習,得到可通用的預訓練模型。NLP領域有大量的無監督學習數據。大量研究工作表明,大量的數據可以不斷提高模型的性能表現,與此同時壓縮模型參數也成為研究熱點,例如ALBERT,ELECTRA。預訓練和模型壓縮引導NLP將大量非監督文本充分利用起來,進行語言知識編碼,指導下游NLP任務。
1.2、預訓練模型效果好的原因:
1)Word2vec等詞向量模型訓練出來的都是靜態詞向量,同一個詞,在任何的上下文中,其向量表示是相同的,無法體現一個詞在 不同語境中的不同含義。
2)預訓練模型替代詞向量的關鍵在于。對上下文的詞提取符合其語境的詞表示,該詞表征向量為一個動態向量,同一詞輸入預訓練模型后,同一個詞的詞表征向量在兩個上下文中表征不同。
?1.3、常見的預訓練模型
?????目前常見的預訓練語言模型有:ELMO、GPT、BERT、BERT-www、ERNIE、XLNET、RoBERTa、ALBERT、ELECTRA
?
二、預訓練模型類型
2.1、預訓練任務分類
預訓練分為兩類自回歸語言模型和自編碼語言模型。
2.1.1、自回歸語言模型
????通過給定文本的上文,對當前字進行預測,訓練過程要求對數似然函數最大化,即:
代表模型:ELMo/GPT1.0/GPT2.0/XLNet
優點:該模型對文本序列聯合概率的密度估計進行建模,使得模型更適合一些生成類的NLP任務,這些任務在生成內容時從左到右,與自回歸模式天然匹配。
缺點:聯合模型按照文本序列從左到右進行計算,無法包含上下文信息的雙向特征。
2.1.2、自編碼語言模型性
????BERT系列的模型為自編碼語言模型,通過mask掉一些詞,通過上下文對該詞進行預測,使得預測概率最大化:
mt為1表示替換為[mask];H為Transformer等映射函數。本質為去噪自編碼模型,加入的[mask]為噪聲,模型對[mask]進行預測即為去噪。
優點:能夠利用上下文信息取得雙向的特征表示
缺點:引入了獨立性假設—每個[mask]之間是相互獨立的,這使得模型的聯合概率為有偏估計;由于[mask]的存在,使得預訓練階段和微調階段不匹配,難以直接用于生成任務。
三、預訓練模型結構簡介
3.1、ELMO
(https://arxiv.org/pdf/1802.05365.pdf)
3.1.1、ELMO簡介
ELMO典型的自回歸預訓練模型,包含兩個獨立的單項LSTM實現雙向語言模型進行回歸預訓練,不使用雙向LSTM進行編碼的原因是預訓練任務中,雙向模型將提前看到上下文表征而對預測結果造成影響。因此,ELMO在本質上屬于單向語言模型,因其只在一個方向上進行編碼表示,只是將其進行拼接。
3.1.2、ELMO特點
1)引入雙向語言模型,其實是2個單向語言模型(前向和后向)的集成,用共享詞向量來進行預訓練;
2)保存好預訓練的2層biLSTM,提取每層的詞表征用于下游任務
3.1.3、ELMO詞表征和任務表征
1)對于每一個字符,其每一層的ELMO表征均為詞向量與該層的雙向編碼表征拼接而成,即:
2)對任務而言,需要把ELMO表征整合為一個單獨的向量,最簡單的方式,只用最上層表征;一般用法,所有層ELMO表征加權和方式進行處理,即:
其中stask?為學習參數,歸一化權重因子,用于表征每層詞向量的重要性,ytask為縮放參數,具體模型放縮ELMO大小。
得到ELMO表征后,用于下游任務,ELMO微調預訓練模型部分是固定的,不參與后續訓練當中;可以采用1)ELMO表征與詞向量拼接,2)ELMO表征與下游模型輸出層拼接,3)ELMO模型中加入dropout,采用L2 loss提升模型
?
3.2、GPT/GPT2?
GPT(https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf)
GPT2(https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf)
3.2.1、GPT簡介
GPT為生成模式,與EMLO類似,是一個自回歸語言模型。與ELMO不同,采用多層Transform Decoder作為特征抽取,Transform的特征抽取能力一般優于LSTM。
3.2.2、GPT結構
???GPT是一個生成式的語言模型,采用MASK Multi-Head Attention避免預測當前詞會看見之后的詞,簡稱單向Transform。首次將Transform應用于預訓練,預測是將position-wise的前向反饋網絡輸出直接送入分類器進行預測。此外,GPT包含預訓練和微調兩個部分。
1)預訓練部分
與傳統的語言模型類似,優化前i-1個上下文預測當前詞u的似然函數:
K為上下文窗口,p(u)來源于多頭transform,Wp為位置嵌入矩陣
通過優化L1(u),獲取參數
3.2.3、微調部分,任務使用
??對于帶有標簽y的包含m個token的句子的監督數據[x1,...,xm],直接將其輸入到已經完成預訓練的模型中,然后利用最后一個位置的輸出對標簽進行預測:
hlm為多頭transform的最后一層輸出。
最大化似然函數:
左圖為GPT的結構,右圖為各任務使用所需的數據格式。
3.3.4、GPT2#
GPT2與GPT的大致模型框架和預訓練目標是一致的,而區別主要在于以下幾個方面:
- 其使用了更大的模型
- 使用了數量更大、質量更高、涵蓋范圍更廣的預訓練數據
- 采用了無監督多任務聯合訓練的方式,即對于輸入樣本,給予一個該樣本所屬的類別作為引導字符串,這使得該模型能夠同時對多項任務進行聯合訓練,并增強模型的泛化能力
?
3.4、BERT (https://arxiv.org/pdf/1810.04805.pdf)
3.4.1、BERT預訓練
BERT的特征抽取為雙向的Transformer,套用了Transform Encoder Block的結構,相比于GPT,僅僅從單向變為雙向,BERT無法適用于自回歸語言模型,提出了兩種預訓練任務來對模型進行預訓練。
3.4.2、MLM (Masked Language Model)
由于BERT需要通過上下文信息來預測中心詞,又不希望模型提前看見中心詞信息,故采用MLM預訓練方式—隨機從輸入語料上mask掉一些單詞,然后通過上下文預測該單詞,類似于完形填空任務。
Mask的Word piece比例及mask的原因
預訓練任務中,15%的Word piece會被mask,這15%中,80%會直接替換為[Mask],10%將其替換為其他任意單詞,10%保留原始token。
Mask采用方式原因:1)未100%mask原因,100%mask掉,在微調時,模型會有一些未見過的詞。2)加入10%隨機mask原因,a)Transform要保持對每個輸入token的分布式表示,否則模型會知道這個[mask]是token ‘hairy’;b)編碼器不知道哪些詞需要預測,哪些詞錯誤,需要學習每個token的表示向量。3)每batchsize只有15%單詞mask,性能開銷導致,雙向編碼器比單向編碼器訓練更慢。
3.4.3、NSP (Next Sequence Prediction)
????MLM任務不能解決句子關系判斷任務,需添加額外的Next Sequence Prediction任務—即判斷判斷句子B是否是句子A的下文,輸出為isNext或NotNext.
????訓練數據的生成方式是從平行語料中隨機抽取的連續兩句話,50%符合isNext關系,50%是NotNext關系,關系保存在[CLS]符號中。
3.4.4、輸入表示
BERT的輸入表征由3中Embedding求和而成:
3.4.5、BERT微調
1)對于情感分析單句分類任務,可以直接輸入單個句子,將[CLS]的輸出直接輸入到分類器中進行分類。
2)對于句子對任務,需用[SEP]分隔句子輸入到模型,同樣將[CLS]輸出到分類器中分類
3)對于問答任務,將問題與答案拼接輸入BERT,答案位置輸出向量二分,句子方向進行softmax
4)對于實體命名任務,對每個位置輸出進行分類即可,每個位置輸出作為特征輸入到CRF效果更好。
3.4.6、BERT優缺點
BERT優點:
1)與ELMo相比,BERT采用特征提取能力強并行能力好的Transform
2)ELMO與GPT均為單向語言模型,適應于生成模式,不利于上下文編碼抽取
3)BERT采用雙向Transform,利于上下文信息抽取
BERT缺點:
1)MLM任務預訓練過程采用[MASK]與微調過程不符合,采用雙向Transform,不能用于生成任務。
2)未考慮[MASK]之間相關性,是對語言模型聯合概率的有偏估計
3)由于最大長度的限制,適合句子級別和段落級別的任務,不適合文檔級別的任務。
4)適合語義理解任務,不適合語言生成任務
?
3.5、BERT-WWM(https://arxiv.org/pdf/1906.08101.pdf)
wwM(Whole Word Masking)整詞Mask,改變了原來預訓練階段的訓練樣本生成策略。原有的基于wordPiece的分詞方式將一個完整的詞切分為若干子詞,預訓練階段字詞被分開隨機mask。而www采取的措施是,一個完整的詞被mask,同屬于該詞的其他部分也會被mask,即全詞mask。(LTP分詞)
優點:
?
3.6、RoBERTa(https://arxiv.org/pdf/1907.11692.pdf)
較BERT無較大創新,改進點:
3.7、ERNIE(艾尼)1.0 (https://www.aclweb.org/anthology/P19-1139.pdf)
BERT MLM預訓練容易獲得字搭配級的信息,對于短語和實體層抽取能力弱。引入外部知識到預訓練模型中,提高知識驅動任務,典型的3類任務:
ERNIE(艾尼)2.0相比于1.0,主要采取了Multi-task-learning(同時學習多任務)以及continue-learning(不同任務組合學習)?詞級,結構級,語義級。
?
3.8、XLNET (https://arxiv.org/pdf/1906.08237.pdf)
XLNET針對自回歸語言模型單向編碼及BERT類自編碼語言模型的有偏估計缺點,提出了廣義的自回歸語言模型預訓練方法。XNET提出了一種排列語言模型(PLM),綜合了自回歸模型和自編碼模型的優點,避免其缺點。
3.8.1、排序語言模型
????位置編碼不變的情況下,輸入序列打亂,預測順序按原始位置編碼預測,上下文按照打亂的看。長度為T的序列,T!種分解方法,模型參數共享,PLM可以學到預測詞的所有上下文。最大化如下排序模型:
3.8.2、雙流注意力機制的引入
????打亂順序Transform不知道下一個需要預測的詞,為此引入雙流自注意機制。Two-stream self-attention有兩個分離的self-attention流:
????Query stream:輸入僅僅包含預測詞的位置信息,Key和Value為上下文中包含內容信息和位置信息的輸入,表明我們無法看見預測詞的內容信息,該信息是需要我們去預測的;
????Content Stream?主要為?Query Stream?提供其它詞的內容向量,其Query輸入為包含預測詞的內容信息和位置信息,Value和Key的輸入為選中上下文的位置信息和內容信息;
兩個信息流的輸出同樣又作為對應的下一層的雙信息流的輸入。而隨機排列機制實際上是在內部用Mask Attention的機制實現的。
?
3.9、ALBERT(https://openreview.net/pdf?id=H1eA7AEtvS)
模型參數變多到一定程度時,模型效果有提升,當復雜到一定程度,增加參數效果反而下降,會出現模型退化。ALBERT提出了兩種參數縮減技術,減少模型參數時,性能不會受到太大的影響。
3.9.1、對Embedding因式分解
????在BERT中,Embedding層和影藏層的維度大小一致,E=H。詞級別Embedding沒有上下文依賴,隱藏層需對上下文進行處理,維度應該高一些,因此采取了一個因子對Embedding層的矩陣進行壓縮。簡單而言,將one-hot映射到低維空間E,再從E映射到高維H;參數變化為:
O(V*H)=>O(V*E+E*H)
3.9.2、跨層參數共享
????ALBERT采用參數共享機制來提高參數利用率,即多層使用同一模塊,使得參數有效減少,參數共享對象為Transform中的feed-forward layer參數和self-attention中的參數。參數共享,模型性能在可接受范圍。
3.9.3、句間連貫性損失
????NSP對模型預訓練沒太大幫助,主要在于負例從不相關語料提取。顛倒負例兩段文本信息,強迫預訓練模型進行語義學習。
3.10?DistillBert (https://arxiv.org/pdf/1910.01108.pdf)
DistillBert是在bert的基礎上用知識蒸餾技術訓練出來的小型化bert。整體上來說這篇論文還是非常簡單的,只是引入了知識蒸餾技術來訓練一個小的bert。具體做法如下:
1)給定原始的bert-base作為teacher網絡。
2)在bert-base的基礎上將網絡層數減半(也就是從原來的12層減少到6層)。
3)利用teacher的軟標簽和teacher的隱層參數來訓練student網絡。
訓練時的損失函數定義為三種損失函數的線性和,三種損失函數分別為:
1)Lce。這是teacher網絡softmax層輸出的概率分布和student網絡softmax層輸出的概率分布的交叉熵(注:MLM任務的輸出)。
2)Lmlm。這是student網絡softmax層輸出的概率分布和真實的one-hot標簽的交叉熵
3)Lcos。這是student網絡隱層輸出和teacher網絡隱層輸出的余弦相似度值,在上面我們說student的網絡層數只有6層,teacher網絡的層數有12層,因此個人認為這里在計算該損失的時候是用student的第1層對應teacher的第2層,student的第2層對應teacher的第4層,以此類推。
作者對student的初始化也做了些工作,作者用teacher的參數來初始化student的網絡參數,做法和上面類似,用teacher的第2層初始化student的第1層,teacher的第4層初始化student的第2層。
3.11、ELECTRA(https://openreview.net/pdf?id=r1xMH1BtvB)
ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)提出新的預訓練模型和框架,把生成式的MLM(Masked language modle)預訓練任務替換為判別式的RTD(Replaces token detection)任務。ELECTRA不是掩蓋輸入,而從小的生成采樣的合理的替代令牌來替換部分輸入令牌從而破壞輸入。然后訓練一個判別模型,該模型預測損壞的輸入中的每個令牌是否被生成器樣本替換。
3.10.1、(RTD)Replaced Token Detection (替代token檢測)?
????訓練2個神經網絡模型,一個生成器G,和一個判別器D。每個神經網絡主要由一個編碼器構成,將輸入序列x=[x1,…,xn]映射為上下文表示h(x)=[h1,…,hn],?對于給定位置?t(僅僅為xt=[mask]),生成器通過?softmax?層輸出生成token的概率值:
其中?e?表示?token?嵌入。對于給定位置?t?,判別器預測?token是否為假
訓練生成器執行?MLM?任務,給定輸入?x=[x1,…,xn]?,MLM?首先選擇一組隨機位置( 1?到?n?之間的整數)遮蓋?m=[m1,m2…,mk],k=[0.15n]?,被選中的位置將會被?[MASK]?替換。本文將其稱為?xmask?=REPLACE(x,m,[mask])。通過用生成器樣本替換被遮蓋的令牌來創建一個損壞示例?xcorrupt?并訓練判別器預測?xcorrupt? ?中的哪些令牌與原始輸入?x?一致。模型輸入如下:
損失函數為:
優化目標:
3.10.2、模型擴展
Weight Sharing?建議生成器和判別器之間共享權重來提升預訓練的效率。如果兩者大小相同,可以直接共享所有權重,但是本文發現小型生成器會更加有效。因為?MLM?在學習這些表示方面特別有效:盡管判別器僅更新輸入中存在的令牌或由生成器采樣的令牌,但生成器在詞匯表上的softmax?會密集更新所有令牌嵌入。另一方面,共享所有編碼器權重幾乎沒有改善,同時帶來了要求生成器和判別器具有相同大小的重大缺點。
Smaller Generators?如果生成器和判別器的大小相同,則訓練?ELECTRA?每步所需的計算量約為僅使用?MLM?的訓練量的兩倍。
我們建議使用較小的生成器來減少這一因素。具體來說,我們通過減小層的大小并使其他超參數保持恒定來使模型更小。盡管如此,我們發現判別器大小的?1/4-1/2?的生成器的效果最佳。
?
3.10.3、ELECTRA提升速度原因
1)、masked(replaced) token選擇不一樣:
BERT隨機mask;ELECTRA訓練一個簡單的MLM,定向選擇token,判斷預測的詞是否被替代了
2)、訓練目標不一樣
????最終得到的是判別分類器,不必對完整的數據分布進行建模
完整數據分布建模:C-> Rd*|V|,二分分類器C->Rd*2。
?
3.11、Transformer-XL
為了幫助理解XLNet,本文對其核心框架Transformer-XL作一個解讀。本文發表在ACL2019上,論文想要解決的問題:如何賦予編碼器捕獲長距離依賴的能力。目前在自然語言處理領域,Transformer的編碼能力超越了RNN,但是對長距離依賴的建模能力仍然不足。在基于LSTM的模型中,為了建模長距離依賴,提出了門控機制和梯度裁剪,目前可以編碼的最長距離在200左右。在基于Transformer的模型中,允許詞之間直接建立聯系【self-attention】,能夠更好地捕獲長期依賴關系,但是還是有限制。
?
Transformer-XL提出原因
?
Transformer編碼固定長度的上下文,即將一個長的文本序列截斷為幾百個字符的固定長度片段(segment),然后分別編碼每個片段[1],片段之間沒有任何的信息交互。比如BERT,序列長度的極限一般在512。動機總結如下:
- Transformer無法建模超過固定長度的依賴關系,對長文本編碼效果差。
- Transformer把要處理的文本分割成等長的片段,通常不考慮句子(語義)邊界,導致上下文碎片化(context fragmentation)。通俗來講,一個完整的句子在分割后,一半在前面的片段,一半在后面的片段。
文章圍繞如何建模長距離依賴,提出Transformer-XL【XL是extra long的意思】:
- 提出片段級遞歸機制(segment-level recurrence mechanism),引入一個記憶(memory)模塊(類似于cache或cell),循環用來建模片段之間的聯系。
- 使得長距離依賴的建模成為可能;
- 使得片段之間產生交互,解決上下文碎片化問題。
- 提出相對位置編碼機制(relative position embedding scheme),代替絕對位置編碼。
- 在memory的循環計算過程中,避免時序混淆【見model部分】,位置編碼可重用。
小結一下,片段級遞歸機制為了解決編碼長距離依賴和上下文碎片化,相對位置編碼機制為了實現片段級遞歸機制而提出,解決可能出現的時序混淆問題。
參考:
https://www.cnblogs.com/sandwichnlp/p/11947627.html
https://zhuanlan.zhihu.com/p/76912493
https://zhuanlan.zhihu.com/p/89763176
https://zhuanlan.zhihu.com/p/90494415
https://www.cnblogs.com/neopenx/p/4370350.html(DA與DAE)
https://www.zhihu.com/question/354070608/answer/885907890?(ELECTRA和BERT區別)
https://blog.csdn.net/qq_28168421/article/details/83663318?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase(bert介紹)
https://zhuanlan.zhihu.com/p/70257427?(xlnet詳解)
https://zhuanlan.zhihu.com/p/87562926?(albert)
https://zhuanlan.zhihu.com/p/89522799?(DistillBert)
https://www.cnblogs.com/jiangxinyang/p/11715678.html??(DistillBert)
https://zhuanlan.zhihu.com/p/70745925?(transform-xl)
https://www.zhihu.com/question/354070608?(ELECTRA)
總結
- 上一篇: 使用 rr 进行debug
- 下一篇: SublimeText PackageC