微软亚研院和北大的阅读理解模型R-Net。

  1. Gated Attention-based RNN 来获得question-aware passage representation,即编码P
  2. Self-matching Attention来修正编码P,即P与自己做match,有效从全文中编码信息
  3. Pointer Network预测开始和结束位置

论文地址:

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}\)

效果

对比分析