机器阅读理解(MRC)必看论文 - RNET

原创:张春阳

数据集

  • SQuAD
  • QA

原始论文

r-net.pdf

  • 论文中只介绍了原理和方法,并没有给出代码
  • 找到的代码为第三方复现
  • 需要注意,本篇中的 passage 就是之前我们说过的 context

任务样本

从原文中找到一个连续的 sub-span

Passage: Tesla later approached Morgan to ask for more funds to build a more powerful transmitter. When asked where all the money had gone, Tesla responded by saying that he was affected by the Panic of 1901, which he (Morgan) had caused. Morgan was shocked by the reminder of his part in the stock market crash and by Tesla’s breach of contract by asking for more funds. Tesla wrote another plea to Morgan, but it was also fruitless. Morgan still owed Tesla money on the original agreement, and Tesla had been facing foreclosure even before construction of the tower began.

Question: On what did Tesla blame for the loss of the initial money?

Answer: Panic of 1901

模型概览

  • 对 question 和 passage 进行编码
  • 获取与 question 相关的 passage 表达
  • 在 passage 上应用 self-matching attention 去获得最终的表达
  • 从 passage 中预测出 question 的 answer
  • 这里使用了很多 RNN 的结构,训练采用 E2E 的方式

步骤1: Question and Passage Encoder

注意该步骤包含两个部分

  • embedding
  • text encoding

Embedding

每一个 word 被表示为两个向量的 concat,

  • 一个向量是 GloVe 向量, e^Q_t (Question) 和 e^P_t (Passage),当某些 word 在 GloVe 中是缺失的状态时(OOV),我们会把它的向量都设置成 0。
  • 另一个是一个 character level 的向量,c^Q_t (Questi)和 c^P_t (Passage)。

为了获取这个 character level 的向量,我们可以在 Embedding 后增加一个 bi-GRU 层。然后每一个 character 都被 embed 成一个 H dimensional 的向量。

  • N 为 Passage 的长度
  • M 为 Question 的长度
  • C 为 25,表示26 个英文字母的编码长度
  • H 等于 75,代表 embedding 的维度

How does mask_zero in Keras Embedding layer work?

Encoding

下面的符号是在原始论文中的一些符号表达

  • u^Q 表示 question 的向量
  • u^P 表示 passage 的向量

神经网络会继续使用 u^Qu^P 向量,把他们传递给 masking 并且再接 3 层的 bi-GRU。

Keras 中的遮盖和填充 | TensorFlow Core

在这一系列操作执行完后,我们得到 Passage 和 Question 的表示向量 u^Pu^Q 。接下来让我们用这两个向量,来获取与 question 相关的 passage 表达。

步骤2: Question-Passage Matching

这个模块主要是计算把 Question 计算在内的 Passage 表达。我们使用下面的方法:

  • 我们把想要得到的带有 Question 信息的 Passage 表达,使用 v^P 来表达;
  • u^Q 表示 Question 的矩阵
  • u^P_t 表示 Passage 中第 t 个 word 的向量。

在 QuestionAttnGRU 中,我们首先要结合三个信息:

  • 上一个状态的表达 GRU(v^P_{t-1})
  • 用来表示 Question 的矩阵 u^Q
  • 用来表示 Passage 中的第 t 个单词 u^P_t

我们使用 dot product 处理 input 和相关的权重,然后使用 broadcast 到相同的 shape,再把它们进行相加。这里面 dot(u^P_t, W^P_u)dot(v^P_{t-1}, W^P_v) 都是向量, dot(u^Q, W^Q_u) 是一个矩阵,我们把前两个向量重复几次叠起来,使它们和矩阵的 shape 相同,最后计算这三个矩阵的和。 在这个和上,我们使用 tanh 激活函数。这个输出我们再用一个权重向量 V 进行 dot product,再使用 softmax 计算注意力的权重分布。 然后,我们在使用这个注意力的权重分布 dot product u^Q,我们就得到了一个融合了 Question 信息的表示 Passage 的向量,表示为 c_t

因为只有 c_t 的信息并不足够,缺少了原始的从 u^P_t 中获取的原始信息。所以,作者把 c_tu^P_t 进行了一个拼接,并把它传递给 GRU 结构。(Match-LSTM)

在论文中,作者为了决定到底使用哪里的信息更多一些,使用了一个 W_g 的参数和 [u^P_t,c_t] 进行相乘,并且应用一个 sigmoid 函数,用这个结构来充当 gate 的作用。然后再和 [u^P_t,c_t] 进行 element-wise 的乘法。这个值会作为 GRU 的输入。

步骤3: Passage Self-Matching

上一步的输出 (Question-Passage Matching) 的结果,我们表示为 v^P。作者在原文中认为,对于 Passage 所表达的信息是非常的有限的,我们还需要从 Passage 的其他的部分,获取更多的信息给 v^P

接下来,我们要给 Passage 增加一个 self-attention 机制。

  • Self-matching 的 GRU 结构的输出表示为 h^P_t

这个实现和之前的模块非常的相似。我们首先计算 W^Pv^P$$W^Pv_P 和当前 word 的向量 v^P_t,还有 W^P_v 和矩阵 v^P 。然后,我们对它们进行加和操作,并且使用一个 tahn 函数作为激活函数。接下来,使用一个权重向量 V 并且运用一个 softmax 函数,这样就会生成一个 attention 的向量。

之后的操作流程,就和之前的一样。

步骤4: Answer Prediction

最后,我们要预测 Passage 中一段作为问题的答案。为了做到这些,我们使用 QuestionPooling Layer 和 PointerGRU。

QuestionPooling 是对 Question Vector u^Q 做的一个 attention pooling。这个操作的目的主要是为了创建输入给 PointerGRU 的第一个 hidden state。它和其他的 attention 机制非常的类似。h^P 是前一个模块的对于 Passage 的表示,我们使用它来对最后的结果进行预测。

Pointer Network

Loss Function

复现笔记

Challenges of reproducing R-NET neural network using Keras

结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容