1. 程式人生 > >論文選讀二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification

論文選讀二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification

論文選讀二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification

目前,閱讀理解通常會給出一段背景資料,據此提出問題,而問題的答案也往往在背景資料裡。不過背景資料一般是一篇文章,或者是文章的一個段落。而對於多篇文章,特別是多篇相近文章時,當前的模型效果就不那麼明顯了。本文即針對此問題提出的解決方案。此文提出的模型包含三個部分:答案提取模組,答案評價模組,與答案交叉驗證模組。

本文提出一個假設:問題的正確答案往往會出現在多篇文章中,且有通性,而不正確的答案則通常會與眾不同。

(這個場景正對應我們平常在搜尋引擎中的搜尋。當鍵入我們想要找的內容,會命中很多內容,而通常其中只有一項是我們真正需要的,因此我們會多個答案對比,從而找到最終想要的。)

本文提出的模型即基於這個假設。當提出一個問題後,有多篇文章命中,或者說針對多篇文章提出一個問題,首先分別在每篇文章中提取回答,即確定候選回答在文章中的位置;其次, 用打分函式對每個答案進行打分,即對每個候選回答的內容進行評價,最後,再對比每個回答,讓每個回答相互驗證。這三步會共同決定最終的答案。

對於給定的問題Q與對應的文章集\(\{P_i\}\),我們希望找到Q最恰當的答案。

第一個模組:

編碼:將所有單詞向量化(主要是字元向量和與詞向量拼接),然後,用biLSTM處理問題與文章集:
\[ u_t^Q = BiLSTM_Q(u_{t-1}^Q, [e_t^Q, c_t^Q])\\ u_t^{P_i} = BiLSTM_P(u_{t-1}^{P_i},[e_t^{P_i},c_t^{P_i}]) \]


其中\(e_t, c_t\)分別是第t個詞的詞向量與字元向量,可以看出,每篇文章是單獨訓練的。

Q-P Matching: 接下來將Q 與Ps聯絡起來,目前來說,就一定是context-to-question attention layer了。 這裡使用的是attention flow layer產生一個混淆矩陣:
\[ S_{t,k} = u_t^{Q^T}\cdot u_k^{P_i} \]
接下來按 Seo et al的方法得到 c2q attention:
\[ a_t = softmax(S_{t:})\\ \tilde{U}_{:t}^{P_i} = \sum_j a_{tj}\cdot U_{:j}^{P_i} \]


然後,再經過一biLSTM得到新的內部表示:
\[ v^{P_i}_t = BiLSTM_M(v_{t-1}^{P_i}, \tilde{u}_t^{P_i}) \]
Answer Boundary Prediction: 有了上述的內部表示,第一個模組終於可以給出答案在文章中位置的預測了:
\[ g_k^t = w_1^{aT}\tanh (W_2^a [v_k^P, h_{t-1}^a])\\ \alpha_k^t = \exp(g_k^t)/\sum_{j =1 }^{|P|}\exp(g_j^t)\\ c_t = \sum_{k = 1}^{|P|} a_k^t\cdot v_k^P\\ h_t^a = LSTM(h_{t-1}^a,c_t) \]
則第一部分的loss:
\[ L_{boundary} =- \frac{1}{N}\sum_{i = 1}^N (\log\alpha_{y_i^1}^1 +\log\alpha_{y_i^2}^2) \]
其中$y_i^1,y_i^2為第i篇文章的起點與終點。

第二模組:

此模組對上一模組得到的候選答案進行評分,對每個候選答案的每個詞判斷其是否在應該出現在答案中:
\[ p_k^c = sigmoid(w_1^c ReLU(W_2^2v_k^{P_i})) \]
此為第k個詞出現在答案中的概率。

那損失為:
\[ L_{content} = - \frac{1}{N}\frac{1}{|P|}\sum_{i=1}^N\sum_{j = 1}^{|P|}[y_k^c \log p_k^c + (1 - y_k^c)\log(1 - p_k^c)] \]

第三模組:

這一模組對所有候選答案進行attention,從而找到最佳答案. 每篇文章的候選答案可以這樣表示:
\[ r^{A_i} = \frac{1}{|P_i|} \sum_{k = 1}^{|P_i|}p_k^c[e_k^{P_i},c_k^{P_i}] \]
應用attention:

\[ \begin{equation} s_{i,j} = \left\{ \begin{array}{lr} 0, \ \ \ \ if\ \ i = j, & \\ r^{A_i^T}\cdot r^{A_j}, \ \ \ \ otherwise, & \end{array} \right. \end{equation} \\ \alpha_{i,j} = \exp(s_{i,j})/\sum_{k = 1}^n \exp(s_{i,k})\\ \tilde{r}^{A_i} = \sum_{j = 1}^n \alpha_{i,j}^{A_j}\\ p_i^v = \exp(g_i^v)/ \sum_{j = 1}^n \exp(g_j^v)\\ L_{verify} = -\frac{1}{N}\sum_{i = 1}^N\log p_{y_i^v}^v \]

最後,整個模型的損失:

\[ L = L_{boundary} + \beta_1 L_{content} + \beta_2 L_{verify} \]

其中\(\beta_1, \beta_2\)為超參。

評:

本文對多篇文章的閱讀理解,使用attention的方式選擇是最優答案,是一個不錯的思路。