Multihop Atention Networks for QA Matching

文章鏈接:MAN

原作代碼地址:pytorch

出處:SIGIR’18, July 8-12, 2018, Ann Arbor, MI, USA

推薦理由:

  1. 作者在introduction和related work中把前人的工作介紹得非常詳細,誠意滿滿,至少在我眼裏看來並不是在划水,比較適合入門。
  2. 作者想法比較新穎,利用動態記憶網絡(DMNS)的思想進行建模,同時作者摒棄了在AS任務中用co-attention進行交互這種比較火的做法,堅持用one-way attention建模。
  3. 文章結構比較清晰易懂,並且有開源代碼,但是也要吐槽一下文中代碼的位置真的超級不明顯,只是驚鴻一瞥讀文章的同學大概是找不到的,作者的代碼只是工程任務的代碼,算不上是嚴格意義的代碼,anyway,向開放源碼的前輩致敬!

下面就開始詳細的介紹論文了!

首先作者diss了以往注意力存在的缺點:以往基於注意力的方法的一個共同特點是,問題由一個特徵向量表示,並應用一輪注意力來學習答案的表示。然而,在許多情況下,答案的不同部分可能與問題的不同部分有關。作者根據這一點展開本文的工作,構建一個attention,也就是標題說的multihop attention來獲得問題的不同部分的語義,然後再通過sequentional attention獲得答案的語義表示;進行多次匹配得出score,最後將score相加得到最終的score表示。

文章中介紹了四種Attention:

  • MLP Attention

其實MLP Attention相當於一個加法注意力機制,這裏將問題的表示和答案的表示進行相加然後再通過一個relu_mlp進行激活,然後用softmax進行歸一化得到attention權重。至於這裏爲什麼問題向量用 O_{q} 來表示,而答案向量用 h_{a}(t) 來表示呢?因爲文中O_{q}其實是表示問題的某一個部分,它的維度爲(batch_size, 1, 2*dim),h_{a}(t)則表示答案每個timestep的向量表示,它的維度也爲(batch_size, 1, 2*dim)

  • Bilinear Attention

Bilinearl Attention就是我們常說的co-attention,也是在AS任務中比較火的attention,反正從一些出名的模型的消融實驗分析可以看出這部分是很重要的, o_{q}^{T}W_{s}h_{a}(t) 其實就是在構建一個詞級相似度矩陣,當然詞級相似度矩陣還有這種簡單的o_{q}^{T}h_{a}(t)形式。

  • Sequential Attention

Sequential Attention最早用在閱讀理解上,作者在本文中也證明了Sequential Attention在AS任務中的有效性。Sequential Attention主要是考慮了上下文的聯繫這樣可以爲向量表示帶來語境信息,其實,看過Wang(IARNN)的同學可能會發現,Sequential Attention其實和IARNN-Word如出一轍, \gamma_{t} 是問題向量與答案向量的點積,然後再送入BiLSTM中,接着將lstm的輸出進行一個softmax得到權重 \alpha ,最後作者將權重與答案向量相乘求和得到經過attention後的答案向量。

  • Self-Attention

Self-Attention的作用是捕獲句子的全局位置結構信息,從上面的公式我們可以很容易就知道所謂自注意力就是自己和自己玩,Self-Attention現在也是用的比較多的attention機制,在自然語言的各個領域都大放異彩,比較有名的比如說google那幫大佬的Attention is all you need,NLI領域的A Structured self attention等

我們可以看到模型的總體結構圖,圖(b)是基於Sequential Attention的模型,圖(d)是基於Self-Attention的模型,圖(a),圖(c)則是圖(b),圖(d)的局部表示。

h_{q}(t) 相當於問題每個timestep的向量,(9)中的三個公式告訴我們三件事情,第一, S_{t}^{(k)} 就是通過帶tanh的前饋網絡計算出來的;第二,\alpha_{t}^{(k)}就是根據老套路,經過softmax得來的;第三,我們的重點在於更新o_{q}^{(k)},求和相當於壓縮成長度爲1的向量了,也就是我們關注到了問題中的一個重要的部分了。那麼這個流程是怎麼啓動的呢?看下面公式:

首先更新 o_{q}^{0} ,o_{q}^{0}相當於把lstm的輸出做一個mean-pooling操作,而m_{q}^{(0)}就等於o_{q}^{0},這樣一來二去,這個流程就說得通了。細心的同學可以發現,這其實和NLI領域的A Structured self attention裏面的做法很相似,但是明顯本文的attention更加複雜。

計算出了問題向量,那如何得出答案向量呢?畢竟我們最後是要做一個相似度匹配的啊。看下圖:

其實,這就是Sequential Attention的一個結構圖,在本文中,我們只不過把圖中的 o_{q} 替換成o_{q}^{(k)}了,這樣我們也不難得到最後的o_{a}^{(k)}了,然後就是對應paper的中心——Multihop!

作者經過實驗,發現K=2是最好的。

實驗結果

總結:

1.個人覺得直接把最後的結果相加是有點問題的,比如說,在AS任務中,我們希望凸顯的是句子相似的部分,所以我們更希望9+1>5+5,但是在本文中9+1 = 5+5,我覺得這應該可以成爲未來改進的地方。

2.用tensorflow實現了模型,發現運行速度很慢,我覺得應該是問題那部分的attention的原因吧,畢竟太複雜了。在wikiQA數據集上,實現了Multihop-self-LSTM的效果,但是Multihop-sequential-LSTM的效果一直沒達到。

3.後續會放上github

歡迎關注我的知乎專欄QA答案選擇-Read&Share

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