用 R-Net Plus 来做阅读理解任务(上)

摘要

阅读理解任务有其现实意义,用一句话的概括,就是让机器能够通过问题从文章中搜寻对应的问题答案。如果我们提供了一个文本数据库,我们就不需要再人工编写问题对。这是极有商业价值的。解决这个任务的各种模型现在在各大智能客服,智能助理乃至 Google Assistant 中起到作用。

开始前的准备

在文章开始之前,我们先来了解什么是 R-Net 。
注意:了解下列内容您需要以下先验知识:

  • 机器学习基础知识
  • 一部分的统计学理论
  • 模型复现经验
  • 任务分析能力

开始

首先我们看一下它的摘要中说了什么。

R-Net

在这篇论文中,我们介绍了 R-NET, 一种为阅读理解形式问题回答任务而生的端对端的神经网络模型,以从给定的文章中给出问题的答案为目标。我们首先将这个问题和文章以局内注意力机制卷积网络的形式匹配,然后获得对应的“问题-提醒”的文章表达。然后我们设置了一个单独匹配的注意力机制来用文章本身对抗的形式优化这个表达,这能够让我们高效地从整个文章中进行编码。我们最后还使用了指针网络来定位到文章中的答案区域。我们对 SQuAD 和 MS-MARCO 两个数据集进行了详尽的实验,而我们的模型成功在所有已经公开发表的结果中取得最好的成绩。

这篇论文由微软研究院出品,且在 SQuAD 的阅读理解比赛中获得第一名的佳绩。而我这种菜鸡连前二十名都没上。在这篇论文出来了将近一年后。我决定根据这段时间的学习对它进行改造。首先,让我们分析这篇文章的行文结构,背景故事。
模型结构如下:
R-Net-Structure
首先让我们理顺一下这个模型的内核,以及我们分析一下可以如何改进这个模型。不过这个模型大量地用到了 matching-LSTM 和 Pointer Net 的相关知识。因此我也会在后续的博客中更新关于这两个模型或者机制的解释。当然还有 Attention 机制。。我想这个在您看完了指针网络或者匹配型 LSTM 以后都不会完全理解不了了。
如果您已经粗读了一遍文章,相信您已经大概知道用了哪些知识。其实在读论文的时候,看不懂的部分一定要尽量跳过。以及要多点站起来运动一下身体。

论文的结构

R-NET 模型一共分为四个步骤,分别为:QUESTION AND PASSAGE ENCODER, GATED ATTENTION-BASED RECURRENT NETWORKS, SELF-MATCHING ATTENTION, OUTPUT LAYER。

QUESTION AND PASSAGE ENCODER

第一层为表征学习过程,R-NET 中的方式是 Input = GloVe + Char embedding。首先我们假定 文章为P,问题为 Q,答案为 A。然后我们根据文章的内容可知其将 P,Q 中的单词都转化为 GloVe 词向量中的数据 $\left \\{e_{t}^{P} \right \\}_{t=1}^{n} $ 和 $\left \\{ e_{t}^{Q} \right \\}_{t=1}^{m}$ 。第二种是 Char embedding 中的 $\left \\{ c_{t}^{P} \right \\}_{t = 1}^{n}$ 和 $ \left \\{ c_{ t }^{ Q } \right \\}_{t=1}^{ m } $。然后则是通过将 P 和 Q 通过 BiRNN。

然后让我们在这里思考改进的方式。因为当前显示来看,词向量的效果和字符嵌入的效果叠加会严重影响后续输入结构的内容的结果。那么我们尝试把 Input = GloVe + Char embedding 转化为 Input = ELMo + Char embedding 。ELMo 是一个可以得出上下文关系的词向量。其展示形式为:

稍微解释一下,s 是 softmax 算出来的(加起来为1),gamma 是需要学习的变量,加不加这个变量会对performanc有比较大的影响。虽说上边的词向量公式很简单,但是它的确很 Work 。
联系上下文的词向量对于阅读理解这种任务,会更加适合。

GATED ATTENTION-BASED RECURRENT NETWORKS

原本我们可以得到$u_{t}^{Q}$和$u_{t}^{P}$。得到这两个相对于 P 和 Q 的词向量模型以后,我们可以考虑在这一层中将 $u_{t}^{Q}$ 通过 Attention 加权以后融入到$u_{t}^{P}$中,然后我们可以得到相对于问题 Q 的文章语义理解 $v_{p}^{t}$。

其中 $c_{t}=att(u^{Q},[u_{t}^{P},v_{t}^{P}])$ 可以理解为对问题 Q 的 attention-pooling 加权。另外,我们在这里进行一次 重构。由于语义理解并不应该是仅仅是词向量相对于文章的向量问题。因此,我们假定以下的策略会work。(暴露了我并没有做实验的毛病)。在上一部中,我们使用句向量定位问题内容前后的前馈模型。然后再用词向量,精确定位到相应的回答问题的答案中。
那么,我们假定 句子向量 使用的是词袋模型。
实际上,原论文的处理方式已经是非常好的级别了。从上边的式子中,我们可以看到 $C_{t}$ 的attention权重完全是由 $u_{P}^{t}$ 和 另外一个单词在文章中的理解 $v_{t-1}^{P}$。基本具体形式如下:

R-NET 又基于 matching-LSTM 和门控制方式对以上的方式提出了两点改进。第一点是把$C_{t}$和$u_{t}^{P}$并联为[ $C_{t}$ , $u_{t}^{P}$ ]加入 RNN 中。即

第二点又在$[C_{t},u_{t}^{P}]$上面加入门控制方式,为了更好地提取和文章相关的相关信息

由上边,我们可以知道,文章并没有使用内注意力的机制。没有把词向量与文章互相进行筛选,将文章的权重与词的权重加权平均以后再重新赋予到对应的词上。

至此,R-NET 的结构已经说了二分之一,其它的内容等下次再说。下次将把实验与代码一起述说。

参考链接/文章

[1]各种Vec的不同作用
[2]R-NET 阅读理解解析

本文作者: Bon
本文地址https://bonxg.com/p/14.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

# Bon
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×