Stanford Attentive Reader是斯坦福在2016年的ACL会议上的《A Thorough Examination of the CNN/Daily Mail Reading Comprehension Task》(论文地址,GitHub源码,代码要求Python 2.7,Theano >= 0.7,Lasagne 0.2.dev1
,代码整体风格非常简洁易懂)发布的一个机器阅读理解模型,这篇论文通过设计一个基于双线性匹配函数的深度学习模型,完成在CNN&Daily Mail完形填空式数据集上的机器阅读理解任务,Stanford Attentive Reader的性能要比上篇博文《ASReader:一个经典的机器阅读理解深度学习模型》中ASReader模型和《CNN&Dailymail:Teaching Machines to Read and Comprehend》的Attentive Reader模型性能更好。
这篇论文不仅探索了深度学习神经网络在机器阅读理解的应用,还构建了一个基于boosted决策树森林的机器阅读理解模型,下面我们就这两种方法进行分析,同时给出模型基本实验设置以及实验结果,实验数据集是CNN&Dailymail,在《CNN&Dailymail:Teaching Machines to Read and Comprehend》有详细介绍,这里就不再赘述了。
由于数据集是完形填空式,且答案一定是实体类单词,所以特征一般围绕文档中实体来提取的。通过特征工程构建每个实体类单词e
的特征向量f_p,q(e)
,其中q
表示文章(passage),q
代表问题(question),特征工程中包含的特征有:
将机器阅读理解看成是一个排序问题,并使用RankLib
包的LambdaMART
来构建boosted决策树森林模型。
图1展示了Stanford Attentive Reader模型结构图。
图1 Stanford Attentive Reader模型结构图
首先基于所有的文章和问题中构建一个词向量矩阵E
,E
的维度为d * |V|
,d
代表词向量的维度,|V|
表示词字典大小;然后对文章(passage)和问题(question)进行编码(encode)。对于passage的编码,使用了一个单层双向GRU,对于文档中每个词用GRU正向隐藏层的输出与GRU反向隐藏层的输出的拼接向量来表示,这时候的拼接向量包含了这个词的上下文信息,过程如下图所示:
passage编码后可表示为:
对于question的编码,由于问题一般比文档要短很多,所以这时候将问题看作一个整体,同样使用了一个单层双向GRU来encode,但这时候不考虑每个词的隐藏层的输出,而是只考虑正向GRU最后的输出与反向GRU最后的输出,将这两个输出拼接作为问题的encode向量,用q
来表示。
这一层的目标是计算文章中每个实体词的embedding表示p_i
与问题embedding表示q
的相关度,并选择与问题最相关的实体词作为问题答案。不同ASReader模型的求点积,Stanford Attentive Reader使用了双线性函数作为匹配函数,然后累加相同词在不同文章不同位置的相似度。双线性函数可以计算q
和p_i
之间的相似性,比用点积更灵活。计算公式如下:
其中,W_s
即为双线性项,其维度为h * h
,h
为单层双向GRU隐藏层大小,O
为这一层的输出向量,代表了文章中所有单词的带attention的embedding表示。
双线性函数的核心代码:
import theano.tensor as T
def get_output_for(self, inputs, **kwargs):
# inputs[0]: batch * len * h
# inputs[1]: batch * h
# W: h * h
M = T.dot(inputs[1], self.W).dimshuffle(0, 'x', 1)
alpha = T.nnet.softmax(T.sum(inputs[0] * M, axis=2))
if len(inputs) == 3:
alpha = alpha * inputs[2]
alpha = alpha / alpha.sum(axis=1).reshape((alpha.shape[0], 1))
return T.sum(inputs[0] * alpha.dimshuffle(0, 1, 'x'), axis=1)
不同于原有模型用一层非线性层对O
和question embedding进行结合再做预测,而是直接在O
上加一层softmax层计算概率最大的答案,计算公式如下:
从同一年的ACL会议两篇论文分析发现,Stanford Attentive Reader模型与ASReader模型步骤基本一致,只是在Attention层中,匹配函数有所不同,说明在CNN&Dailymail数据集上的机器阅读理解模型在这个时候模型基本无太大差异,重要的研究点在于匹配函数。
损失函数:-logP(a | q, d) |
同时对于基于boosted决策树森林的机器阅读理解模型,实验分析了不同特征对模型的影响。图2展示了在CNN数据集中模型的特征消融分析实验结果,Accuracy表示从特征工程中排除相应特征后的准确性,准确率越低表示对应特征越重要,从图2可以看出,词频特征和n-gram特征最重要。
图2 CNN数据集中模型的特征消融分析实验结果