QA(三): 复杂attention机制(coattention及bi-attention)

来源:互联网 发布:it培训评价网 编辑:程序博客网 时间:2024/05/22 00:44

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好点

原创粉丝点击