天天看點

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

文章目錄

    • 一.文本的表示方法
      • 基于one-hot的詞向量
    • 二.基于詞向量的固定表征方法(詞向量模型)
      • 2.1 N-gram模型
      • 2.2 NNLM
      • 2.3 word2vec
        • CBoW
        • Skip-gram
        • 層次Softmax
        • 負采樣
    • 三.基于詞向量的動态表征方法(預訓練語言模型)
      • 3.1 什麼是預訓練語言模型
      • 3.2 預訓練語言模型的優點
      • 3.3 預訓練語言模型的分類
        • 自回歸語言模型
        • 自編碼語言模型
        • 排列語言模型
      • 3.4 幾種重要的預訓練模型介紹
        • 1. ELMO
        • 2. GPT
        • 3. BERT
          • Task 1: MLM
          • Task 2: NSP
          • BERT的缺點
        • 4. wwm-BERT
        • 5. ERNIE
        • 6. XLNET
          • Two-Stream Self-Attention
          • Transformer-XL

一.文本的表示方法

将一篇自然語言類文本用數學語言表示的方法有一下幾種:

  • 基于one-hot、tf-idf、textrank
  • 基于詞向量的固定表征:word2vec、fastText、glove
  • 基于詞向量的動态表征:ELMO、GPT、BERT

基于one-hot的詞向量

one-hot向量是最簡單的詞向量表達方法。首先,建構一個輸入文本中出現的所有詞的詞表,對每個詞進行編号,假設詞表的長度為n,則對于每一個詞的表征向量均為一個n維向量,且隻在其對應位置上的值為1,其他位置都是0,這就是one-hot形式的詞向量,如下圖所示:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

one-hot向量将每個單詞表示為完全獨立的實體,這樣的表征方法主要有以下幾個問題:

  1. 有序性問題:它無法反映文本的有序性。因為語言并不是一個完全無序的随機序列。比如說,一個字之後隻有接特定的字還能組成一個有意義的詞,特定的一系列詞按特定的順序組合在一起才能組成一個有意義的句子。
  2. 語義鴻溝:其無法通過詞向量來衡量相關詞之間的距離關系,即這樣的表征方法無法反映詞之間的相似程度,因為任意兩個向量的距離是相同的。
  3. 次元災難:高維情形下将導緻資料樣本稀疏,距離計算困難,這對下遊模型的負擔是很重的。

二.基于詞向量的固定表征方法(詞向量模型)

由于one-hot形式的詞向量有許多問題,是以語言模型被提了出來,最初的語言模型是N-gram模型及NNLM。

2.1 N-gram模型

語言模型想要解決的問題是求一段文本序列在某種語言下出現的機率。這個問題可以通過計算每個候選句作為答案的機率,然後選取機率最大的文本作為答案來解決。

統計語言模型給出了上述問題的一個基本解決架構。對于一段文本序列

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

要求出一段文本的聯合機率,僅需要計算出每個詞或者每段文本在給定previous words下的條件機率,由于其巨大的參數空間(或說過長的上文文本),這樣一個原始的模型在實際中并沒有什麼用,比如文中的詞與文檔開頭的詞并沒有什麼相關性。是以更多的是僅用之前的n個文本來計算目前文本的條件機率,即我們常說的N-gram模型:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

當假設一個詞的出現不依賴于其他任何詞時,稱為unigram;當一個詞的出現依賴于上一個詞時,稱為bigram。可以用最大似然法去求解Ngram模型的參數,即等價于去統計每個Ngram的條件詞頻。事實上,由于模型複雜度和預測精度的限制,很少會考慮N>3的模型。

2.2 NNLM

鑒于Ngram等模型的不足,2003年,Bengio等人提出了NNLM模型,NNLM模型的基本思想可以概括如下:

  1. 假定詞表中的每一個word都對應着一個連續的特征向量;
  2. 假定一個連續平滑的機率模型,輸入一段詞向量的序列,可以輸出這段序列的聯合機率;
  3. 同時學習詞向量的權重和Ngram機率模型裡的參數。

值得注意的一點是,這裡的詞向量也是要學習的參數,也就是說詞向量是在訓練的過程中自動生成的。在03年的論文裡,Bengio等人采用了一個簡單的前向回報神經網絡 f ( w t − n + 1 , . . . , w t ) f(w_{t−n+1},...,w_t) f(wt−n+1​,...,wt​)來拟合一個詞序列的條件機率 p ( w t ∣ w 1 , w 2 , . . . , w t − 1 ) p(w_t|w_1,w_2,...,w_{t−1}) p(wt​∣w1​,w2​,...,wt−1​)。整個模型的網絡結構為一個三層神經網絡。第一層為映射層,第二層為隐藏層,第三層為輸出層見下圖:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

這個模型解決了兩個問題:

  1. 統計語言模型裡關注的條件機率 p ( w t ∣ c o n t e x t ) p(w_t|context) p(wt​∣context)的計算
  2. 向量空間模型裡關注的詞向量的表達

但NNLM模型仍然存在一系列問題:

  1. 由于NNLM模型使用的是全連接配接神經網絡,是以隻能處理定長的序列
  2. 巨大的參數空間,使NNLM的訓練過程太慢了,需要一些提速手段

2.3 word2vec

NNLM模型由于有上述的兩個問題,是以在實際使用過程中效果不佳,于是許多人提出了改進方案。首先,針對第一個問題,Mikolov等人在2010年提出了一種RNNLM模型,用遞歸神經網絡代替原始模型裡的前向回報神經網絡,并将Embedding層與RNN裡的隐藏層合并,進而解決了變長序列的問題。對于第二個問題,同樣是Mikolov,他提出了一個計算詞向量的工具,大大增加了NNLM模型的效率,這就是word2vec。

word2vec主要内容包括兩個模型 + 兩個提速手段,兩個模型分别是CBoW(Continues Bag-of-Words Model)和Skip-gram,兩個提速手段分别是層次Softmax(Hierarchical Softmax)和負采樣(Nagative Sampling)。使用層次Softmax和負采樣的原因是,在NNLM中每當計算一個詞的機率都要對詞典裡的V個詞計算相似度,然後進行歸一化,這使得計算過程的效率非常低,是以有必要使用一些提速手段。

CBoW

CBoW與之前的NNLM非常相似,簡單概括其思路就是:輸入中間詞前後共 C C C個詞,預測中間詞,在這個過程中訓練出我們需要的詞向量矩陣。其模型結構如下圖所示:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

CBoW的計算過程:

  • 圖中 [ x 1 k , . . . , x C k ] [x_{1k},...,x_{Ck}] [x1k​,...,xCk​]表示第 k k k個中心詞的前後 C C C個上下文的 one-hot 向量
  • 将 one-hot 向量輸入存放詞向量的矩陣 W V × N W_{V×N} WV×N​進行查表, V V V為詞表的大小, N N N為詞向量的次元
  • 将查表得到的上下文向量直接進行求和,再通過一個 N × V N×V N×V的矩陣映射到輸出層

Skip-gram

Skip-gram的思路是:輸入中間詞,預測中間詞的上下文 C C C個詞,訓練出我們需要的詞向量矩陣。

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

層次Softmax

Hierarchical Softmax是word2vec中的一項關鍵技術,簡單來說,其通過構造一個Huffman樹,将複雜的歸一化機率問題轉化為一系列二分類的條件機率相乘的形式。

負采樣

由于訓練詞向量模型的目标不是為了得到一個多麼精準的語言模型,而是為了獲得它的副産物——詞向量。是以要做到的不是在幾萬幾十萬個token中艱難計算softmax獲得最優的那個詞(就是預測的對于給定詞的下一詞),而隻需能做到在幾個詞中找到對的那個詞就行,這幾個詞包括一個正例(即直接給定的下一詞),和随機産生的噪聲詞(采樣抽取的幾個負例),就是說訓練一個sigmoid二分類器,隻要模型能夠從中找出正确的詞就認為完成任務。

三.基于詞向量的動态表征方法(預訓練語言模型)

3.1 什麼是預訓練語言模型

預訓練語言模型是通過自監督學習的方法,将大量的無監督文本送入到模型中進行學習訓練得到的。NLP領域中無監督文本資料非常多,而且采用更大的資料、更強大的煉丹爐可以不斷提高模型性能表現,至少目前看來還沒有達到上限。這一類工作為NLP研發者趟通并指明了一條光明大道:就是通過自監督學習,把大量非監督的文本充分利用起來,并将其中的語言知識編碼,對各種下遊NLP任務産生巨大的積極作用。

3.2 預訓練語言模型的優點

預訓練語言模型相比預訓練詞向量,效果要好很多,原因可以總結為:

word2vec等詞向量模型訓練出來的都是靜态的詞向量,即同一個詞,在任何的上下文當中,其向量表征是相同的,顯然,這樣的一種詞向量是無法展現一個詞在不同語境中的不同含義的。

預訓練模型能夠對上下文中的詞提取符合其語境的詞表征,該詞表征向量為一個動态向量,即不同上下文輸入預訓練模型後,同一個詞的詞表征向量在兩個上下文中的詞表征是不同的。

3.3 預訓練語言模型的分類

預訓練語言模型可以分為兩類,分别為自回歸語言模型和自編碼語言模型

自回歸語言模型

通過給定文本的上文,對目前字進行預測,訓練過程要求對數似然函數最大化:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

自回歸語言模型對文本序列聯合機率的密度估計進行模組化,使得該模型更适用于一些生成類的NLP任務,因為這些任務在生成内容的時候就是從左到右的,這和自回歸的模式天然比對。但是聯合機率是按照文本序列從左至右進行計算的,是以無法得到包含上下文資訊的雙向特征表征,在利用上下文資訊方面不如自編碼語言模型。

自回歸語言模型主要有:ELMO,GPT

自編碼語言模型

自編碼語言模型通過随機mask掉一些單詞,在訓練過程中根據上下文對這些單詞進行預測,使預測機率最大化:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

自編碼語言模型本質為去噪自編碼模型,加入的 [MASK] 即為噪聲,模型對 [MASK] 進行預測即為去噪。自編碼語言模型能夠利用上下文資訊得到雙向特征表示,但是其引入了獨立性假設,即每個 [MASK] 之間是互相獨立的,這使得該模型是對語言模型的聯合機率的有偏估計;另外,由于預訓練中 [MASK] 的存在,使得模型預訓練階段的資料與微調階段的不比對,使其難以直接用于生成任務。

自編碼語言模型主要有:BERT、ERNIE

排列語言模型

排列語言模型的思想就是在自回歸和自編碼的方式中間額外添加一個步驟,即可将兩者完美統一起來,具體的就是希望語言模型從左往右預測下一個字元的時候,不僅要包含上文資訊,同時也要能夠提取到對應字元的下文資訊,且不需要引入Mask符号。即在保證位置編碼不變的情況下,将輸入序列的順序打亂,然後預測的順序還是按照原始的位置編碼順序來預測的,但是相應的上下文就是按照打亂順序的上下文來看了,這樣以來,預測對象詞的時候,可以随機的看到上文資訊和下文資訊。另外,假設序列長度為 T T T,則我們如果周遊 T ! T! T!種分解方法,并且模型參數是共享的,PLM就一定可以學習到預測詞的所有上下文資訊。但顯然,周遊 T ! T! T!種上下文計算量是十分大的,在具體實施的過程中,排列語言模型的代表XLNet,采用的是一個部分預測的方法(Partial Prediction),為了減少計算量,隻對随機排列後的末尾幾個詞進行預測,并使得如下期望最大化:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

排列語言模型主要有:XLNET

3.4 幾種重要的預訓練模型介紹

1. ELMO

ELMo為一個典型的自回歸預訓練模型,其包括兩個獨立的單向LSTM實作的單向語言模型進行自回歸預訓練,不使用雙向的LSTM進行編碼的原因正是因為在預訓練任務中,雙向模型将提前看到上下文表征而對預測結果造成影響。是以,ELMo在本質上還是屬于一個單向的語言模型,因為其隻在一個方向上進行編碼表征,隻是将其拼接了而已。對于每一個字元,每一層的ELMo表征均為輸入詞向量與該層的雙向編碼表征拼接而成:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

對于下遊任務而言,需要把所有層的ELMo表征整合為一個單獨的向量,最簡單的方式是隻用最上層的表征,也可以采用對所有層的ELMo表征采取權重和的方式進行處理:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

2. GPT

GPT是“Generative Pre-Training”的簡稱,是一個自回歸語言模型,采用多層Transformer Decoder作為特征抽取器。由于Transformer不像LSTM那樣從左到右進行特征抽取,是以會在預測目前詞的時候看見之後的詞,GPT采用Mask Multi-Head Attention的方式來避免這種情況,使Transformer隻使用一側的詞作為輸入,這種Transformer又被稱作單向Transformer。

GPT首次将Transformer應用于預訓練模型,預測的方式就是将position-wise的前向回報網絡的輸出直接送入分類器進行預測。在微調階段,對于帶有标簽y的監督資料 [ x 1 , . . . , x m ] [x_1,...,x_m] [x1​,...,xm​],直接将其輸入到已經完成預訓練的模型中,然後利用最後一個位置的輸出對标簽進行預測:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

其中, W y W_y Wy​為分類器的參數, h l m h^m_l hlm​為最後一層最後一個位置的輸出。則最大化優化目标即為:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

3. BERT

BERT 的特征抽取結構為雙向的 Transformer,相比于GPT,把Transformer由單向的變為雙向的。ELMO、GPT、BERT三者對比:

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

由于BERT的特征抽取結構采用雙向Transformer,是以BERT無法适用于自回歸語言模型的預訓練方式,是以,BERT提出了兩種預訓練任務來對其模型進行預訓練。

Task 1: MLM

由于BERT需要通過上下文資訊,來預測中心詞的資訊,同時又不希望模型提前看見中心詞的資訊,是以提出了一種 Masked Language Model 的預訓練方式,即随機從輸入預料上 mask 掉一些單詞,然後通過的上下文預測該單詞,類似于一個完形填空任務。

在預訓練任務中,15%的 Word Piece 會被mask,這15%的 Word Piece 中,80%的時候會直接替換為 [Mask] ,10%的時候将其替換為其它任意單詞,10%的時候會保留原始Token

  • 沒有100%mask的原因

    如果句子中的某個Token100%都會被mask掉,那麼在fine-tuning的時候模型就會有一些沒有見過的單詞

  • 加入10%随機token的原因

    Transformer要保持對每個輸入token的分布式表征,否則模型就會記住這個[mask]是token ’hairy‘

    另外編碼器不知道哪些詞需要預測的,哪些詞是錯誤的,是以被迫需要學習每一個token的表示向量

  • 另外,每個batchsize隻有15%的單詞被mask的原因,是因為性能開銷的問題,雙向編碼器比單項編碼器訓練要更慢
Task 2: NSP

僅僅一個MLM任務是不足以讓 BERT 解決閱讀了解等句子關系判斷任務的,是以添加了額外的一個預訓練任務,即 Next Sequence Prediction。

具體任務即為一個句子關系判斷任務,即判斷句子B是否是句子A的下文,如果是的話輸出’IsNext‘,否則輸出’NotNext‘。訓練資料的生成方式是從平行語料中随機抽取的連續兩句話,其中50%保留抽取的兩句話,它們符合IsNext關系,另外50%的第二句話是随機從預料中提取的,它們的關系是NotNext的。這個關系儲存在圖4中的[CLS]符号中

BERT的缺點

BERT難以适應生成式任務,這是因為BERT采用了雙向的特征抽取器,使得其預訓練過程與中的資料與微調的資料不比對。

BERT沒有考慮預測被[MASK]的token之間的相關性,是對語言模型聯合機率的有偏估計。這在進行中文語料時不太合适,因為中文的字可以組成詞,是以中文的字之間是由相關性的,之後的wwm-BERT就針對這一點做了改進。

4. wwm-BERT

wwm的全稱是Whole Word Masking ,暫翻譯為全詞Mask或整詞Mask,是哈工大訊飛聯合實驗室提出的BERT中文預訓練模型的更新版本,主要更改了原預訓練階段的訓練樣本生成政策。 簡單來說,原有基于WordPiece的分詞方式會把一個完整的詞切分成若幹個子詞,在生成訓練樣本時,這些被分開的子詞會随機被mask。

在全詞Mask中,如果一個完整的詞的部分WordPiece子詞被mask,則同屬該詞的其他部分也會被mask,即全詞Mask。這樣的做法強制模型預測整個的詞,而不是詞的一部分,即對同一個詞不同字元的預測将使得其具有相同的上下文,這将加強同一個詞不同字元之間的相關性,或者說引入了先驗知識,使得BERT的獨立性假設在同一個詞的預測上被打破,但又保證了不同的詞之間的獨立性。

作者将全詞Mask的方法應用在了中文中,使用了中文維基百科(包括簡體和繁體)進行訓練,并且使用了哈工大LTP作為分詞工具,即對組成同一個詞的漢字全部進行Mask。這樣一個簡單的改進,使得同樣規模的模型,在中文資料上的表現獲得了全方位的提升

5. ERNIE

BERT在中文文本中的MLM預訓練模型很容易使得模型提取到字搭配這種低層次的語義資訊,而對于短語以及實體層次的語義資訊抽取能力是較弱的。是以ERNIE将外部知識引入大規模預訓練語言模型中,提高在知識驅動任務上的性能。具體有如下三個層次的預訓練任務:

  • Basic-Level Masking: 跟bert一樣對單字進行mask,很難學習到高層次的語義資訊;
  • Phrase-Level Masking: 輸入仍然是單字級别的,mask連續短語;
  • Entity-Level Masking: 首先進行實體識别,然後将識别出的實體進行mask。
NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

6. XLNET

傳統的自回歸語言模型天然适合處理生成任務,但是無法對雙向上下文進行表征;而自編碼語言模型雖然可以實作雙向上下文進行表征,但是自編碼語言模型的代表BERT系列模型引入獨立性假設,沒有考慮預測[MASK]之間的相關性;而且MLM預訓練目标的設定造成預訓練過程和生成過程不一緻,導緻在文本生成任務中自編碼語言模型效果不佳。

XLNet是一種排列語言模型,它綜合了自回歸模型和自編碼模型的優點,同時避免了他們的缺點。XLNet将輸入序列的順序打亂,然後預測的順序還是按照原始的位置編碼順序來預測的,但是相應的上下文就是按照打亂順序的上下文來看了,這樣一來,預測對象詞的時候,可以随機的看到上文資訊和下文資訊。

直接用标準的Transformer來模組化PLM,會出現沒有目标(target)位置資訊的問題。即在打亂順序之後,并不知道下一個要預測的詞是一個什麼詞,這将導緻用相同上文預測不同目标的機率是相同的。XLNet引入了雙流自注意力機制(Two-Stream Self-Attention)來解決這個問題。

Two-Stream Self-Attention

Two-Stream Self-Attention有兩個分離的Self-Attention資訊流:

  • Query Stream 就為了找到需要預測的目前詞,這個資訊流的Self-Attention的Query輸入是僅包含預測詞的位置資訊,而Key和Value為上下文中包含内容資訊和位置資訊的輸入,表明我們無法看見預測詞的内容資訊,該資訊是需要我們去預測的;
  • Content Stream 主要為 Query Stream 提供其它詞的内容向量,其Query輸入為包含預測詞的内容資訊和位置資訊,Value和Key的輸入為選中上下文的位置資訊和内容資訊;

兩個資訊流的輸出同樣又作為對應的下一層的雙資訊流的輸入。而随機排列機制實際上是在内部用Mask Attention的機制實作的。

NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

另外,XLNET沒有直接使用Transformer作為特征抽取器,而是采用了Transformer的改進版Transformer-XL,其相比于傳統的Transformer能捕獲更長距離的單詞依賴關系。

Transformer-XL

原始的Transformer的主要缺點在于,其在語言模組化中會受到固定長度上下文的限制,進而無法捕捉到更長遠的資訊。Transformer-XL采用片段級遞歸機制(segment-level recurrence mechanism)和相對位置編碼機制(relative positional encoding scheme)來對Transformer進行改進:

  • 片段級遞歸機制:指的是目前時刻的隐藏資訊在計算過程中,将通過循環遞歸的方式利用上一時刻較淺層的隐藏狀态,這使得每次的計算将利用更大長度的上下文資訊,大大增加了捕獲長距離資訊的能力。
  • 相對位置編碼:Transformer本身引入了三角函數向量作為位置編碼向量。而Transformer-XL複用了上文的資訊,這就導緻位置編碼出現重疊,是以采用了訓練的方式得到相對位置編碼向量。
NLP中的預訓練方法總結 word2vec、ELMO、GPT、BERT、XLNET

繼續閱讀