End-To-End Memory Networks

关键词

End2End, Memory Networks, Multiple hops

来源

arXiv 2015.03.31 (published at NIPS 2015)

问题

当前 AI 研究面临两大问题:

  1. 如何在回答问题时实现多个计算步骤
  2. 如何描述序列数据的长距离依赖性

本文尝试从 Memory Networks 入手,解决这两个问题。


文章思路

模型介绍 在单层模型中模型将 document 中的每一个 word 保存为一个 memory mi ,每个memory 本质上就是一个向量,这一点与 embedding 是一回事,只是换了一个名词。另外每个 word 还与一个输出向量 ci 相关联。可以理解为每个 word 表示为两组不同的 embedding A 和 C。同样的道理,query 中的每个单词可以用一个向量来表示,即对应着另一个 embedding B。

End-To-End Memory Networks_第1张图片

在 Input memory 表示层,用 query 向量与 document 中每个单词的 mi 作内积,再用 softmax 归一化得到一组权重,这组权重就是 attention,即 query 与 document 中每个 word 的相关度。

接下来,将权重与 document 中的另一组 embedding ci 作加权平均得到 Output memory 的表示。这一步也称作 support memory。

最后,利用 query 的表示和 output memory 的表示去预测answer。

根据单层模型的结构,非常容易构造出多层模型。每一层的 query 表示等于上一层 query 表示与上一层输出 memory 表示的和 (还有很多其他结合方式)。每一层中的 A 和 C embedding 有两种模式:

  • 第一种是邻接,即 Ak+1=Ck ,依次递推
  • 第二种是类似于 RNN 中共享权重的模式, A1=A2==Ak C1=C2==Ck 。其他的过程均和单层模型无异。

模型细节 论文中一般采用 3 跳网络邻接模式,其中

  • 句子 memory 表示有两种方式
    • 一种是 bag of words 表示出的向量与 embedding 矩阵 A 相乘得到 memory,即
      mi=ΣjAxij
      其中 i 表示第 i 个句子, j 表示第 j 个词。
    • 另一种是在它们做 element-wise 乘法时,前面乘上一个系数。
      mi=ΣjljAxij
      这个系数 lj 叫做 Position Encoding,它是一个列向量,用如下公式计算
      lkj=(1j/J)(k/d)(12j/J)
      其中 J 表示句子中词汇数量, d 表示 embedding 维度。
  • 很多 QA 任务对上下文有要求,本文采用 Temporal Encoding。为了解决这个问题,用如下公式解决
    mi=ΣjAxij+TA(i)
    其中 TA(i) 表示第 i 行。 ci 也同样用 TC(i) 加强。
  • 在正则化 TA 时,引入随机噪音效果会比较好。文中在训练时对于 document 额外添加 10% 空的 memory。

资源

论文地址:https://arxiv.org/abs/1503.08895v5
代码地址:https://github.com/facebook/MemNN

相关工作

文中数据集采用 Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks 中 version1.1 版本的数据集。
数据集是这样的:给定一段陈述句以及一个对应的问题,这个问题通常是一个单词 (偶尔会是多个)。数据集包含 20 种不同推理推断能力,下面是一个数据样例

数据样例

注意到对于每个问题,只有部分陈述句包含了答案所需信息,其他的都是干扰。

简评

一般的 Memory Networks 在每一层都需要监督,因而不易训练。但是本文是连续版的 Memory Networks,因此可以 end2end 训练。

你可能感兴趣的:(NLP,Related)