UniLM:基於bert的Seq2Seq

論文地址:Unified Language Model Pre-training for Natural Language Understanding and Generation

概述:

  UniLM是微軟研究院在Bert的基礎上,最新產出的預訓練語言模型,被稱爲統一預訓練語言模型。它可以完成單向、序列到序列和雙向預測任務,可以說是結合了AR和AE兩種語言模型的優點,Unilm在抽象摘要、生成式問題回答語言生成數據集的抽樣領域取得了最優秀的成績。

一、AR與AE語言模型

AR: Aotoregressive Lanuage Modeling,又叫自迴歸語言模型。它指的是,依據前面(或後面)出現的tokens來預測當前時刻的token,代表模型有ELMO、GTP等。

AE:Autoencoding Language Modeling,又叫自編碼語言。通過上下文信息來預測當前被mask的token,代表有BERT ,Word2Vec(CBOW)。

AR 語言模型:

  • 缺點:它只能利用單向語義而不能同時利用上下文信息。ELMO 通過雙向都做AR 模型,然後進行拼接,但從結果來看,效果並不是太好。

  • 優點: 對自然語言生成任務(NLG)友好,天然符合生成式任務的生成過程。這也是爲什麼 GPT 能夠編故事的原因。

AE 語言模型:

  • 缺點: 由於訓練中採用了 [MASK] 標記,導致預訓練與微調階段不一致的問題。此外對於生成式問題, AE 模型也顯得捉襟見肘,這也是目前 BERT 爲數不多實現大的突破的領域。

  • 優點: 能夠很好的編碼上下文語義信息, 在自然語言理解(NLU)相關的下游任務上表現突出。

二、UniLM介紹

   預訓練語言模型利用大量的無監督數據,結合上下文語境來預測缺失的文字或者單詞,進而使模型學習到上下文相關的文本特徵表示。當前已經存在多種預訓練模型,但它們的預測任務和訓練目標不盡相同。

1)ELMO

  ELMO學習的是兩個單向的語言模型,由一個前向(從左到右學習)和一個後向(從右向左學習)語言模型構成,其主幹網絡是LSTM組成,目標函數就是取這兩個方向語言模型的最大似然。

前向LSTM:

後向LSTM:

最大似然函數:

2)GPT

   GPT是由Transformer組成的語言模型,採用從左到右一個一個學習word的方式,其實相當於利用了Transformer的解碼器,因爲解碼器是從左到右一個個來的,左邊的word看不到右邊的信息,右邊的word可以看到左邊的信息。通過最大化以下似然函數來訓練語言模型:

3)BERT

  BERT也是由Transformer組成的語言模型,採用的是雙向的學習的模式。爲什麼是雙向呢?因爲BERT利用的是Transformer的編碼器,Transformer的編碼器可以同時看到左右的信息。bert的雙向學習使得其在NLU任務上有非常出色的表現,但是它在NLG任務上的表現就沒有那麼優越了。

4)UniLM

  UniLM也是一個多層Transformer網絡,跟bert類似,但是UniLM能夠同時完成三種預訓練目標,如上述表格所示,幾乎囊括了上述模型的幾種預訓練方式,而且新增了sequence-to-sequence訓練方式,所以其在NLU和NLG任務上都有很好的表現。UniLM模型基於mask詞的語境來完成對mask詞的預測,也是完形填空任務。對於不同的訓練目標,其語境是不同的。

  • 單向訓練語言模型,mask詞的語境就是其單側的words,左邊或者右邊。

  • 雙向訓練語言模型,mask詞的語境就是左右兩側的words。

  • Seq-to-Seq語言模型,左邊的seq我們稱source sequence,右邊的seq我們稱爲target sequence,我們要預測的就是target sequence,所以其語境就是所有的source sequence和其左側已經預測出來的target sequence。

  三大優勢:

  1. 三種不同的訓練目標,網絡參數共享。

  2. 正是因爲網絡參數共享,使得模型避免了過擬合於某單一的語言模型,使得學習出來的模型更加general,更具普適性。

  3. 因爲採用了Seq-to-Seq語言模型,使得其在能夠完成NLU任務的同時,也能夠完成NLG任務,例如:抽象文摘,問答生成。

 

三、模型架構與實驗設置

網絡設置:24層Transformer,1024個hidden size,16個attention heads。

參數大小:340M

初始化:直接採用Bert-Large的參數初始化。

激活函數:GELU,與bert一樣

dropout比例:0.1

權重衰減因子:0.01

batch size:330

混合訓練方式:對於一個batch,1/3時間採用雙向(bidirectional)語言模型的目標,1/3的時間採用seq-to-seq語言模型目標,最後1/3平均分配給兩種單向學習的語言模型,也就是left-to-right和right-to-left方式各佔1/6時間。

masking 方式:總體比例15%,其中80%的情況下直接用[MASK]替代,10%的情況下隨機選擇一個詞替代,最後10%的情況用真實值。還有就是80%的情況是每次只mask一個詞,另外20%的情況是mask掉bigram或者trigram。

 Attention 控制:不同的訓練方式,其關注的語境是不一樣的,上面也有介紹,如上圖所示,灰色的方格就是不能看到的信息,白色的就是需要attention的信息。如何實現這種控制呢?不讓當前預測詞看掉的信息就採用掩碼隱藏掉,只留下能讓當前詞可看的信息,換句話說,論文使用了掩碼來控制在計算基於上下文的表徵時 token 應該關注的上下文的量。下面有詳細實現方式。

 

四、模型輸入與骨幹網絡

  模型輸入X是一串word序列,該序列要麼是用於單向語言模型的一段文本片段,要麼是一對文本片段,主要用於雙向或者seq-to-seq語言模型 。在輸入的起始處會添加一個[SOS]標記,結尾處添加[EOS]標記。[EOS]一方面可以作爲NLU任務中的邊界標識,另一方面還能在NLG任務中讓模型學到何時終止解碼過程。其輸入表徵方式與 BERT 的一樣,包括token embedding,position embedding,segment embedding,同時segment embedding還可以作爲模型採取何種訓練方式(單向,雙向,序列到序列)的一種標識。

   骨幹網絡由24層Transformer組成,輸入向量 {xi}首先會被轉換成H0=[x1,...,x|x|] ,然後送入該24層Transformer網絡,每一層編碼輸出如下:

在每一層通過掩碼矩陣M來控制每個詞的注意力範圍,0表示可以關注,負無窮表示不能關注,會被掩碼掉。對於第 l個 Transformer 層,自注意頭 AI 的輸出的計算方式爲:

 

 

五、預訓練的目標

   針對不同語言模型的訓練目標,文章設計了四種完形填空任務。在某個完形填空任務中,會隨機選擇一些WordPiece替換爲[MASK],然後通過Transformer網絡計算得到相應的輸出向量,再把輸出向量喂到softmax分類器中,預測被[MASK]的word。UniLM參數優化的目標就是最小化被[MASK] token的預測值和真實值之間的交叉熵。值得注意的是,由於使用的是完形填空任務,所以可以爲所有語言模型(無論是單向還是雙向)都使用同樣的訓練流程。

單向語言模型:

  單向語言模型,分別採取從左到右和從右到左的訓練目標。以從左到右爲例子,例如去預測序列"X1X2[MASK]X4"中的掩碼,僅僅只有X1,X2和它自己的信息可用,X4的信息是不可用的。這通過上文提到的掩碼M矩陣來控制,結合結構圖可以看出,主要是上三角的信息不可見,所以在掩碼矩陣M中將上三角矩陣的值置爲-∞。

雙向語言模型:

   雙向語言模型,還以"X1X2[MASK]X4"爲例子,其中X1,X2,X4及自己的信息都可用,所以相比單向語言模型,能夠生成更好的與上下文相關token表徵。這也是通過掩碼矩陣M來控制,都可見,將M的值都置爲0即可

序列到序列語言模型

  左側的序列其實就是我們的已知序列,叫source sequence,右側的序列就是我們想要的序列,叫target sequence。左側的序列屬於編碼階段,所以相互的上下文信息都能看到;右側的序列屬於解碼階段,能看到source sequence的信息、target sequence中其左側的信息及自己的信息。以T1T2->T3T4T5舉例說明,我們的輸入就變成[SOS]T1T2[EOS]T3T4T5[EOS],T1和T2相互都能看到,並能看到兩邊的[SOS]和[EOS];而T4能看到[SOS]、T1、T2、[EOS]、T3及自己的信息。

  在訓練的時候,source sequence和target sequence中的token都會被隨機替換爲[MASK],以達到模型學習訓練的目的。在預測[MASK]的同時,因爲這兩個語句對被打包在一起了,其實模型也無形中學到了兩個語句之間存在的緊密關係。這在NLG任務中,比如抽象文摘,非常有用。

 

六、下游任務NLU和NLG的Fine-tuning方法

   對於NLU任務而言,做fine-tuning的時候,直接微調爲雙向的transformer編碼器,跟bert一樣。以文本分類爲例子,使用 [SOS] 的編碼向量作爲輸入的編碼,表示爲,也就是將UniLM骨幹網絡的最後一層的[SOS]編碼位置輸出,作爲分類器的初始輸入,然後將其輸入一個隨機初始化的 softmax 分類器(即特定於任務的輸出層),其中類別概率的計算方式爲 ,其中 是參數矩陣,C 是類別數量。後面微調的時候,可以同時調整UniLM模型參數及分類器的Wc參數即可。

  對於 NLG 任務,以seq-to-seq任務爲例,微調過程類似於使用自注意掩碼進行預訓練。令 S1 和 S2 分別表示源序列和目標序列,構建出輸入[SOS] S1 [EOS] S2 [EOS]。該模型的微調是通過隨機掩蓋target序列中一定比例的 token,讓模型學習恢復被掩蓋的詞,其訓練目標是基於上下文最大化被掩蓋 token 的似然度。這點與預訓練中略有不同,預訓練的時候是隨機掩蓋掉source序列和target序列的token,也就是兩端都參與了訓練,而微調的時候只有target參與,因爲微調更多關注的是target端。值得注意的是,fine-tuning的時候,target端的結束標識[EOS]也可以被掩蓋掉,讓模型學習預測,這樣模型就可以學習出來自動結束NLG任務了。

 

七、結合實例具體分析下游Fine-tuning任務

  NLU的任務有抽取式問答,NLG的任務主要有抽象文摘、問題生成、生成問題答案和對話響應生成。

1、抽象式文摘(abstractive summarization)

  抽象文摘就是根據機器的理解自動生成文摘內容。本實驗利用UniLM的sequence-to-sequence模型來完成,在 CNN/DailyMail 數據集上完成摘要任務在訓練集上fine-tuning 30個epochs,微調的超參數與預訓練的時候一致,target token被mask的比例爲0.7,batch size設置爲32,最大長度768,標籤平滑設置爲0.1。

  標籤平滑:假設多分類的原label=[0,1,0],經過骨幹網絡+softmax之後輸出預測值=[0.15,0.7,0.15],根據交叉熵公式會得到一個loss,其實這個時候從預測標籤中就能看出哪個類別概率大了,但是基於loss函數的導向,會繼續減少損失,讓中間的0.7越來越靠近1,這樣再學習就容易過擬合了,所以引入了標籤平滑。標籤平滑就是把原label修正一下,相互之間差別不要那麼大,例如修改爲[0.1,0.8,0.1],這樣模型就不至於過分學習了。

  解碼的時候,採用集束搜索策略,束寬設置爲5。

2、生成式問答(Generative QA)

  該實驗是給一段文本和一個問題,生成形式自由的答案,這也是一個NLG任務,我們這裏也是利用sequence-to-sequence模型來完成。soure序列就是一段文本和問題,target序列就是答案。在CoQA數據集上完成實驗,共進行10個epochs。target token被mask的比例爲0.5,batch size設置爲32,最大長度爲512,標籤平滑設置爲0.1。解碼的時候束寬設置爲3。對於文本特別長的情況下,會利用一個滑動窗口,將文本分成幾段,最後把與問答重合度最高的片段送入模型。

3、問題生成(Question Generation)

  該任務是給定一個輸入段落和一個答案範圍,目標是生成一個詢問該答案的問題。該任務同樣可以轉化爲一個sequence-to-sequence問題來解決。oure序列就是一段文本和答案,target序列就是問題。target token被mask的比例爲0.7,batch size設置爲32。

4、多輪對話響應生成(Response Generation)

  給定一段多輪對話歷史,並將網絡文檔作爲知識源,系統需要生成適合對話並且能反映網絡文檔內容的自然語言響應。該任務依然採用sequence-to-sequence語言模型來解決。源序列S1=對話歷史+知識源,目標序列S2=響應的對話。在DSTC7數據集上進行實驗,進行20個epochs,batch size=64,target token被mask的比例爲0.5。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章