最初的Match-LSTM阅读理解模型。

论文地址: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) \]