本文是ACL 2017的一篇文章,用更细粒度的gated-attention对背景文章和问题进行计算。作者是CMU的Graduate Research Assistant: Bhuwan Dhingra。文章的相关工作部分总结的很好,代码实现可以参考[GitHub]。
本文针对的是MRC任务中的Cloze-Style类型,翻译过来是叫完形填空,但是与英语考试不同,这里是指只用一个单词来回答的阅读理解。
我们可以把问题描述为一个三元组(d,q,a):
答案是来自构建好的词汇表中的一个词,也就是token。总结一下就是,根据文档-问题对(d,q),从词汇表中找到最合适的词项作为答案a。
作者发现,之前的MRC神经网络模型有一个问题——模型会对原文中的某个部分的注意力特别大,以至于对整篇文章的理解不够完整。并且之前的工作把query attention应用到token(Hermann et al., 2015; Chen et al., 2016)和sentence(Weston et al., 2015)两个层次上,本文希望用更细粒度的attention计算方式,获取document和query更多的语义信息。
用Bi-GRU获取document和query每一个词项的信息,两部分词项之间两两做元素相乘,这样的操作做K次,到第K层的时候,document的词向量与query的词向量做内积运算,得到最终的向量表示,然后过soft Max层得到词项的概率分布,选document中概率最大的词项作为answer输出。
输入:document和query分词后的tokens序列
输出:概率最大的answer
输入:tokens
输出:tokens的向量表示
运算关系:这里就是一个Lookup Table,用全连接训练词向量
输入: X 1 = [ x 1 1 , x 2 1 , . . . , x T 1 ] X^1 = [x^1_1,x^1_2,...,x^1_T] X1=[x11,x21,...,xT1]
输出:
运算关系:见Bi-GRU结构,不详细介绍。
输入: E 1 = [ e 1 1 , e 2 1 , . . . , e T 1 ] , q 1 E^1 = [e^1_1,e^1_2,...,e^1_T], q^1 E1=[e11,e21,...,eT1],q1
输出:下一层的输入 X 2 X^2 X2
运算关系: X 2 = E 1 ⊙ q 1 X^2 = E^1 \odot q^1 X2=E1⊙q1
输入: E K , q K E^K, q^K EK,qK
输出:document中tokens的概率分布 s K s_K sK
运算关系: s K = e x p < q K , e K > / ∑ e x p < q K , e K > s_K = exp{{<q^K, e^K>}} / \sum exp{<q^K, e^K>} sK=exp<qK,eK>/∑exp<qK,eK>
得到概率最大的answer最为最终的输出。
训练集用的CNN/Daily Mail 和 who did what,详情如下:
在CNN/Daily Mail上,效果比BiDAF提升了一个多点,细粒度的gated-attention取得了一些效果,但是在who did what数据集上并未有多大提升。
实验部分给出了一些可视化的attention结果:
图中高亮的部分是背景文章针对问题时的最后一层注意力所关注的tokens。
本文提出的Gated Attention用更细粒度的attention计算获得answer的定位,收获了一定的效果,并且使用Multi-Hop的结构,带着问题重读文章K次,增量式地重新得到tokens的表示,可以进一步帮助锁定答案。但是可以看出,在CNN/Daily Mail比在who did what数据集上提升的多,这就跟数据集本身有关了。所有的模型也都是建立在数据集的特点上的,仔细研读数据,研究其语言学的特征也是很重要的一个环节。