r-net:machine reading comprehension with self-matching networks

Posted AI蜗牛之家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r-net:machine reading comprehension with self-matching networks相关的知识,希望对你有一定的参考价值。

文章目录

我觉得这篇文章的文笔真的有点不敢恭维,首先向量矩阵的维度不说清楚还能脑补,但是这边前后不同层之间用一样的变量名是什么意思啊(这么说出来会不会被MSRA鄙视,以后的简历都过不了了,ORZ),本文中尽量避免这种情况。嗯嗯,文章还是不错的^@^
标记版文章下载地址:zsweet github
原始文章下载地址:
Gated Self-Matching Networks for Reading Comprehension and Question Answering
R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS

这里先总结下几个特点:

  • 同时使用了char-embedding和word-embedding,不同的是char-embedding是通过将char放入双向gru之后,最终的是通过gru的最终状态来得到的。
  • 在attention之后添加gate,主要用在Question-Passage Matching和Passage Self-Matching之后。
  • 对文章本身进行self-attention。

1.模型概述

其实我觉得整体结构就是math-lstm和transformer模型的融合,然后再加了一点的小trick.

模型整体可以分为如下几个模块:

  • embedding层
  • RNN网络分别对question和passage单独编码 (本文中将前两部分放在一个部分介绍)
  • 基于门限的注意力循环神经网络(gated-attention based recurrent network)匹配question和passage,获取问题的相关段落表示(question-aware passage representation)
  • 基于自匹配注意力机制的循环神经网络(self-matching attention network),将passage和它自己匹配,从而实现整个段落的高效编码
  • 基于指针网络(pointer-network)定位答案所在位置

模型结构如下:

2.passage和question编码层

输入问题 Q = w t Q t = 1 m Q=w_t^Q_t=1^m Q=wtQt=1m和段落 P = w t P t = 1 n P=w_t^P_t=1^n P=wtPt=1n,分别进行word-level编码和character-level编码,得到向量 e e e c c c。这里character-level编码主要是为了应对OOV的影响,以往OOV词向量直接就是0,这里可以缓和OOV的影响。之后,利用两个双向RNN网络分别对question和passage再编码。而之前多数都是用的CNN卷积和highway。另外,作者在这里选用了GRU单元,而不是LSTM,原因在于GRU计算量更小。
u t Q = B i G R U ( u t − 1 Q , [ e t Q , c t Q ] ) \\mathbf u_t^Q = \\rmBiGRU (u_t-1^Q, [e_t^Q, c_t^Q]) utQ=BiGRU(ut1Q,[etQ,ctQ])

u t P = B i G R U ( u t − 1 P , [ e t P , c t P ] ) \\mathbf u_t^P = \\rmBiGRU (u_t-1^P, [e_t^P, c_t^P]) utP=BiGRU(ut1P,[etP,ctP])

其中: e t , c t e_t, c_t et,ct分别表示词向量和字向量,编码后的passage为 [ u 1 Q , u 2 Q . . . u m Q ] [u_1^Q,u_2^Q...u_m^Q] [u1Q,u2Q...umQ],query为 [ u 1 P , u 2 P . . . u n P ] [u_1^P,u_2^P...u_n^P] [u1P,u2P...unP]

3.Gated Attention-based RNN

首先对query做attention:
s j t = v T tanh ⁡ ( W u Q u j Q + W u P u t P + W v P v t − 1 P ) , j = 1 , ⋯   , m 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 sjt=vTtanh(WuQujQ+WuPutP+WvPvt1P),j=1,,m
α j t = s o f t m a x ( s j t ) \\alpha_j^t = \\rmsoftmax(s_j^t) αjt=softmax(sjt)

c t = ∑ i = 1 m α i t u i Q \\mathbf c_t = \\sum_i=1^m \\alpha_i^t \\mathbf u_i^Q ct=i=1mαituiQ
上述的attention可记为 c t = a t t n ( u Q , [ u t P , v t − 1 P ] ) ​ 。 \\mathbf c_t = \\rmattn(\\mathbf u^Q, [\\mathbf u_t^P, \\mathbf v_t-1^P])​。 ct=attn(uQ,[utP,vt1P])

上面的attention与match-lstm一样,但是这里又增加了一个gate:
g t = s i g m o i d ( W g [ u t P , c t ] ) g_t = sigmoid(W_g[\\mathbf u_t^P,\\mathbf c_t]) gt=sigmoid(Wg[utP,ct])
[ u t P , c t ] ∗ = g t ⊙ [ u t P , c t ] [\\mathbf u_t^P, \\mathbf c_t]^* = g_t \\odot [\\mathbf u_t^P, \\mathbf c_t] [utP,ct]=gt[utP,ct]

然后再像match-lstm一样放入RNN:
v t P = B i G R U ( v t − 1 P , [ u t P , c t ] ∗ ) \\mathbf v_t^P = \\rmBiGRU(\\mathbf v_t-1^P, [\\mathbf u_t^P, \\mathbf c_t]^*) vtP=BiGRU(python https://www.algospot.com/judge/problem/read/DECUAL

python https://www.algospot.com/judge/problem/read/SFW

python https://www.algospot.com/judge/problem/read/DOMINO

SecurityException:权限拒绝:读取 com.android.providers.media.MediaProvider 需要 android.permission.READ_EXTER

规划法国恢复共和国

使用 spark.read.format("com.crealytics.spark.excel") 的 inferSchema 推断日期类型列的双精度