由于 SQuAD 的答案限定于来自原文,模型只需要判断原文中哪些词是答案即可,因此是一种抽取式的 QA 任务而不是生成式任务。几乎所有做 SQuAD 的模型都可以概括为同一种框架:Embed 层,Encode 层,Interaction 层和 Answer 层。Embed 层负责将原文和问题中的 tokens 映射为向量表示;Encode 层主要使用 RNN 来对原文和问题进行编码,这样编码后每个 token 的向量表示就蕴含了上下文的语义信息;Interaction 层是大多数研究工作聚焦的重点,该层主要负责捕捉问题和原文之间的交互关系,并输出编码了问题语义信息的原文表示,即 query-aware 的原文表示;最后 Answer 层则基于 query-aware 的原文表示来预测答案范围。图1展示了一个高层的神经 QA 系统基本框架。
图1 一个高层的神经 QA 系统基本框架
1 Match-LSTM模型架构图2展示了Match-LSTM模型架构图。
图2 Match-LSTM模型架构图
在模型实现上,Match-LSTM 的主要步骤如下:
- Embed 层使用词向量表示原文和问题;
- Encode 层使用单向 LSTM 编码原文和问题 embedding;
- Interaction层对原文中每个词,计算其关于问题的注意力分布,并使用该注意力分布汇总问题表示,将原文该词表示和对应问题表示输入另一个 LSTM编码,得到该词的 query-aware 表示;
- 在反方向重复步骤 2,获得双向 query-aware 表示;
- Answer 层基于双向 query-aware 表示使用 Sequence Model 或 Boundary Model预测答案范围。
Match-LSTM模型的输入由两部分组成:段落(passage)和问题(question)。passage使用一个矩阵P[d * P]
表示,其中d
表示词向量维度大小,P
表示passage中tokens的个数;question使用矩阵Q[d * Q]
表示,其中Q
表示question中tokens的个数。
Match-LSTM模型的输出即问题的答案有两种表示方法,其一是使用一系列整数数组a = (a1, a2,…)
,其中ai
是[1, P]
中的一个整数,表示在段落中某个token具体的位置,这里的整数数组不一定是连续的,对应Sequence Model ;第二种表示方法是假设答案是段落中一段连续的token组合,即仅使用两个整数来表示答案a = (as, ae)
,as
表示答案在段落中开始的位置,ae
则表示结束位置,as
和ae
是[1, P]
中的整数,对应Boundary Model 。
故对Match-LSTM模型的训练集样本来说,其可用下面的三维数组来表示:
从图2可知,一个基本的Match-LSTM模型应该包含以下三层结构:
- LSTM preprocessing Layer:这层对passage和question进行预处理,得到其向量表示;
- Match-LSTM Layer:这层试图在passage中匹配question;
- Answer Pointer(Ans-Ptr) Layer:使用Ptr-Net从passage中选取tokens作为question的answer, Sequence Model 和 Boundary Model的主要区别就在这一层。
LSTM preprocessing Layer
LSTM preprocessing Layer的目的是将token的上下文信息包含到passage和question中的每个token的向量表示中。分别将passage和question输入LSTM preprocessing Layer,经过LSTM preprocessing Layer后,passage和question表示如下矩阵:
Hp
是passage的向量矩阵表示,其大小为[l * P]
,l表示隐藏层的节点个数;Hq
是question的向量矩阵表示,其大小为[l * Q]
。
Match-LSTM Layer
将LSTM preprocessing Layer的输出作为这一层的输入,计算公式如下:
其中,,这些参数都是模型需要训练的参数,是中间结果,表示第i-1个token的隐藏层输出,表示在列方向拓展Q列。
对于Gi
公式的维度变化:
[l Q] = [l l] [l Q] + ([l l] [l 1] + [l l] [l 1] + [l 1]) |Q|;
对于ai公式的维度变化:
[1 Q] = ([1 l] [l Q] + 1 * |Q|)。
ai
表示在passage的第i
个token对question的注意力权重向量。
将注意力权重向量与question向量的乘积和passage中第i
个token的隐藏层输出向量拼接成一维向量Zi
,公式如下:
其中,向量维度分别为:
将向量Zi作为一个LSTM层的输入,得到
其中,隐藏层向量维度为:
将P
个该隐藏层向量拼接成,为了提取上下文信息,反方向构建,将两者拼接得到Match-LSTM Layer的输出:
Answer Pointer Layer
将Match-LSTM Layer的输出Hr
作为这一层的输入。
Match-LSTM 的 Answer Pointer Layer 层包含了两种预测答案的模式,分别为 Sequence Model 和 Boundary Model。Sequence model提供的是一系列答案序列,但这些答案系列不一定在原文中是连续的;Boundary model是提供答案的开始与截止位置,在这两个位置中间所有的字就都是答案。Sequence Model 将答案看做是一个整数组成的序列,每个整数表示选中的 token 在原文中的位置,因此模型按顺序产生一系列条件概率,每个条件概率表示基于上轮预测的 token 产生的下个 token 的位置概率,最后答案总概率等于所有条件概率的乘积。Boundary Model 简化了整个预测答案的过程,只预测答案开始和答案结束位置,相比于 Sequence Model 极大地缩小了搜索答案的空间,最后的实验也显示简化的 Boundary Model 相比于复杂的 Sequence Model 效果更好,因此 Boundary Model 也成为后来的模型用来预测答案范围的标配。
Sequence Model的答案定位计算公式如下:
k
是[1, P+1]
中某个值,当k=P+1
时,表示答案迭代计算答案位置概率结束。
Boundary Model的答案定位计算公式如下:
2 实验模型参数设置如下:
- 隐藏层大小:
150
- 优化方法:
Adamax(β1 = 0.9,β2 = 0.999)
- minibatch:
30
- 没有用L2正则
实验结果对比如图3所示:
图3 各模型实验对比结果
3 参考文献[1] 目前(2017年)机器阅读技术发展得如何?能达到什么水平?有哪些应用? [2017-05-22]. https://www.zhihu.com/question/59280791/answer/172363224
[2] Wang S, Jiang J. Machine Comprehension Using Match-LSTM and Answer Pointer[J]. 2016.
热门评论