paper解讀:Bi-Directional Attention Flow For Machine Comprehension

基於雙向注意力的閱讀理解(ICLR2017,引用800多,入門閱讀理解可以看這篇)
paper: https://arxiv.org/abs/1611.01603
code: https://github.com/allenai/bi-att-flow

模型框架

模型主要框架如下圖所示:
在這裏插入圖片描述

包括六個部分:
Character Embedding Layer:使用character-level CNNs將詞轉換成向量;
Word Embedding Layer:使用預訓練的word embedding模型將詞轉換成向量,如glove等;
Contextual Embedding Layer:利用周圍單詞的上下文提示來完善單詞的嵌入,如Bi-LSTM。同時應用於query和context;
Attention Flow Layer:將query向量和context向量耦合,包括query2context attention和context2query attention;
Modeling Layer:使用RNN模型學習上下文表示;
Output Layer:得到query的答案。
值得注意的是,前三步在不同粒度下計算query和context的特徵,這有點像計算機視覺領域的CNN中的多階段特徵計算的過程。

雙向注意力流

下面具體講一下Attention Flow Layer.
在這一步中,作者計算兩個方向的attention:從context到query以及query到context。這兩個方向的attention都基於相同的相似度矩陣SRT×JS\in R^{T\times J},其中H表示context embedding,U表示query embedding。St,jS_{t,j}表示context的第t個時刻和query的第j個時刻的相似度,具體如下:
St,j=α(H:t,U:j)RS_{t,j}=\alpha(H_{:t},U_{:j})\in R
其中,α\alpha是可訓練標量,HR2d×T,UR2d×JH\in R^{2d\times T}, U\in R^{2d\times J}H:tH_{:t}表示H的第t列,即第t個時刻的向量,同樣,U:jU_{:j}表示U的第j列,即第j個時刻的向量.可選的,α(h,u)=wST[h;u;hu]\alpha(h,u)=w^T_S[h;u;h\circ u]wSTR6dw^T_S\in R^{6d}是一個可訓練權重向量。

context-to-query attention

context-to-query(C2Q)目的是得到context的每個詞中,與query各個詞的相關性。
atRJa_t\in R^J表示第t個context word與query各個詞的attention權重,其中jatj=1\sum_ja_{tj}=1(這裏應該是所有j的和爲1,作者寫的是all t,應該是寫錯了)。at=softmax(St:)RJa_t=softmax(S_{t:})\in R^J,因此U~:t=jatjU:j\widetilde U_{:t}=\sum_ja_{tj}U_{:j}

query-to-context attention

query-to-context attention(Q2C)目的是得到query的每個詞中,與其最相似的context word,這是回答query的一個重要參考。
首先,使用b=softmax(maxcol(S))RTb=softmax(max_{col}(S))\in R^T獲得context words的attention權重。其次,h~=tbtH:tR2d\widetilde h=\sum_tb_tH_{:t}\in R^{2d}.此向量表示上下文中相對於query而言最重要的單詞的加權和. h~\widetilde h在列維度上覆制T次得到H~R2d×T\widetilde H\in R^{2d\times T}.
最後,對上述向量進行拼接得到G:t=β(H:t,U~:t,H~:t)RdGG_{:t}=\beta (H_{:t},\widetilde U_{:t},\widetilde H_{:t})\in R^{d_G},特別地,可令β(h,u~,h~)=[h;u~,hu~;hh~]\beta(h,\widetilde u,\widetilde h)=[h;\widetilde u,h\circ \widetilde u;h\circ \widetilde h]

Modeling Layer

將上一步的G作爲輸入,使用bi-LSTM得到輸出MR2d×TM\in R^{2d\times T}

Output Layer

QA任務需要模型從paragraph中找到一個子序列來作爲query的答案。因此,output layer的目的是預測開始索引和結束索引。
p1=softmax(wp1T[G;M])p^1=softmax(w^T_{p^1}[G;M])
p2=softmax(wp2T[G;M])p^2=softmax(w^T_{p^2}[G;M])
training loss使用兩個索引的交叉熵損失的和,即
L(θ)=1NiNlog(pyi11)+log(pyi22)L(\theta)=-\frac{1}{N}\sum^N_ilog(p^1_{y^1_i})+log(p^2_{y^2_i})
測試階段:當pk1pl2p^1_kp^2_l取得最大值時,使用answer span(k,l)作爲query的答案,其中klk\leq l

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