《原始论文:Machine Comprehension Using Match-LSTM and Answer Pointer》
一、概述
《Machine Comprehension Using Match-LSTM and Answer Pointer》这篇论文介绍了一种端到端解决机器阅读理解问答任务的方法,结合了Match-LSTM和Pointer Net。
在Machine Comprehension(MC)任务中,早期数据库规模小,主要使用pipeline的方法;后来随着深度学习的发展,2016年,一个比较大规模的数据库出现了,即SQuAD。
该文是第一个在SQuAD数据集上测试的端到端神经网络模型。主要结构包括两部分:Match-LSTM和Pointer-Net,并针对Pointer-Net设计了两种使用方法,序列模型(Sequence Model)和边界模型(Boundary Model)。最终训练效果好于原数据集发布时附带的手动抽取特征+LR模型。
1、Match-LSTM
Match-LSTM是作者早些时候在文本蕴含(textual entertainment)任务中提出的模型,可参考《Learning natural language inference with LSTM》,其最先用来解决文本蕴含任务。
文本蕴含任务的目标是:给定一个 premise(前提),根据此 premise 判断相应的 hypothesis(假说)正确与否,如果从此 premise 能够推断出这个 hypothesis,则判断为 entailment(蕴含),否则为 contradiction(矛盾)。
Match-LSTM 模型先将 premise 和 hypothesis 分别输入到两个 LSTM 中,用对应 LSTM 的隐层输出作为 premise 和 hypothesis 中每个位置的表示(分别对应图中的
H
s
H^s
Hs 和
H
t
H^t
Ht)。
接着,分别对 hypothesis 中的每个词的表示,去捕获 premise 中重要的部分,即 Attention 过程,得到各自的上下文向量。
最后把 hypothesis中词的表示和其对应的 context 向量拼接在一起,输入到一个新的 LSTM 中,根据最后一个隐层输出来进行分类。
《Machine Comprehension Using Match-LSTM and Answer Pointer》论文中将 question 当做 premise,将 passage当做 hypothesis。
2、Pointer Net
Pointer Net 是 Vinyals 等人提出的一个序列到序列的模型,其用来实现从输入序列中找到相应的 tokens 来作为输出。其利用 Attention 作为 pointer,从输入序列中选择一个位置,并将这个位置所指向的词作为输出。
传统的阅读理解任务是根据文本从提供选项中选择答案,所以实际上是个分类问题。但 SQuAD 和 DuReader 等数据集要求的是一个长短不一的答案,而 Pointer Net 的运用可以解决这个问题。
Pointer Net 可分为 Sequence Model 和 Boundary Model 两种模型。
- 序列模型(Sequence Model)【基于词级别;用于机器翻译、文本摘要】:使用Ptr-Net网络,不做连续性假设,预测答案存在于原文的每一个位置;
- 边界模型(Boundary Model)【基于片段选择;用于片段式抽取阅读理解】:直接使用Ptr-Net网络预测答案在原文中起始和结束位置;
由于 Pointer Net 没有限定指向位置必须是连续的,所以 Sequence Model 给出的是答案在 passage 中出现的位置序号,而 Boundary Model 只预测答案的起始位置跟终止位置。在作者的阅读理解具体实验结果中,后者比前者效果更好。
3、论文历史意义
《Machine Comprehension Using Match-LSTM and Answer Pointer》这篇论文是神经网络运用于阅读理解的最早方法之一,十分经典,是常用的 baseline。
与之同一时间发表的 BiDAF 也同样具有重要的意义。
二、基于SQuAD数据集的通用模型架构
由于 SQuAD 的答案限定于来自原文,模型只需要判断原文中哪些词是答案即可,因此是一种抽取式的 QA 任务而不是生成式任务。
几乎所有做 SQuAD 的模型都可以概括为同一种框架:Embed 层,Encode 层,Interaction 层和 Answer 层。
- Embed 层负责将原文和问题中的 tokens 映射为向量表示;
- Encode 层主要使用 RNN 来对原文和问题进行编码,这样编码后每个 token 的向量表示就蕴含了上下文的语义信息;
- Interaction 层是大多数研究工作聚焦的重点,该层主要负责捕捉问题和原文之间的交互关系,并输出编码了问题语义信息的原文表示,即 query-aware 的原文表示;
- Answer 层则基于 query-aware 的原文表示来预测答案范围。图1展示了一个高层的神经 QA 系统基本框架。
三、Match-LSTM模型结构
在模型实现上,Match-LSTM 的主要步骤如下:
- Embed 层使用词向量表示原文和问题;
- Encode 层使用单向 LSTM 编码原文和问题 embedding;
- Interaction层对原文中每个词,计算其关于问题的注意力分布,并使用该注意力分布汇总问题表示,将原文该词表示和对应问题表示输入另一个 LSTM编码,得到该词的 query-aware 表示;
- 在反方向重复步骤 2,获得双向 query-aware 表示;
- Answer 层基于双向 query-aware 表示使用 Sequence Model 或 Boundary Model预测答案范围。
1、Embedding层
对 Passage 和 Question 分别进行Word Embedding。
Match-LSTM模型的输入由两部分组成:段落(Passage)和问题(Question)。
- Passage 使用一个矩阵 P [ d ∗ P ] P[d * P] P[d∗P]表示,其中 d d d 表示词向量维度大小, P P P 表示 Passage 中tokens的个数;
- Question 使用矩阵 Q [ d ∗ Q ] Q[d * Q] Q[d∗Q] 表示,其中 Q Q Q 表示 Question 中tokens的个数。
2、Encoder编码层(LSTM preprocessing Layer)
这层对passage和question进行预处理,得到其向量表示;
将 Passage 和 Question 分别喂给一个BiLSTM,获取所有Hidden states,这样可以使得 Passage 和 Question 都带有上下文信息。
LSTM preprocessing Layer的目的是将token的上下文信息包含到 passage 和 question 中的每个token的向量表示中。分别将 passage 和 question 输入LSTM preprocessing Layer,经过LSTM preprocessing Layer后,passage和question表示如下矩阵:
- H p H^p Hp 是 passage 的向量矩阵表示,其大小为 [ l ∗ P ] [l * P] [l∗P], l l l 表示隐藏层的节点个数;
- H q H^q Hq 是question的向量矩阵表示,其大小为 [ l ∗ Q ] [l * Q] [l∗Q], l l l 表示隐藏层的节点个数;
3、Interaction交互层(Match-LSTM Layer)【Attention + LSTM】
这一层的主要作用是获取 Question 和 Passage 交互信息,试图在 Passage 中匹配 Question
- 获取 Passage 中每一个单词对于 Question 中的注意力权重α,
- 然后将 α 与 Question Embedding相乘求和,获得 Passage 每个单词基于 Question 的新的表示方式。
这个时候再将 Passage 带入LSTM中,每个位置上就都具有 Question信息 、上下文信息(比上一层更丰富的上下文信息)。
下面来看看Match-LSTM中权重的计算方式,将LSTM preprocessing Layer的输出 H q H^q Hq、 H p H^p Hp 作为这一层的输入,如下图所示:
- H q H^q Hq 是 LSTM preprocessing Layer 里的 Question LSTM 输出的hidden states,
- h i p h^p_i hip 是 LSTM preprocessing Layer 里的 Passage LSTM 输出的 hidden states 的第 i i i 个值,
- L 是上一层LSTM的隐藏层数目。
- W q \textbf{W}^q Wq、 W p \textbf{W}^p Wp、 W r \textbf{W}^r Wr、 b p \textbf{b}^p bp、 w \textbf{w} w、 b \textbf{b} b 这些参数都是模型需要训练的参数
- G → i \overrightarrow{\textbf{G}}_i Gi 是中间结果
- h → i − 1 r \overrightarrow{\textbf{h}}^r_{i-1} hi−1r 表示第i-1个token的隐藏层输出,
- ⨂ e Q \bigotimes \textbf{e}_Q ⨂eQ 表示在列方向拓展Q列。
- α → i \overrightarrow{α}_i αi 表示在 passage 的第 $i 个 token 对 question 的 注意力权重向量。
这种 attention 被称为 BahdanauAttention。 Passage 中第
t
t
t 个上下文向量会根据 所有 Question 的隐向量 & Passage 中
t
−
1
t-1
t−1 时刻的上下文向量 来确定对Question 每个 token 的权重。可以把下图(BahdanauAttention结构)的 Y 理解为 passage,把 X 理解为question。
获得了权重
α
→
i
\overrightarrow{α}_i
αi 以后就要对上一层LSTM输出的 Passage 的上下文动手了:
- 给每个位置上添加各自对应的 Question 信息: H q ∗ α → i T \textbf{H}^q*\overrightarrow{α}^T_i Hq∗αiT。也就是将attention向量与原问题编码向量点乘,得到 passage中第 i i i 个 token 的 question 关联信息。
- 接着再与passage中第 i i i 个token的编码向量 h i p \textbf{h}^p_i hip 做 concat,拼接为一个向量 z → i \overrightarrow{\textbf{z}}_i zi。
将上述concat后的向量
z
→
i
\overrightarrow{\textbf{z}}_i
zi 再次喂给一个LSTM,以便获得加入了 Question 后更丰富的上下文信息。
将
P
P
P 个该隐藏层向量
h
i
r
→
\overrightarrow{\textbf{h}^r_i}
hir 拼接:
为了提取上下文信息,反方向也拼接:
将两者拼接得到Match-LSTM Layer的输出:
4、Pointer层(Answer作答层)
对于PointerNet网络,实质上仍然是一个attention机制的应用,只不过直接将attention向量作为匹配概率输出。
使用 Pointer-Net 从 Passage 中选取 tokens作为 Question的 answer, Sequence Model 和 Boundary Model的主要区别就在这一层。
Match-LSTM模型的输出即问题的答案有两种表示方法:
-
Sequence Model(基于词级别)【用于机器翻译、文本摘要】 :使用一系列整数数组 a = ( a 1 , a 2 , … ) a = (a_1, a_2,…) a=(a1,a2,…),其中 a i a_i ai 是 [ 1 , P + 1 ] [1, P+1] [1,P+1] 中的一个整数,表示在段落中某个token具体的位置,这里的整数数组不一定是连续的【Sequence Model 将答案看做是一个整数组成的序列,每个整数表示选中的 token 在原文中的位置,因此模型按顺序产生一系列条件概率,每个条件概率表示基于上轮预测的 token 产生的下个 token 的位置概率,最后答案总概率等于所有条件概率的乘积。】,当 a i a_i ai 取值为 P + 1 P+1 P+1 时,则答案生成终止。因此在 H r \textbf{H}^r Hr 的最后中加入了一列 0 0 0 向量,用来表示终止词,得到 H ~ r \widetilde{\textbf{H}}^r H r。;
-
Boundary Model(基于片段选择)【用于片段式抽取阅读理解】:假设答案是段落中一段连续的token组合,即仅使用两个整数来表示答案 a = ( a s , a e ) a = (a_s, a_e) a=(as,ae), a s a_s as 表示答案在段落中开始的位置, a e a_e ae 则表示结束位置, a s a_s as 和 a e a_e ae 是 [ 1 , P ] [1, P] [1,P] 中的整数 。【Boundary Model 简化了整个预测答案的过程,只预测答案开始和答案结束位置,相比于 Sequence Model 极大地缩小了搜索答案的空间】
这里将 Match-LSTM的输出 H ~ r \widetilde{\textbf{H}}^r H r (即上图最后一层的向量集合 { h → 10 r , h → 11 r , . . . } \{\overrightarrow{h}^r_{10},\overrightarrow{h}^r_{11},...\} {h10r,h11r,...}与 { h ← 10 r , h ← 11 r , . . . } \{\overleftarrow{h}^r_{10},\overleftarrow{h}^r_{11},...\} {h10r,h11r,...}) 作为这一层的输入,。
预测机制源于Pointer Network,这实际上还是一个Bahdanau Attention机制。我们再看看刚刚那个图,这里要将 X 理解为Passage,将 Y理解Answer就可以了。预测值基于上一刻的值和passage全文来决定。
也可以说这里将attention向量作为匹配概率输出,这个attention的大小等同于passage的长度。
- k只有2个取值,即start、end;
- H ~ r \widetilde{\textbf{H}}^r H r 是 Match-LSTM 最后的输出,即最后一层的向量集合 { h → 10 r , h → 11 r , . . . } \{\overrightarrow{h}^r_{10},\overrightarrow{h}^r_{11},...\} {h10r,h11r,...}与 { h ← 10 r , h ← 11 r , . . . } \{\overleftarrow{h}^r_{10},\overleftarrow{h}^r_{11},...\} {h10r,h11r,...};
- h k − 1 a \textbf{h}^a_{k-1} hk−1a :是PointerNet(指针网络)前一个时间步的隐状态向量;k只有2个取值,即start、end;
- PointerNet是一个只含有2个神经元的RNN;
- ⨂ e ( P + 1 ) \bigotimes \textbf{e}_{(P+1)} ⨂e(P+1) 表示在列方向拓展 P + 1 P+1 P+1 列,使得 h k − 1 a \textbf{h}^a_{k-1} hk−1a 与 H ~ r \widetilde{\textbf{H}}^r H r 维度一致。
- c \textbf{c} c 表示经过了Attention后的上下文向量
- β k , j β_{k,j} βk,j 表Passage 里的第 j j j 个 token(共 P + 1 P+1 P+1 个) 作为答案中第 k k k 个token的概率【在Boundary Model 模型中, k k k 表示 start、 k + 1 k+1 k+1表示 end)】;
- β k , ( P + 1 ) β_{k,(P+1)} βk,(P+1) 表示答案中第 k k k 个 token作为答案结束位置的概率;
- 根据得到的 H ~ r \widetilde{\textbf{H}}^r H r、 β k β_k βk、 h k − 1 a \textbf{h}^a_{k-1} hk−1a 更新指针网络得到 h k a \textbf{h}^a_k hka;
- 根据 h k a \textbf{h}^a_k hka 再次计算得到的 F k + 1 \textbf{F}_{k+1} Fk+1
- 根据 F k + 1 \textbf{F}_{k+1} Fk+1 计算得到 β ( k + 1 ) β_{(k+1)} β(k+1) 即为答案中的第 k + 1 k+1 k+1 个 token 在源文本所有 P + 1 P+1 P+1个token上的概率分布,得分最高的为 答案 t o k e n k + 1 a n s w e r token^{answer}_{k+1} tokenk+1answer 【在Boundary Model 模型中, k k k 表示 start、 k + 1 k+1 k+1表示 end)】所在的位置;
1、Sequence Model最终计算概率
Sequence Model的答案定位计算公式如下:
其中:
k
k
k 是
[
1
,
P
+
1
]
[1, P+1]
[1,P+1] 中某个值,当
k
=
P
+
1
k=P+1
k=P+1 时,表示答案迭代计算答案位置概率结束。
2、Boundary Model 最终计算概率
Boundary Model 最后生成2个位置,即:start 和 end,用来表示生成序列的开始、结尾。
因为boundary model只需要生成答案的起始和终止位置,因此不用在 H r \textbf{H}^r Hr 最后加入一个零向量来表示答案生成结束。
生成答案序列的概率模型如下(答案定位计算公式):
最后的实验显示在片段抽取式阅读理解任务中,简化的 Boundary Model 相比于复杂的 Sequence Model 效果更好,因此 Boundary Model 也成为后来的模型用来预测答案范围的标配。
四、实验结果
参考资料:
【论文】Match-LSTM 机器阅读理解
Match-LSTM 阅读笔记
机器阅读理解Match-LSTM模型
跟我学算法-match-LSTM(向唐老师看齐)
QA系统Match-LSTM代码研读
Match-LSTM & BiDAF
Match-LSTM阅读理解论文笔记Machine Comprehension Using Match-LSTM and Answer Pointer
《MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER》阅读笔记
论文分享 - Machine Comprehension Using Match-LSTM and Answer Pointer
QA(二):利用Attention机制,带着问题阅读