- Gated Attention-based RNN 来获得question-aware passage representation,即编码P
- Self-matching Attention来修正编码P,即P与自己做match,有效从全文中编码信息
- Pointer Network预测开始和结束位置
论文地址:
- Gated Self-Matching Networks for Reading Comprehension and Question Answering
- R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS
Introduction
经典模型
1. Match-LSTM
Match-LSTM and Answer Pointer笔记
2. Dynamic Coatteion Network
DCN笔记。Coattention同时处理P和Q,动态迭代预测答案的位置。
3. Bi-Directional Attention Flow Network
本文模型概要
1. BiRNN 分别编码P和Q
分别编码Question和Passage
2. gated matching layer 编码Q-Aware的Passage
Gated Attention-based RNN
。在Match-LSTM上添加了门机制。
- 段落有多个部分,根据与Q的相关程度,分配重要性权值
- 忽略不重要的,强调重要的部分
3. self-matching layer
再次从整个Passage中提取信息。它的缺点
:
- RNN只能存储少部分上下文内容
- 一个候选答案不知道其他部分的线索
解决方法:对P做self-match。使用Gated Attention-based RNN对P和P自己做match。
4. pointer-network
模型
BiRNN,GARNN(P+Q),GARNN-Selfmatch(P+P),Pointer Network
BiRNN编码Q和P
\(Q=\{w_t^Q\}_{t=1}^m\),\(P=\{w_t^P\}_{t=1}^n\)。 P是n个单词,Q是m个单词。
词向量和字符向量
词向量
:\(\{e_t^Q\}_{t=1}^m\)、\(\{e_t^P\}_{t=1}^n\)
字符向量
:\(\{c_t^Q\}_{t=1}^m\)、\(\{c_t^P\}_{t=1}^n\)
字符向量,使用RNN,用每个单词的最后时刻的隐状态,作为字符向量。有助于处理OOV词汇。
编码Question和Passage \[ \mathbf u_t^Q = \rm{BiRNN }(u_{t-1}^Q, [e_t^Q, c_t^Q]) \]
\[ \mathbf u_t^P = \rm{BiRNN }(u_{t-1}^P, [e_t^P, c_t^P]) \]
Gated Attention-based RNN
要基于U(\(U^Q\))去编码P(\(U^P\)) ,得到Question-Aware的Passage编码,\(V^P\)。
1. Attention RNN
\(p_t\)与\(q_j\)两个单词的相关性函数(能量函数) \[
s_j^t = v^T \tanh (W_u^Q\mathbf u_j^Q + W_u^P \mathbf u_t^P + W_v^P \mathbf v_{t-1}^P), \quad j = 1, \cdots, m
\] \(p_t\)与所有Q单词的注意力权值\(\mathbf \alpha^t\) doc 2 query attention
\[
\alpha_{j}^t = \rm{softmax}(s_j^t)
\] \(p_t\)基于\(\mathbf \alpha^t\)对\(Q\)的信息汇总(注意力)attention pooling vector of the whole question
\[
\mathbf c_t = \sum_{i=1}^m \alpha_i^t \mathbf u_i^Q
\] 实际上:\(\mathbf c_t = \rm{attn}(U^Q, [\mathbf u_t^P, \mathbf v_{t-1}^P])\)。
注意力$c_t $和上一时刻隐状态 \(\mathbf v_{t-1}^P\),输入RNN,计算当前的信息 \[ \mathbf v_t^P = \rm{RNN}(\mathbf v_{t-1}^P, \mathbf c_t) \] 每个\(\mathbf v_t^P\)动态地合并了来自整个Q的匹配信息。
2. Match RNN
Match-LSTM。在输入RNN计算时,把当前\(\mathbf u_t^P\)也输入进去,带上Passage的信息。输入是\(\rm{input}=[\mathbf u_t^P, \mathbf c_t]\)。 \[ \mathbf v_t^P = \rm{RNN}(\mathbf v_{t-1}^P, [\mathbf u_t^P, \mathbf c_t]) \] 3. Gated Attention-based RNN
用门机制去控制每个\(p_t\)的重要程度。 \[ g_t = \rm{sigmoid}(W_g \cdot [\mathbf u_t^P, \mathbf c_t]) \]
\[ [\mathbf u_t^P, \mathbf c_t]^* = g_t \odot [\mathbf u_t^P, \mathbf c_t] \]
\[ \mathbf v_t^P = \rm{RNN}(\mathbf v_{t-1}^P, [\mathbf u_t^P, \mathbf c_t]^*) \]
GARNN的门机制
- 与GRU和LSTM不同
- 门机制是基于当前\(p_t\)和它的对应的Q的注意力向量\(\mathbf c_t\)(包含当前\(p_t\)和Q的关系)
模拟
了阅读理解中,只有\(P\)的一部分才与问题相关的特点
最终得到了question-aware passage representation
:\(\{\mathbf v_t^P\}_{t=1}^n\)。它的缺点如下:
- 对Passage的上下文感知太少
- 候选答案对它窗口之外的线索未知
- Question和Passage在词法、句法上有区别
Self-Matching Attention
为了充分利用Passage的上下文信息。\(\{\mathbf v_t^P\}_{t=1}^n\)
对P做self-match。使用Gated Attention-based RNN对P和P自己做match。
注意力计算 \[ s_j^t = v^T \tanh (W_v^P \mathbf v_j^P + W_v^{\bar P} \mathbf v_t^P), \quad j = 1, \cdots, n \]
\[ \alpha_{j}^t = \rm{softmax}(s_j^t) \]
\[ \mathbf c_t = \sum_{i=1}^n \alpha_i^t \mathbf v_i^P \]
RNN计算 \[ \mathbf h_t^P = \rm{BiRNN}(\mathbf h_{t-1}^P, [\mathbf v_t^P, \mathbf c_t]^*) \] Self-Matching根据当前p单词、Q,从整个Passage中提取信息。最终得到Passage的表达\(H^P\)。
Output Layer
其实就是个Pointer Network的边界模型,预测起始位置\(p^1\)和结束位置\(p^2\)。用RNN计算两次。
1. 基于Q计算初始隐状态
初始hidden state
是Question的attention-pooling vector
\[
\mathbf h_{t-1}^Q = \mathbf r^Q
\] 基于Q的编码和一组参数\(V_r^Q\),利用注意力机制计算\(\mathbf r^Q\) \[
\mathbf r^Q = \rm{attn}(U^Q, V_r^Q)
\]
\[ s_j = \mathbf v^T \tanh(W_u^Q \mathbf u_j^Q + W_v^Q V_r^Q), \quad j = 1, \cdots, m \]
\[ \alpha_i = \rm{softmax}(s_i) = \frac{\exp(s_i)}{\sum_{j=1}^m \exp(s_j)} \]
\[ \mathbf r^Q = \sum_{i=1}^m \alpha_i \mathbf u_i^Q \]
2. RNN计算开始位置和结束位置
计算t时刻的attention-pooling passage
(注意力\(\mathbf c_t\)) \[
s_j^t = \mathbf v^T \tanh(W_h^P\mathbf h_j^P + W_h^a \mathbf h_{t-1}^a)
\]
\[ \alpha_i^t = \rm{softmax}(s_j^t) \]
\[ \mathbf c_t = \sum_{i=1}^n \alpha_i^t \mathbf h_i^P \]
RNN前向计算 \[ \mathbf h_t^a = \rm{RNN} (\mathbf h_{t-1}^a, \mathbf c_t) \] 基于注意力权值去选择位置 \[ p^t = \arg \max_{i}(a_i^t) \]
实验
实现细节
数据集
训练集80%,验证集10%,测试10%
分词
斯坦福的CoreNLP中的tokenizer
词向量
预训练好的Glove Vectors。训练中保持不变。
字符向量
单层的双向GRU,末尾隐状态作为该单词的字符向量
BiRNN编码Question和Passage
3层的双向GRU
Hidden Size大小
所有都是75
Dropout
每层之间的DropOut比例是0.2
优化器
AdaDelta。初始学习率为1,衰减率\(\beta = 0.95\),\(\epsilon = 1e^{-6}\)