Encoder-Decoder框架、Attention、Transformer、ELMO、GPT、Bert學習總結

Encoder-Decoder框架:

可以把它看作適合處理由一個句子(或篇章)生成另外一個句子(或篇章)的通用處理模型。對於句子對<Source,Target>,我們的目標是給定輸入句子Source,期待通過Encoder-Decoder框架來生成目標句子Target。

Encoder顧名思義就是對輸入句子Source進行編碼,將輸入句子通過非線性變換轉化爲中間語義表示C:

對於解碼器Decoder來說,其任務是根據句子Source的中間語義表示C和之前已經生成的歷史信息,來生成i時刻要生成的單詞:

如果Source是中文句子,Target是英文句子,那麼這就是解決機器翻譯問題的Encoder-Decoder框架;如果Source是一篇文章,Target是概括性的幾句描述語句,那麼這是文本摘要的Encoder-Decoder框架;如果Source是一句問句,Target是一句回答,那麼這是問答系統或者對話機器人的Encoder-Decoder框架。

Attention機制:

  • 根據根據Query和某個Key_i,計算兩者的相似性或者相關性,最常見的方法包括:求兩者的向量點積、求兩者的向量Cosine相似性或者通過再引入額外的神經網絡來求值,即如下方式:

  • 引入類似SoftMax的計算方式對第一階段的得分進行數值轉換,一方面可以進行歸一化,將原始計算分值整理成所有元素權重之和爲1的概率分佈;另一方面也可以通過SoftMax的內在機制更加突出重要元素的權重。即一般採用如下公式計算:

  • 計算結果a_i即爲value_i對應的權重係數,然後進行加權求和即可得到Attention數值:

Self Attention模型:

指的不是Target和Source之間的Attention機制,而是Source內部元素之間或者Target內部元素之間發生的Attention機制,也可以理解爲Target=Source這種特殊情況下的注意力計算機制。Q(Query), K(Key), V(Value)三個矩陣均來自同一輸入,首先我們要計算Q與K之間的點乘,然後爲了防止其結果過大,會除以一個尺度標度 \sqrt{d_k} ,其中 d_k 爲一個query和key向量的維度。再利用Softmax操作將其結果歸一化爲概率分佈,然後再乘以矩陣V就得到權重求和的表示。該操作可以表示爲 

Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

其中 W^Q, W^K, W^V 是我們模型訓練過程學習到的合適的參數。上述操作即可簡化爲矩陣形式:

參考:深度學習中的注意力模型(2017版)

Transformer模型:

Transformer用於執行翻譯任務,實驗表明,這一模型表現極好,可並行化,並且大大減少訓練時間。其本質上是一個Encoder-Decoder的結構,編碼器由6個編碼block組成(encoder每個block由self-attention,FFNN組成),同樣解碼器是6個解碼block組成(decoder每個block由self-attention,encoder-decoder attention以及FFNN組成),與所有的生成模型相同的是,編碼器的輸出會作爲解碼器的輸入。

模型結構如下圖所示:

編碼器:編碼器有6個完全的層堆棧而成,每一層都有兩個子層。第一個子層是多頭的self-attention機制上面講過了,第二層是一層簡單的前饋網絡全連接層。在每一層子層都有residual和歸一化。

解碼器:解碼器也是有6個完全相同的層堆棧而成,每一層有三個子層,在編碼棧的輸出處作爲多頭的attention機制。

多頭注意力機制:點乘注意力的升級版本。相當於 h 個不同的self-attention的集成(ensemble),在這裏我們以 h=8 舉例說明。Multi-Head Attention的輸出分成3步:

  • 將數據 X 分別輸入到上面的8個self-attention中,得到8個加權後的特徵矩陣 Z_i, i\in\{1,2,...,8\} 。
  • 將8個 Z_i 按列拼成一個大的特徵矩陣;
  • 特徵矩陣經過一層全連接後得到輸出 Z 。

參考:深度學習:transformer模型放棄幻想,全面擁抱Transformer:自然語言處理三大特徵抽取器(CNN/RNN/TF)比較

EMLO模型:

ELMO是“Embedding from Language Models”的簡稱,ELMO的論文題目:“Deep contextualized word representation”更能體現其精髓:在deep contextualized這個短語,一個是deep,一個是context,其中context更關鍵。ELMO的本質思想是:我事先用語言模型學好一個單詞的Word Embedding,根據上下文單詞的語義去調整單詞的Word Embedding表示,這樣經過調整後的Word Embedding更能表達在這個上下文中的具體含義。ELMO採用了典型的兩階段過程:

  • 利用語言模型進行預訓練;

  • 在做下游任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作爲新特徵補充到下游任務中。

優點:

  • 引入上下文動態調整單詞的embedding後解決了多義詞問題;
  • 適用範圍是非常廣的,普適性強

缺點:

  • LSTM抽取特徵能力弱於Transformer
  • 拼接方式雙向融合特徵融合能力偏弱

GPT模型:

GPT是“Generative Pre-Training”的簡稱,從名字看其含義是指的生成式的預訓練。GPT也採用兩階段過程:

  • 利用語言模型進行預訓練;

  • 通過Fine-tuning的模式解決下游任務;

一個新問題:對於NLP各種花樣的不同任務,怎麼改造才能靠近GPT的網絡結構呢?

  • 對於分類問題,不用怎麼動,加上一個起始和終結符號即可;
  • 對於句子關係判斷問題,比如Entailment,兩個句子中間再加個分隔符即可;
  • 對文本相似性判斷問題,把兩個句子順序顛倒下做出兩個輸入即可,這是爲了告訴模型句子順序不重要;
  • 對於多項選擇問題,則多路輸入,每一路把文章和答案選項拼接作爲輸入即可。

與ELMO區別

  • 特徵抽取器不是用的RNN,而是用的Transformer
  • 採用的是單向的語言模型

優點

  • 引入Transformer任務性能提升非常明顯

缺點

  • 單項語言模型只採用Context-before這個單詞的上文來進行預測,而拋開了下文,白白丟掉了很多信息

Bert模型

Bert採用和GPT完全相同的兩階段模型:

  • 首先是語言模型預訓練;
  • 其次是使用Fine-Tuning模式解決下游任務。

改造下游任務

  • 對於句子關係類任務,和GPT類似,加上一個起始和終結符號,句子之間加個分隔符即可。對於輸出來說,把第一個起始符號對應的Transformer最後一層位置上面串接一個softmax分類層即可。
  • 對於分類問題,與GPT一樣,只需要增加起始和終結符號,輸出部分和句子關係判斷任務類似改造;
  • 對於序列標註問題,輸入部分和單句分類是一樣的,只需要輸出部分Transformer最後一層每個單詞對應位置都進行分類即可。
  • 對於機器翻譯或者文本摘要,聊天機器人這種生成式任務,同樣可以稍作改造即可引入Bert的預訓練成果。只需要附着在S2S結構上,encoder部分是個深度Transformer結構,decoder部分也是個深度Transformer結構。根據任務選擇不同的預訓練數據初始化encoder和decoder即可。這是相當直觀的一種改造方法。當然,也可以更簡單一點,比如直接在單個Transformer結構上加裝隱層產生輸出也是可以的。

與GPT區別

  • 最主要不同在於在預訓練階段採用了類似ELMO的雙向語言模型
  • 另外一點是語言模型的數據規模要比GPT大

優點

  • 在各種類型的NLP任務中達到目前最好的效果,某些任務性能有極大的提升

Bert最關鍵兩點:

  • 一點是特徵抽取器採用Transformer;
  • 第二點是預訓練的時候採用雙向語言模型。

創新點

  • Masked 語言模型:

    ①隨機選擇語料中15%的單詞,用[Mask]掩碼代替原始單詞,
    ②然後要求模型去正確預測被摳掉的單詞。
    ③15%的被上天選中要執行[mask]替身這項光榮任務的單詞中,只有80%真正被替換成[mask]標記
    ④10%被狸貓換太子隨機替換成另外一個單詞,10%情況這個單詞還待在原地不做改動。
  • Next Sentence Prediction:

    ①一種是選擇語料中真正順序相連的兩個句子;
    ②另外一種是第二個句子從語料庫中拋色子,隨機選擇一個拼到第一個句子後面。

參考:從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史

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