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之間的點乘,然後爲了防止其結果過大,會除以一個尺度標度 ,其中
爲一個query和key向量的維度。再利用Softmax操作將其結果歸一化爲概率分佈,然後再乘以矩陣V就得到權重求和的表示。該操作可以表示爲
其中 是我們模型訓練過程學習到的合適的參數。上述操作即可簡化爲矩陣形式:
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機制。
多頭注意力機制:點乘注意力的升級版本。相當於 個不同的self-attention的集成(ensemble),在這裏我們以
舉例說明。Multi-Head Attention的輸出分成3步:
- 將數據
分別輸入到上面的8個self-attention中,得到8個加權後的特徵矩陣
。
- 將8個
按列拼成一個大的特徵矩陣;
- 特徵矩陣經過一層全連接後得到輸出
。
參考:深度學習: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:
①一種是選擇語料中真正順序相連的兩個句子;
②另外一種是第二個句子從語料庫中拋色子,隨機選擇一個拼到第一個句子後面。