R-NET机器阅读理解(原理解析)
R-NET机器阅读理解(原理解析)
简介
斯坦福大学自然语言计算组发布SQuAD数据集,诸多团队参与其中,而微软亚研的R-NET是首个在某些指标中接近人类的深度学习模型。由于刚刚开源CNTK版的R-NET,趁着余热解读其中的原理。阅读准备
先介绍一下SQuAD数据集的特点,SQuAD数据集包含10w个样例,每个样例大致由一个三元组构成(文章Passage, 相应问题Query, 对应答案Answer), 以下皆用(P,Q,A)表示。由于R-NET模型中多次引用Matching-LSTM 模型和Pointer-Net模型中的思想,所以建议准备精读的朋友先看一下Blog(Matching-LSTM)和李宏毅老师的Ptr-Net。
结构图
原理介绍
R-NET模型一共分为四个步骤,分别为QUESTION AND PASSAGE ENCODER, GATED ATTENTION-BASED RECURRENT NETWORKS, SELF-MATCHING ATTENTION, OUTPUT LAYER, 基本结构可观察上面所示的结构图。1. QUESTION AND PASSAGE ENCODER
第一层为表示学习过程, R-NET中的方式Input = Glove + char embedding。第一种是把文章P,和问题Q中的单词替换为Glove词向量中的数据,
,第二种是char embedding
,
。最终把文章P和问题Q分别通过BiRNN。
$$
u_{t}^{Q} = BiRNN_{Q}\left (u_{t-1}^{Q}, \left [ e_{t}^{Q},c_{t}^{Q} \right ] \right )\\
u_{t}^{P} = BiRNN_{P}\left (u_{t-1}^{P}, \left [ e_{t}^{P},c_{t}^{P} \right ] \right )
$$
2. GATED ATTENTION-BASED RECURRENT NETWORKS
从上一层网络中可以得到$$
v_{t}^{P} = RNN( v_{t-1}^{P},c_{t})
$$
其中
基本具体形式如下:
$$
s_{j}^t = v^{T}tanh(W_{u}^{Q}u_{j}^{Q}+W_{u}^{P}u_{t}^Q+W_{v}^{P}v_{t-1}^P)\\
a_{i}^{t}=exp\left ( s_{i}^{t} \right )/\sum _{j=1}^{m}exp\left ( s_{j}^{t} \right )\\
c_{t}=\sum _{i=1}^{m}a_{i}^{t}u_{i}^{Q}
$$
R-NET又基于matching-lstm和门控制方式对以上方法提出两点改进,第一点是把
$$
v_{t}^{P} = RNN( v_{t-1}^{P},[c_{t},u_{t}^P])
$$
第二点又在
$$
g_{t} = sigmoid\left ( W_{g}[c_{t},u_{t}^P] \right )\\
[c_{t},u_{t}^P]^{*}=g_{t}\odot [c_{t},u_{t}^P]
$$
3. SELF-MATCHING ATTENTION
此过程充分借鉴了Attention is all you need 中的自注意力思想,在模型效果提升中起了很大作用,而且这个方法也易于实现。
$$
h_{t}^{P} = BiRNN( h_{t-1}^{P},[c_{t},v_{t}^P])
$$
其中
$$
s_{j}^t = v^{T}tanh(W_{v}^{P}v_{j}^{P}+W_{v}^{\tilde{P}}v_{t}^P)\\
a_{i}^{t}=exp\left ( s_{i}^{t} \right )/\sum _{j=1}^{n}exp\left ( s_{j}^{t} \right )\\
c_{t}=\sum _{i=1}^{n}a_{i}^{t}v_{i}^{P}
$$
4. OUTPUT LAYER
R-NET模型输出的是答案在文章中的起始位置,在这一过程中借鉴了pointer-network的思想,R-NET模型先计算得到开始位置在文章中的分布
$$
s_{j} = v^{T}tanh(W_{u}^{Q}u_{j}^{Q}+W_{v}^{Q}v_{r}^Q)\\
a_{i}=exp\left ( s_{i} \right )/\sum _{j=1}^{m}exp\left ( s_{j} \right )\\
r^{Q}=\sum _{i=1}^{n}a_{i}u_{i}^{Q}
$$
其中这个seq2seq的循环循环结构为:
$$
h_{t}^{a} = RNN( h_{t-1}^{a},c_{t})
$$
$c_{t}$ 依然是对文章的attention-pooling得到的结果:
$$
s_{j}^t = v^{T}tanh(W_{h}^{P}h_{j}^{P}+W_{h}^{a}h_{t-1}^a)\\
a_{i}^{t}=exp\left ( s_{i}^{t} \right )/\sum _{j=1}^{n}exp\left ( s_{j}^{t} \right )\\
c_{t}=\sum _{i=1}^{n}a_{i}^{t}h_{i}^{P}
$$
通过以上RNN循环单元两次可以得到两个权重分布,我们可以通过下面这种方式从中得到答案的起始位置。
$$
p^{t}=argmax\left \{ a_{1}^{t},...,a_{n}^{t} \right \}
$$
不过再具体实验中还有一个小trick对提升效果很有用,由于我们得到了两个分布