BERT、ERNIE以及XLNet學習記錄


 主要是對

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding提出的BERT

清華和華為提出的ERNIE: Enhanced Language Representation with Informative Entities

百度提出的ERNIE: Enhanced Representation through Knowledge Integration

這三個模型的學習記錄

BERT  

看BERT之前先看https://www.cnblogs.com/dyl222/p/10888917.html  因為它所使用的特征抽取器是《Attention is all you need》中提出的Transformer

論文翻譯看:

https://zhuanlan.zhihu.com/p/52248160

BERT的具體解讀看:https://blog.csdn.net/yangfengling1023/article/details/84025313

BERT屬於一種兩階段的模型,第一階段是基於大規模無監督語料進行預訓練(pre-train)第二階段是結合具體的任務進行微調(fine-tuning),它最大的優勢是效果好,通過多層的Transformer從海量的無監督語料中所抽取出的語言學特征有很強的泛化性,對下游任務能夠起到很好的特征補充作用。

它最大的創新點在於它所提出的兩個新的預訓練任務:

1、Masked LM

Masked LM隨機的從輸入中遮罩一些Token,目標是只通過它的上下文去預測這些被遮罩Token,它能夠充分的利用上下文,和Bi-LSTM這種通過拼接來實現的弱雙向相比,它所實現的是真正的雙向。

在所有的實驗中,我們在每一個序列中隨機的遮蓋了15%的Token。

雖然這允許我們做雙向的預訓練模型,但是這種方法仍然有兩個弊端。第一個是這種方法會讓預訓練模型和微調階段不能相互匹配,因為[MASK]標記在微調階段中是不存在的。為了消除這個弊端,我們並不總是把遮蓋的Token用[MASK]表示,而是在訓練數據中對隨機產生的15%的Token用[MASK]表示,比如,在句子"my dog is hairy"中選擇"hairy",然后通過以下的方式產生標記:
* 並不總是用[MASK]替換選擇的Token,數據通過如下方式產生:
* 80%的情況下:把選擇的詞替換成[MASK],比如:"my dog is hairy" → "my dog is [MASK]"
* 10%的情況下替換選中的Token為隨機Token,比如:"my dog is hairy" → "my dog is apple"
* 10% 的情況下保持原Token不變,比如:"my dog is hairy" → "my dog is hairy"。

第二個弊端是使用一個MLM意味着每個batch中只有15%的標記會被預測,所以在預訓練的時候收斂需要更多步。但是和MLM帶來的巨大提升相比,這么做是值得的。

2.Next Sentence Prediction

訓練數據的正樣本是通過采樣同一個文檔中的兩個連續的句子,而負樣本是通過采用兩個不同的文檔的句子。該任務主要是希望能提高下游任務的效果。很多重要的下游任務如問答和自然語言推斷(NLI)是基於兩個句子之間的理解的,語言模型並不能直接捕獲到這種關系。為了訓練可以理解句子關系的模型,我們預訓練了一個可以從任何單語語料庫中輕松產生的二值化的下句預測任務,NSP其實包含了兩個子任務,主題預測與關系一致性預測,但是主題預測相比於關系一致性預測簡單太多了,並且在MLM任務中其實也有類型的效果。特別的,當為每個預訓練模型選擇句子A和句子B時,50%的情況B就是A的下一句,50%的情況下是從語料中隨機選擇的句子。比如:

輸入部分:

 輸入由三部分組成分別為word embedding、位置向量、以及段向量

我們在30000個詞上使用了WordPiece嵌入,把拆分的詞片段(word pieces)用"##"標注(譯者注:見圖中"playing"-"play ##ing")

每一句的句首使用了特殊的分類嵌入([CLS])。這個標記。在最終的隱藏層中(也就是轉換器的輸出)對應的是分類任務中序列標識的聚合表示。非分類任務中這一標記將被忽略。也就是在處理分類下游任務時選用[CLS]向量作為輸入,因為它所代表的是句向量

 句子對被打包在一起作為一個句子。我們用兩種方法區別他們,首先,我們把他們用特殊的標記([SEP])區分開,然后我們會給第一句的每一個標記添加一個學習到的句子 A 的嵌入,給第二句的每個標記添加一個學習到的句子 B 的嵌入
* 對於單個句子輸入我們只使用句子 A 的嵌入。

句子A的段向量輸入全為0,句子B的段向量輸入全為1

 BERT的優勢:

1)通過MLM實現的是真正的雙向,ELMO中使用的Bi-LSTM對正向和反向的表征進行拼接實現的只是一種弱雙向。

2)選用Transformer作為特征抽取器,相比於CNN能夠獲得更多的全局信息,相比於LSTM等RNN系列的特征抽取器,它能夠實現並行,同時還引入了多層,盡管NLP方面的多層不能簡單的和圖像方面的多層進行比較,但是這也是一大進步,在NLP方面引入了多層能夠抽取到更豐富的信息。

3)最大的優勢是它明確了如何對海量的無監督的語料進行利用的一個方向,通過pre-train所抽取出的語言學特征具有很強的泛化性,好比於圖像領域的image-net,只需在下游具體任務少量語料的基礎上進行fine-tuning就能夠取得很好的效果。

BERT的缺點:

它的Positional Embedding是絕對位置信息,想要通過Transformer通過絕對位置編碼得到相對位置信息,但是為了進行多頭的划分,Q,K,V都需要先進行一次線性變換,使得其無法得到相對位置信息,但是在有些任務中相對位置信息非常重要。

為了實現真正的雙向而創建的MLM,那些在pre-train階段的[MASK]標簽在fine-tune階段是不存在的,這會導致預訓練和微調之間的差異(這個問題在XLNet中得到了解決)。同時通過[MASK]進行掩蓋,它假設被掩蓋的token和未被掩蓋的token之間是相互獨立的,由於高階,遠程依賴在自然語言中的普遍存在,這樣做過度簡化了。

在訓練語言模型時過長的語料會被截斷,盡管BERT所使用的特征提取器Transformer通過self-attention能夠一步到位獲得遠程的依賴,但是由於訓練語言模型時選取的長度是固定,所以無法突破上下文的限制,獲得更長的依賴。(這個問題在《TRANSFORMER-XL: ATTENTIVE LANGUAGE MODELS BEYOND A FIXED-LENGTH CONTEXT》中得到了解決,同時XLnet預訓練語言模型也是使用的transformer-XL作為特征抽取器)

 

Bert中的一些細節記錄(編碼在tokenization中使用'utf-8',model中的一些參數初始化選用的為截斷式的正太分布(正太分布的隨機初始化以及He初始化適用於relu以及gelu類的激活函數),編碼器中的激活函數選用的為gelu(有關具體解析參照:https://blog.csdn.net/liruihongbob/article/details/86510622))

 

清華和華為的ERNIE

利用信息實體增強語言表達

論文具體解析見:https://cloud.tencent.com/developer/article/1438052

在大規模語料庫上預訓練的 BERT,它可以從純文本中很好地捕捉豐富的語義模式,經過微調后可以持續改善不同 NLP 任務的性能。因此,我們獲取 BERT 隱藏層表征后,可用於提升自己任務的性能。

但是,已有的預訓練語言模型很少考慮知識信息,具體而言即知識圖譜(knowledge graphs,KG),知識圖譜能夠提供豐富的結構化知識事實,以便進行更好的知識理解。簡而言之,預訓練語言模型只知道語言相關的「合理性」,它並不知道語言到底描述了什么,里面是不是有什么特殊的東西。

ERNIE的目標是:以知識圖譜中的多信息實體(informative entity)作為外部知識改善語言表征。

論文中的研究結合大規模語料庫和知識圖譜訓練出增強版的語言表征模型 (ERNIE),該模型可以同時充分利用詞匯、句法和知識信息。實驗結果表明 ERNIE 在多個知識驅動型任務上取得了極大改進,在其他 NLP 任務上的性能可以媲美當前最優的 BERT 模型。

但是如何把知識圖譜中的外部知識組合到語言表征模型中?

原文中所提到的兩個挑戰:

1)結構化的知識編碼:對於給定的文本,如何高效地抽取並編碼對應的知識圖譜事實是非常重要的,這些 KG 事實需要能用於語言表征模型。(即為如何從文本中高效的抽取並編碼能夠用於語言表征模型的知識圖譜事實)

2)異質信息融合:語言表征的預訓練過程和知識表征過程有很大的不同,它們會產生兩個獨立的向量空間。因此,如何設計一個特殊的預訓練目標,以融合詞匯、句法和知識信息就顯得非常重要了。(如何設計預訓練目標對知識表征和語言表征這兩個獨立的向量空間進行融合)

對於挑戰一,作者的解決方法是:

首先識別文本中的命名實體,然后將這些提到的實體與知識圖譜中的實體進行匹配。

研究者並不直接使用 KG 中基於圖的事實,相反他們通過《Translating Embeddings for Modeling Multi-relational Data》論文中提出的知識嵌入算法編碼 KG 的圖結構,並將多信息實體嵌入作為 ERNIE 的輸入。基於文本和知識圖譜的對齊,ERNIE 將知識模塊的實體表征整合到語義模塊的隱藏層中。

對於挑戰二,作者的解決方案是:

提出了一種知識型編碼器(K-Encoder)用於對知識表征和語言表征這兩個獨立的向量空間進行融合。

模型的整體結構如下:(下面的細節是自己結合論文的理解,能力有限,若理解不對希望各位大神能夠批評指正)

上圖中左半部分是ERNIE的架構,右半部分是對K-Encoder的具體解析

由上圖可知ERNIE 的整個模型架構由兩個堆疊的模塊構成,下面的部分T-Encoder和BERT中的Encoder結構相同,這里的Transformer使用了6層(N=6)。這一部分用於提取語言表征。

上面的部分K-Encoder用於對知識表征和語言表征這兩個獨立的向量空間進行融合。它由M層(論文中M=6)Aggregator堆疊而成。先看輸入部分

對於第一層左邊的Token Input是T-Encoder的輸出,右邊的Entity Input是通過《Translating Embeddings for Modeling Multi-relational Data》論文中方法抽取的知識表征,對於第二層到第M層則是上層的輸出。

然后經過:

其中MH-ATT為多頭自注意力機制

隨后看下面這一部分:

每個聚合器的這一部分都用於對語言表征和知識表征進行信息融合,具體的融合方法為:

其中使用的激活函數為GELU

對於沒有對應實體的部分采用:

ERNIE屬於一種三階段的模型,第一階段是通過TransE抽取知識信息(KG中記錄了很多三元組關系,(主體,關系,客體),開始對這三類的向量表示是隨機生成的,通過訓練使得主體向量+客體向量近似於關系向量),第二階段是pre-train融入知識信息的語言模型,第三階段是結合具體任務進行fine-tuning。

相比於BERT在pre-train階段ERNIE新增了一個任務denoising entity auto-encoder (dEA)(這個任務是自然而然應該想到的,Bert的MASK預測詞采用的就是降噪自編碼思想,對於多出的實體任務也應該降噪)

它隨機屏蔽了一些對齊的token-entity,然后要求系統根據對齊的令牌預測所有相應的實體。

考慮到softmax層的E的大小非常大,因此我們僅要求系統基於給定的實體序列(也就是每句中實體矩陣E僅有該句中所含的實體向量組成,而不是所有實體向量)而不是KG中的所有實體來預測實體。通過如下公式進行計算交叉熵損失函數:

 

注意這里e和經過線性變換后的w運行的點乘,每個token都和該句中的所有實體向量進行相似度運算,從而進行對齊。需要注意的點是,實體是和句中的實體頭進行對齊。

ERNIE最大的貢獻是在pre-train階段在語言表征中融入了知識表征,對於那些知識驅動型的任務效果有所提高,對於那些常用的NLP任務效果和BERT相當。

百度的ERNIE

相比於清華和華為提出的ERNIE,百度的ERNIE相比於BERT的改進非常小,是在BERT模型的基礎上進行改進的。

百度的ERNIE相比於BERT也是為了融入知識圖譜從而能夠讓模型學習到海量文本中蘊含的潛在知識。相比於BERT其改進的地方在於對Masked的改進,百度的ERNIE通過MLM掩蓋的不只是字,還有詞以及實體。例如:

  • Learned by BERT :哈 [mask] 濱是 [mask] 龍江的省會,[mask] 際冰 [mask] 文化名城。
  • Learned by ERNIE:[mask] [mask] [mask] 是黑龍江的省會,國際 [mask] [mask] 文化名城。

在 BERT 模型中,通過『哈』與『濱』的局部共現,即可判斷出『爾』字,模型沒有學習與『哈爾濱』相關的知識。而 ERNIE 通過學習詞與實體的表達,使模型能夠建模出『哈爾濱』與『黑龍江』的關系,學到『哈爾濱』是『黑龍江』的省會以及『哈爾濱』是個冰雪城市。

ERNIE 模型本身保持基於字特征輸入建模,使得模型在應用時不需要依賴其他信息,具備更強的通用性和可擴展性。相對詞特征輸入模型,字特征可建模字的組合語義,例如建模紅色,綠色,藍色等表示顏色的詞語時,通過相同字的語義組合學到詞之間的語義關系。

具體可參考:https://zhuanlan.zhihu.com/p/59436589

對於XLNet具體可以參考:https://zhuanlan.zhihu.com/p/70257427

先說下XLNet中提到的自回歸語言模型(Autoregressive LM)以及自編碼語言模型(Autoencoder LM)

根據上文內容預測下一個可能跟隨的單詞,就是常說的自左向右的語言模型任務,或者反過來也行,就是根據下文預測前面的單詞,這種類型的LM被稱為自回歸語言模型。例如RNNLM、GPT是根據上文預測下一個單詞,ELMO是即根據上文預測下一個詞也根據下文預測前面的詞,這些都是典型的自回歸語言模型。

缺點:無法同時應用上下文的信息。優點:相比於BERT使用的降噪自編碼語言模型不會出現預訓練和微調不相統一的問題。

自編碼語言模型的典型代表是BERT使用的MLM,Bert通過在輸入X中隨機Mask掉一部分單詞,然后預訓練過程的主要任務之一是根據上下文單詞來預測這些被Mask掉的單詞,那些被Mask掉的單詞就是在輸入側加入的所謂噪音。類似Bert這種預訓練模式,被稱為DAE LM。

它的優缺點正好和自回歸語言模型相反。缺點是:會出現預訓練和微調不相統一的問題。優點是:能夠同時應用上下文的信息。

XLNet它的思想是如何成功的融合上兩種語言模型的優點,即為如何不用Mask,通過自回歸語言模型的思想,而又能應用到上下文的信息,作者提出了一種Permutation LM

也就是XLNet主要是對預訓練階段的改進。看一下下圖:

結合上圖,例如[x1,x2,x3,x4]一條文本有這四個token組成,index從1開始,則對index的全排列中有[3,2,4,1]圖左上,[2,4,3,1]以及[1,4,2,3]和[4,3,1,2]

先明確當前任務是預測index為3也就是x3這個詞,使用的是自回歸語言模型的思想,也就是從左到右結合上文預測下一個詞,圖左上代表當前輸入為[x3,x2,x4,x1]從左到右x3在最左所以此次全排列的輸入無法獲得上下文信息,圖右上代表當前輸入為[x2,x4,x3,x1]從左到右x2以及x4都在x3的前面,這樣就能夠同時應用到上下文信息了。

上面講的是Permutation LM的基本思想,難點在於具體怎么做才能實現上述思想。首先,需要強調一點,盡管上面講的是把句子X的單詞排列組合后,再隨機抽取例子作為輸入,但是,實際上你是不能這么做的,因為Fine-tuning階段你不可能也去排列組合原始輸入。所以,就必須讓預訓練階段的輸入部分,看上去仍然是x1,x2,x3,x4這個輸入順序,但是可以在Transformer部分做些工作,來達成我們希望的目標。具體而言,XLNet采取了Attention掩碼的機制,你可以理解為,當前的輸入句子是X,要預測的單詞Ti是第i個單詞,前面1到i-1個單詞,在輸入部分觀察,並沒發生變化,該是誰還是誰。但是在Transformer內部,通過Attention掩碼,從X的輸入單詞里面,也就是Ti的上文和下文單詞中,隨機選擇i-1個,放到Ti的上文位置中,把其它單詞的輸入通過Attention掩碼隱藏掉,於是就能夠達成我們期望的目標(當然這個所謂放到Ti的上文位置,只是一種形象的說法,其實在內部,就是通過Attention Mask,把其它沒有被選到的單詞Mask掉,不讓它們在預測單詞Ti的時候發生作用,如此而已。看着就類似於把這些被選中的單詞放到了上文Context_before的位置了)。具體實現的時候,XLNet是用“雙流自注意力模型”實現的

雙流自注意力機制:一個是內容流自注意力,其實就是標准的Transformer的計算過程;主要是引入了Query流自注意力,這個是干嘛的呢?其實就是用來代替Bert的那個[Mask]標記的,因為XLNet希望拋掉[Mask]標記符號,但是比如知道上文單詞x1,x2,要預測單詞x3,此時在x3對應位置的Transformer最高層去預測這個單詞,但是輸入側不能看到要預測的單詞x3,Bert其實是直接引入[Mask]標記來覆蓋掉單詞x3的內容的,等於說[Mask]是個通用的占位符號。而XLNet因為要拋掉[Mask]標記,但是又不能看到x3的輸入,於是Query流,就直接忽略掉x3輸入了,只保留這個位置信息,用參數w來代表位置的embedding編碼。其實XLNet只是扔了表面的[Mask]占位符號,內部還是引入Query流來忽略掉被Mask的這個單詞。和Bert比,只是實現方式不同而已。(也就是XLNet只是和Bert實現Mask的方式不同,為了結合[MASK]這個標簽在fine-tuning階段不存在從而會導致訓練和預測不統一的問題,XLNet是通過Query流自注意力來實現遮罩的,因此它也無法解決因為遮罩而產生的遮罩部分與非遮罩部分完全獨立的這個假設問題)。

除了圖片上的內容,這里做進一步補充,白點是看不到的,從橫行看豎行,此時輸入的是[x3,x2,x4,x1]這個組合序列,x1在最右邊,x2,x3,x4都能被利用,所以上圖右部分的上邊那個矩陣,橫行的1對於豎行的1,2,3,4都能看到

把一個長序列進行全排列可想而知語料被擴充到了多大,因此並不是所有的全排列都會被應用,只是采樣一部分。

 

對Transformer-XL介紹

可以結合:https://wenku.baidu.com/view/97d228975ff7ba0d4a7302768e9951e79b8969eb.html

主要是為了解決在使用Transformer作為特征抽取器訓練語言模型時,由於固定了句子的最大長度,使得它無法獲得超出設定的句子最大長度的長期依賴問題。同時針對Transformer所使用的絕對位置編碼,它改為了相對位置編碼,具體原因和好處見下文。

模型的創新:

 

 

為什么要引用相對位置編碼,以及用相對位置編碼的好處

 

 相對位置編碼的具體介紹:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM