QA(三): 複雜attention機制(coattention及bi-attention)

DCN-動態共同attention網絡

兩種模型都是類似的,不像前一篇文章介紹的soft attention機制,只是考慮query到context的attention

這裏兩篇論文都會考慮
query 到 context 和 context到query的attention
然後得到的attention回和原始的encoder向量進行作用,得到修正後的query和context的修正矩陣

然後這些修正後的矩陣和原始的encoder矩陣結合,進入到下面一層的模型預測層。

首先介紹的是coattebtion機制
DYNAMIC COATTENTION NETWORKS
https://arxiv.org/pdf/1611.01604.pdf
標籤:相關性矩陣,互爲attention,coattention
迭代,HMN,MLP
短文本效果佳

模型


這裏寫圖片描述
上圖是一個簡單的圖形,question 和 文本經過encoder之後,得到的向量經過 coattention機制在進行encoder,然後decoder得到結果

Passage AND QUESTION ENCODER

對文本passage 和question分別獨立進行encoder
Hp=LSTM(P)
Hq=LSTM(Q)

HpR[l,p],HqR[l,q]
l 是LSTMcell的隱藏層大小,p和q分別是文本passage 和 問題question的長度

然後每個向量後面加上一個特殊的向量,作爲模型的識別,得到

Hp=[Hp,hpθ]
Hq=[Hq,hqθ]

然後qustion經過一層非線性的網絡,得到最終的encoder矩陣:

Hq=tanh(WqHq+bq)

coattention encoder

首先計算一個相關性矩陣:

L=(Hp)THqR(p+1)(q+1)

然後利用相關性矩陣,可以計算passage裏面的每一個詞和question的attention分數 AQ
以及question裏面每一個詞和passage裏面每一個詞的attention分數 AP

AQ=softmax(L)
AP=softmax(LT)

這兩個都是相互的attention score,權重score需要和原始的矩陣機型相乘計算。
我們對文本passage 進行summary,然後經過attention後得到question的修正向量矩陣:

CQ=HpAQRl(n+1)

然後我們利用question矩陣 Hq 和 修正後的question矩陣CQ , 經過attention之後,得到修正後 的passage 矩陣:

CP=[Hq;CQ]APR2l(m+1)

這裏的CP 我們稱爲 question 和passage的共同依賴表示,也稱爲 coattention 文本

最後一步:
利用passage的原始encoder信息 Hp 和coattention 文本CP 進行concate,進過一個Bi-Lstm的序列,得到最終的encoder矩陣

ut=BiLSTM(ut1,ut+1,[hpt;cpt])

得到
U=[u1,u2,...,um]R2lm

整體的算法我們可以看

這裏寫圖片描述
很清晰的總結了encoder線路

DYNAMIC POINTING DECODER

目的是預測答案在原始passage裏面的start index 和 end index

之前講的方式有個確定就是,答案可能有很多種方式,所以直接利用softmax或者序列模型,可能陷入局部解

這裏對利用序列模型進行修正,增加適當的迭代,使得它能夠跳出局部解

假設我們的迭代是基於LSTM:
hi=LSTM(hi1,[usi1,uei1])

其中 usi,uei 是需要迭代的start 和 end index

下面我們介紹usi1,uei1usi,uei 的更新過程

計算usi,uei 也是用的softmax的方式,選擇權重最大的index

si=argmaxt(α1,...,αm)
ei=argmaxt(β1,...,βm)

start 和end的預估是獨立的。

其中αtβt 是利用 coattention encoder的向量ut 經過
Highway Maxout Netword計算的,它們的計算方式一致,但不共享參數

αt=HMNstart(ut,hi,usi1,uei1)
HMNstart(ut,hi,usi1,uei1)=max(W3[m1t;m2t]+b3)
r=tanh(WD[WD[hi;usi1;uei1]])
m1t=max(W1[ut;r]+b1)
m2t=max(W2m1t+b2)

其中r 是當前的向量經過forwart一層非線性層
m1t 是第一個maxout層
m2t 是第二個maxout層
然後m1t,m2t 聯合經過maxout層,得到HMN層
這樣的方式我們可以得到αt , βt


這裏寫圖片描述

實驗


這裏寫圖片描述

迭代的效果:


這裏寫圖片描述
看這兩個case,從上到下是迭代的過程,我們可以看到,剛開始迭代,和迭代幾步後它們的結果是不一樣的,
比如第一個case,第一步的迭代是從第5個詞開始,第22個詞介紹;到第3步,start=21,end=22,這個正是我們的正確結果。

不同類型問題的效果

文本的長度:
在長文本上面表現不佳

question type:

這裏寫圖片描述
when 最好,因爲簡單,
why 最差,因爲複雜

Bi-Attention

BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION
標籤:相關性矩陣,bi-attention
迭代,softmax,MLP

模型


這裏寫圖片描述

1. 底層 embedding 和 encoder機制基本一致:

不同的是這裏加了 Charactor的 embedding

2. Attention 層

Attention Flow Layer
和Coattention的做法類似,也要先計算一個相關性矩陣
在Coattention中

L=(HP)THq

這裏構造的相似性矩陣稍微複雜點:

Ltj=α(Hp:t,Hq:j)

這種 Hp:t 是Context的一個向量,Hq:j 是Query的一個向量
α 是一個函數:

α(p,q)=w[p,q,pq]
就是先將p,q,p和q逐個元素點乘的向量concatenation,然後乘以權重矩陣 w

下面計算 Bi-attention:

一. passage context 到 query的attention
作用:修正query encoder向量,每一個query的向量是context裏面每一個詞對query向量作用後的加權和

  1. 計算context到query的attention
    Ap=softmax(L)R[p,q]
  2. 每一個contxt裏面term的對於query權重係數
    at=Apt:
  3. 每一個詞的權重分別和query向量做元素相乘之後,把所有詞的結果向量相加,得到最終的query修正矩陣
    Hqt:^=jatjHq:j

簡單說就是,利用每個詞讀query的影響,整體修正query向量

二. query 到passage context的attention

  1. 計算 query對context裏面每個詞的 attention
    b=softmax(maxcol(L))R[p]

    maxcol 是矩陣列裏面最大的元素
  2. 利用attention對原始的context的每個詞進行修正,進行權重和後得到一個向量
    ĥ =tbtHpt:R[d]
  3. 然後直接對這個d維的向量複製q次,得到和query shape一致的矩陣
    Hp^=tileq(ĥ )

三. 對bi-attention向量進行統一處理
包含的信息:原始context encoder信息,用context to query attention修正後的query信息,用query to context attention修正後的context信息
Gt=β(Hpt,Hqt:^,Hp^)
β 是一個函數,可以時多層的forward 網絡,也可以是簡單的concatenation

本質上來說都是類似的機制

3. Modeling Layer

上衣層輸出的是一個矩陣G
可以將G通過兩層的bi-Lstm,得到ouput 舉證 M

4. Output Layer

利用獨立的softmax來預測start 和end index

p1=softmax(W1[G;M])

p2=softmax(W2[G;M])

然後total loss

L(θ)=1Nlog(py11)+(py22)

至於start 和end是否要獨立建模就不在這裏複述

實驗結果


這裏寫圖片描述
整體看來效果要稍微比coattention好點

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