基于双向注意力的阅读理解(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都基于相同的相似度矩阵
,其中H表示context embedding,U表示query embedding。
表示context的第t个时刻和query的第j个时刻的相似度,具体如下:
其中,
是可训练标量,
,
表示H的第t列,即第t个时刻的向量,同样,
表示U的第j列,即第j个时刻的向量.可选的,
,
是一个可训练权重向量。
context-to-query attention
context-to-query(C2Q)目的是得到context的每个词中,与query各个词的相关性。
令
表示第t个context word与query各个词的attention权重,其中
(这里应该是所有j的和为1,作者写的是all t,应该是写错了)。
,因此
query-to-context attention
query-to-context attention(Q2C)目的是得到query的每个词中,与其最相似的context word,这是回答query的一个重要参考。
首先,使用
获得context words的attention权重。其次,
.此向量表示上下文中相对于query而言最重要的单词的加权和.
在列维度上复制T次得到
.
最后,对上述向量进行拼接得到
,特别地,可令
Modeling Layer
将上一步的G作为输入,使用bi-LSTM得到输出 。
Output Layer
QA任务需要模型从paragraph中找到一个子序列来作为query的答案。因此,output layer的目的是预测开始索引和结束索引。
training loss使用两个索引的交叉熵损失的和,即
测试阶段:当
取得最大值时,使用answer span(k,l)作为query的答案,其中