论文地址:Machine Comprehension Using Match-LSTM and Answer Pointer
背景
阅读理解任务
后面会详细补充。
传统解决问答的方法:语言分析、特征工程等,具体包括句法分析、命名实体识别、问题分类、语义分析等。
Squad数据集
- 答案是文章中出现的任意长度片段
- Wiki文章为主
- 众包人工标注产生
- 每个问题3人标注,降低了人工标注误差
- 数量较大:500多篇文章,2万多个段落,10万个问题
- 鼓励用自己的语言提问
Match-LSTM
1. 文本蕴含任务
一个前提集合P,一个假设H。去预测P里是否能蕴含出H。
2. Match-LSTM
有K个前提\(\{P_1, \cdots, P_K\}\),1个假设\(H\)。假设的长度为m。遍历假设的每一个词汇\(h_i\)
在\(h_i\)处,利用注意力机制,综合K个前提,得到一个向量\(p_i\)
聚合匹配\([h_i, p_i]\)一起,给到LSTM
其实类似于Attention-Based NMT的解码过程。
Pointer-Net
从一个输入序列中,选择一个位置作为输出。
- 序列模型:选择多个位置,就组成一个序列
- 边界模型:选择开始和结束位置,中间的片段是答案
模型
段落\(P\)有m个单词,问题\(Q\)有n个单词。
LSTM编码层
单向LSTM编码 \[ H^p = \rm{LSTM}(P), \quad H^q = \rm{LSTM}(Q) \] 取每一时刻的隐状态,得到对文章和问题的编码。\(H^p \in \mathbb R^{m \times h}, H^q \in \mathbb R^{n \times h}\)。\(h\)是编码的维度。
Match-LSTM层
这一层实际上是一个LSTM,输入依次是P中的各个单词\(p_i\)。每一时刻,利用注意力机制计算相对应的Q的编码。
问题--前提,段落--假设,看问题蕴含P的哪些部分。
先计算注意力权值
\[
\overrightarrow{ G_i} = \tanh (W^qH^q + (W^p\mathbf h_i^p + W^r \overrightarrow{\mathbf h_{i-1}^r} + \mathbf b^p) \otimes \mathbf e_Q)
\]
\[ \overrightarrow{ \mathbf \alpha_i} = \rm{softmax}(\mathbf w^T \overrightarrow{ G_i} + b \otimes \mathbf e_Q) \]
利用注意力机制,计算所有Q基于当前\(p_i\)的注意力
,把注意力和\(\mathbf h_i^p\)拼接起来 \[
\overrightarrow {\mathbf z_i} = [\mathbf h_i^p, \underbrace{H^q \overrightarrow{ \mathbf \alpha_i}}_{\color{blue}{\rm{attention}}}]
\] 把match后的结果,输入到LSTM, \[
\overrightarrow {\mathbf h_i^r} = \rm{LSTM}(\overrightarrow {\mathbf z_i}, \overrightarrow {\mathbf h_{i-1}^r})
\] 定义从右向左,得到\(\overleftarrow {\mathbf h_i^r}\)。最终,拼接两个方向的向量,得到 \[
H^r = [\overrightarrow{H^r}, \overleftarrow{H^r}] \quad \in \mathbb R^{m \times 2h}
\]
Answer-Pointer层
输入Match-LSTM层对Passage的编码结果\(H^r\),输出一个序列。
序列模型
不断生成一个序列\(\mathbf a = (a_1, a_2, \cdots)\),表示P中的位置。
在P的末尾设置一个停止标记,如果选择它,则停止迭代。新的\(\bar H^r \in \mathbb R^{(m+1) \times 2h}\)
1、计算注意力权值\(\mathbf \beta_k\),\(\beta_{k,j}\)表示,选\(p_j\)作为\(a_k\)的概率 \[ F_k = \tanh(V \bar H^r + (W^a \mathbf h_{k-1}^a + \mathbf b^a) \otimes \mathbf e_{(m+1)}) \]
\[ \mathbf \beta_k = \rm{softmax}(\mathbf v^TF_k + \mathbf c \otimes \mathbf e_{(m+1)}) \]
2、使用注意力机制得到当前时刻需要的\(H^r\)的信息,结合上一时刻的隐状态,输入到LSTM中 \[ \mathbf h_k^a = \overrightarrow{\rm{LSTM}} ( \underbrace{\bar H^r \mathbf \beta_k^T}_{\color{blue}{\rm{attention}}}, \mathbf h_{k-1}^r) \] 答案的概率计算如下: \[ p(\mathbf a \mid H^r) = \prod_{k} p(a_k \mid a_1, \cdots, a_{k-1}, H^r) \]
\[ p(a_k = j \mid a_1, \cdots, a_{k-1}, H^r) = \beta_{k,j} \]
目标函数: \[ - \sum_{n=1}^N \log p(\mathbf a_n \mid P_n, Q_n) \] 边界模型
不用预测完整的序列,只预测开始和结束位置就可以了。 \[ p(\mathbf a \mid H^r) = p(a_s \mid H^r) \cdot p(a_e \mid a_s, H^r) \]