machine comprehension using match-lstm and answer pointer

又是一篇之前讀的paper,最近把之前讀的paper整理整理…

今天的主角又是在斯坦福的SQuAD的基礎上,雖然是一篇比較早的文章,但是該文章是第一個在SQuAD上實現的端到端的神經網絡(end-end),對於入門attention,QA的小夥伴來說還是很不錯的~

前言

SQuAD 是由 Rajpurkar 等人提出的一個最新的閱讀理解數據集。該數據集:

  • 包含 10 萬個(問題,原文,答案)三元組(500多篇文章,2萬多個段落,10萬個問題);
  • 原文來自於 536 篇維基百科文章,而問題和答案的構建主要是通過衆包的方式,讓標註人員提出最多 5 個基於文章內容的問題並提供正確答案,且答案出現在原文中。每個問題3人標註,降低了人工標註誤差
  • SQuAD 和之前的完形填空類閱讀理解數據集如CNN/DM,CBT等最大的區別在於:SQuAD 中的答案不再是單個實體或單詞,而可能是一段短語,這使得其答案更難預測。
  • SQuAD 包含公開的訓練集和開發集,以及一個隱藏的測試集,其採用了與 ImageNet 類似的封閉評測的方式,研究人員需提交算法到一個開放平臺,並由 SQuAD 官方人員進行測試並公佈結果。

幾乎所有做 SQuAD 的模型都可以概括爲同一種框架:Embed 層,Encode 層,Interaction 層和 Answer 層

  • Embed 層負責將原文和問題中的 tokens 映射爲向量表示;
  • Encode 層主要使用 RNN 來對原文和問題進行編碼,這樣編碼後每個 token 的向量表示就蘊含了上下文的語義信息;、
  • Interaction 層是大多數研究工作聚焦的重點,該層主要負責捕捉問題和原文之間的交互關係,並輸出編碼了問題語義信息的原文表示,即 query-aware 的原文表示;
  • 最後 Answer 層則基於 query-aware 的原文表示來預測答案範圍。
    在這裏插入圖片描述
QA 系統基本框架

1.模型概述

Match-LSTM模型的輸入由兩部分組成:段落(passage)和問題(question)。passage使用一個矩陣P[d * P]表示,其中d表示詞向量維度大小,P表示passage中tokens的個數;question使用矩陣Q[d * Q]表示,其中Q表示question中tokens的個數。

Match-LSTM模型的輸出即問題的答案有兩種表示方法:

  • 其一是使用一系列整數數組a=(a1,a2,)a = (a1, a2,…),其中aia_i[1,P][1, P]中的一個整數,表示在段落中某個token具體的位置,這裏的整數數組不一定是連續的,對應Sequence Model ;
  • 第二種表示方法是假設答案是段落中一段連續的token組合,即僅使用兩個整數來表示答案a=(as,ae)a = (a_s, a_e)asa_s表示答案在段落中開始的位置,aea_e則表示結束位置,asa_saea_e[1,P][1, P]中的整數,對應Boundary Model 。

故對Match-LSTM模型的訓練集樣本來說,其可用下面的三維數組來表示:
(Pn,Qn,an)n=1N{(P_n,Q_n,a_n)}^N_{n=1}


總結一下,在模型實現上,Match-LSTM 的主要步驟如下:

(1) LSTM預處理層(LSTM preprocessing Layer):

  • Embed 層使用詞向量表示原文和問題;
  • Encode 層使用單向 LSTM 編碼原文和問題 embedding;

(2) match-LSTM層(Match-LSTM Layer):匹配原文和問題

  • Interaction層對原文中每個詞,計算其關於問題的注意力分佈,並使用該注意力分佈彙總問題表示,將原文該詞表示和對應問題表示輸入另一個 LSTM編碼,得到該詞的 query-aware 表示;
  • 在反方向重複步驟 2,獲得雙向 query-aware 表示;

(3) Ans-Ptr層(Answer Pointer(Ans-Ptr) Layer):從原文中選取答案

  • Answer 層基於雙向 query-aware 表示使用Sequence Model 或 Boundary Model預測答案範圍。其中:
    • 序列模型(Sequence Model):使用Ptr-Net網絡,不做連續性假設,預測答案存在與原文的每一個位置
    • 邊界模型(Boundary Mode):直接使用Ptr-Net網絡預測答案在原文中起始和結束位置

模型結構圖:
在這裏插入圖片描述

簡單的說:帶着問題去閱讀原文,然後用得到的信息去回答問題:

  1. 先利用LSTM閱讀一遍passage,得到輸出的encoding 序列。
  2. 然後帶着question的信息,重新將passage的每個詞輸入LSTM,再次得到passage的encoding信息。但是這次的輸入不僅僅只有passage的信息,還包含這個詞和question的關聯信息,它和question的關聯信息的計算方式就是我們在seq2seq模型裏面最常用的attention機制。
  3. 最後將信息輸入answer模塊,生成答案。

2.LSTM preprocessing Layer

LSTM preprocessing Layer的目的是將token的上下文信息包含到passage和question中的每個token的向量表示中。分別將passage和question輸入LSTM preprocessing Layer,直接使用單向LSTM,故而每一個時刻的隱含層向量輸出只包含左側上下文信息.

經過LSTM preprocessing Layer後,passage和question表示如下矩陣:
(2-1)Hp=LSTM(P)Hq=LSTM(Q)H^{p}=\overrightarrow{LSTM}(P) \quad H^{q}=\overrightarrow{LSTM}(Q) \tag {2-1}

其中HpH^p是passage的向量矩陣表示,其大小爲[lP][l * P]ll表示隱藏層的節點個數;HqH^q是question的向量矩陣表示,其大小爲[lQ][l * Q]

3.match-LSTM

在文本蘊含任務中,輸入一個文本對,假設句T和蘊含句H,這裏將question當做T,passage當做H。下面是match-LSTM的構建,實質上就是一個attention機制。

(3-1)Gi=tanh(WqHq+(Wphip+Wrhi1r+bp)eQ)\overrightarrow{G_{i}}=\tanh(W^qH^q+(W^ph^p_i+W^r\overrightarrow{h_{i-1}^r} + b^p) \otimes e_{Q}) \tag{3-1}
(3-2)αi=softmax(wTGi+beQ)\overrightarrow{\alpha_i}=softmax(w^T\overrightarrow{G_i} + b \otimes e_Q) \tag{3-2}
其中:

  • Wq,Wp,WrϵRll,bp,wϵRl1 and bϵRW^q,W^p,W^r \epsilon \mathbb{R} ^{\color {red}{l*l} },b^p,w \epsilon \mathbb{R} ^{\color {red}{l*1} } and b \epsilon \mathbb{R},這都是需要訓練的參數。
  • GiϵRlQ\overrightarrow{G_{i}} \epsilon \mathbb{R}^{\color {red}{l*Q}}是attention時的中間結果,表示passage中第i個詞和query中每個詞的交互信息(對應的每一列對應query中每一個詞);
    其維度變化過程爲:[l Q] = [l l] [l Q] + ([l l] [l 1] + [l l] [l 1] + [l 1]) |Q|
  • αi\overrightarrow{\alpha_i}是attention計算出來的權重,表示在passage的第i個token對question中每個詞的注意力權重向量。
    其維度變化過程爲:[1 Q] = ([1 l] [l Q] + 1 * |Q|)
  • hi1rϵRl1\overrightarrow{h_{i-1}^r} \epsilon \mathbb{R}^{l*1}表示mathch-LSTM中,第 i1i-1 個token的隱藏層輸出,計算方式如下公式(3-4)
  • xeQx\otimes e_Q表示將x複製eQe_Q次,公式中同理

上式中公式3-1,3-2這種 attention 被稱爲 BahdanauAttention。 Passage 中第 t 個上下文向量會根據 所有 Question 的隱向量 & Passage 中 t-1 時刻的上下文向量 來確定對Question 每個 token 的權重。可以把下圖的 Y 理解爲 passage,把 X 理解爲question。
在這裏插入圖片描述

這裏可以針對passage每一個詞語輸出一個αi\overrightarrow{\alpha_i}向量,這個向量維度是question詞長度,故而這種方法也叫做question-aware attention passage representation。


下面將attention向量(αi\overrightarrow{\alpha_i})與原query編碼向量(HQH^Q)點乘,得到passage中第i個token的question關聯信息,再與passage中第i個token的編碼向量做concat,粘貼爲一個向量zi\overrightarrow{z_i},然後輸出到LSTM網絡中。

(3-3)zi=[hipHQαiT]\overrightarrow{z_i}=[\begin{matrix} h_i^p\\ H^Q\overrightarrow{\alpha_i^T} \end{matrix}] \tag{3-3}
(3-4)hir=LSTM(zi,hi1r)\overrightarrow{h_i^r}=\overrightarrow{LSTM}(\overrightarrow{z_i}, \overrightarrow{h_{i-1}^r}) \tag{3-4}
其中HqϵRlQ and αiϵR1Q and hipϵRl1 and ziϵR2l1 and irϵR2l1H^q \epsilon \mathbb{R}^{\color {red} {l*Q}} and  \overrightarrow{\alpha_i} \epsilon \mathbb{R}^{\color {red}{1*Q}} and h^p_i \epsilon \mathbb{R}^{\color {red}{l*1}} and  \overrightarrow{z_i} \epsilon \mathbb{R}^{\color {red}{2l*1}}  and  \overrightarrow{h_i^r} \epsilon \mathbb{R}^{\color {red}{2l*1}},HQαiTH^Q\overrightarrow{\alpha_i^T}是attention的結果。

這裏所有的資料都寫成了LSTM(zi,hi1r)\overrightarrow{LSTM}(\overrightarrow{z_i}, \overrightarrow{h_{i-1}^r})的形式,但是熟悉lstm內部結構(可參考本博)的應該知道,lstm需要的previous state是個tuple,也就是(ht1,ct1h_{t-1},c_{t-1}),而這裏只提到了ht1h_{t-1}我覺得是因爲attention只用到了ht1h_{t-1},但是公式中隻字未提ct1c_{t-1}是不是有點缺乏嚴謹~~~(當然源碼中用了state這個“tuple”而不只是ht1h_{t-1}

上述就是match-LSTM的標準結構,這裏更進一步,爲了捕捉到更豐富的上下文信息,再增加一個反向match-LSTM網絡。基本結構同上。最終,只需要將正向match-LSTM輸出的隱含層向量Hr\overrightarrow{H_r}和反向match-LSTM輸出的隱含層向量Hr\overleftarrow{H_r}拼接起來即可。

(3-5)Hr=[HrHr]H^r=[\begin{matrix} \overrightarrow{H_r}\\ \overleftarrow{H_r} \end{matrix}] \tag{3-5}
其中Hr,HrϵRlP and HrϵR2lP\overrightarrow{H_r},\overleftarrow{H_r} \epsilon \mathbb{R}^{l*P} and H^r \epsilon \mathbb {R}^ {2l*P}

4.Answer Pointer Layer

將Match-LSTM Layer的輸出HrH^r作爲這一層的輸入。Match-LSTM 的 Answer Pointer Layer 層包含了兩種預測答案的模式:

  • Sequence Model 將答案看做是一個整數組成的序列,每個整數表示選中的 token 在原文中的位置,因此模型按順序產生一系列條件概率,每個條件概率表示基於上輪預測的 token 產生的下個 token 的位置概率,最後答案總概率等於所有條件概率的乘積。(其實有點懷疑這種方式產生的答案,人能讀得懂嗎?)
  • Boundary Model 簡化了整個預測答案的過程,只預測答案開始和答案結束位置,相比於 Sequence Model 極大地縮小了搜索答案的空間,最後的實驗也顯示簡化的 Boundary Model 相比於複雜的 Sequence Model 效果更好,因此 Boundary Model 也成爲後來的模型用來預測答案範圍的標配。

4.1.Sequence Model

序列模型不限定答案的範圍,即可以連續出現,也可以不連續出現,因此需要輸出答案每一個詞語的位置。又因答案長度不確定,因此輸出的向量長度也是不確定的,需要手動制定一個終結符。假設passage長度爲P,則終結符爲P+1。
pointer net網絡,實質上仍然是一個attention機制的應用,只不過直接將attention向量作爲匹配概率輸出。

(4-1-1)Fk=tanh(VHˉr+(Wahk1a+ba)ep+1)F_k=\tanh(V \bar H^r+(W^a \mathbf h_{k-1}^a + b^a) \otimes e_{p+1}) \tag{4-1-1}
(4-1-2)βk=softmax(vTFk+cep+1)\beta_k=softmax (v^TF_k + c \otimes e_{p+1}) \tag{4-1-2}
其中:

  • HˉrϵR2l(P+1)\bar H^r \epsilon \mathbb{R}^{2l*(P+1)}HrH^r與0向量的concat,即Hˉr=Hr:0]\bar H^r=H^r:0]
  • FkϵRl(p+1)hk1aϵRl×2lWaϵRl×lvϵRlbaϵRlcϵRF_k \epsilon \mathbb{R}^{l*(p+1)},\mathbf h_{k-1}^a \epsilon \mathbb{R}^{l×2l} , W^a \epsilon \mathbb{R}^{l×l},v \epsilon \mathbb{R}^{l}, b^a \epsilon \mathbb{R}^{l}, c \epsilon \mathbb{R}是一個實數
  • 這裏的hk1ah_{k-1}^a來自:
    hka=LSTM(HˉrβkTattention,hk1a)\mathbf h_k^a = \overrightarrow{\rm{LSTM}} ( \underbrace{\bar H^r \mathbf \beta_k^T}_{\color{blue}{\rm{attention}}}, \mathbf h_{k-1}^a)

答案a第k個詞對應passage位置爲:
(4-1-3)p(ak=ja1,a2,...,ak1,Hr)=βk,jp(a_k=j|a_1,a_2,...,a_{k-1},H^r)=\beta_{k,j} \tag{4-1-3}

也就是對於答案中的每個詞aia_i,其產生過程是:

  • 在P的末尾設置一個停止標記,如果選擇它,則停止迭代。新的HˉrR(m+1)×2h\bar H^r \in \mathbb R^{(m+1) \times 2h}
  • 先用上個狀態中的隱狀態輸出hk1ah^a_{k-1}、match-lstm的輸出結果HrH^r做attention,產生HrH^r的權重結果βk\beta_k;並將βk\beta_kattention權重向量作爲預測結果,用最大值的index作爲k狀態的答案輸出aka_k,如果預測的index是P+1則停止,答案生成完畢;
  • 將LSTM中的上一狀態hk1ah^a_{k-1},並用attention結果作爲輸入重新輸入LSTM,得到當前狀態隱狀態hkah^a_{k}
  • 步驟二和步驟三循環,直到步驟二中預測的index是P+1,或者超出設置的超參數(答案最長長度)。

Sequence Model的模型評判計算公式如下:
(4-1-4)p(aHr)=kp(aka1,a2,...,ak1,Hr)p(a|H^r)=\prod_k p(a_k|a_1,a_2,...,a_{k-1},H^r) \tag{4-1-4}
其中:
(4-1-5)p(ak=ja1,a2,...,ak1,Hr)=βk,jp(a_k = j | a1,a2,...,a_{k−1},H_r) = β_{k,j} \tag{4-1-5}
這裏公式中的p(aka1,a2,...,ak1,Hr)p(a_k|a_1,a_2,...,a_{k-1},H^r)表示的是最大的softmax值。

對上面公式4-1-4取對數函數,就得到了模型訓練loss:
(4-1-6)n1Nlogp(anPn,Qn)-\sum_{n-1}^{N}\log p(a_n|P_n,Q_n) \tag{4-1-6}

4.2.Boundary Model

邊界模型直接假設答案在passage中連續出現,因此只需要輸出起始位置s和終止位置e即可。基本結構同Sequence Model,只需要將輸出向量改爲兩個,並去掉終結符。那麼同理loss定義爲:
p(aHr)=p(asHr)p(aeas,Hr)p(\mathbf a \mid H^r) = p(a_s \mid H^r) \cdot p(a_e \mid a_s, H^r)
Boundary Model的計算步驟可以根據上面修改爲:

  • 先用上個狀態中的隱狀態輸出hk1ah^a_{k-1}、match-lstm的輸出結果HrH^r做attention,產生HrH^r的權重結果βk\beta_k;並將βk\beta_kattention權重向量作爲預測結果,用最大值的index作爲k狀態的起始位置asa_s或者aka_k
  • 將LSTM中的上一狀態hk1ah^a_{k-1},並用attention結果作爲輸入重新輸入LSTM,得到當前狀態隱狀態hkah^a_{k}
  • 步驟一和步驟二執行兩次,得到asa_saka_k

5.實驗

模型參數設置:

  • 隱藏層大小:150
  • 優化方法:Adamax(β1 = 0.9,β2 = 0.999)
  • minibatch:30
  • 沒有用L2正則

最終結果:
在這裏插入圖片描述

6.源碼解析

詳見 QA系統Match-LSTM代碼研讀

參考網址

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