Jason Weston, Sumit Chopra & Antoine Bordes.
Facebook AI Research, 770 Broadway, New York, USA.
{jase,spchopra,abordes}@fb.com
摘要
本文将介绍一种新的学习模型,称为记忆网络。记忆网络利用结合了长期记忆模块的推断组件进行推理;并学习如何联合地使用它们。长期记忆模块被用作预测,可以读出也可以写入。我们将记忆网络用于问答任务,长期记忆模块扮演着知识库的角色,记忆网络的输出是文本回复。我们在一个大规模的问答任务上,以及一个从仿真的世界里生成的小规模但是足够复杂的玩具任务(toy task)上进行评测。在本文的末尾,我们通过链乘支持语句到需要理解动词意图的问答来展示这写模型的推理能力。
1 概述
大多数机器学习模型缺乏一种简单的方式从长期记忆模块中读取或写入,并无缝地结合到推理中。所以,这些方法并没有利用现代计算机的卓越的优势之一。举个例子,考虑一个任务,给定一些事实或者故事的集合,然后需要回答相关的问题。理论上这个任务可以通过语言模型来完成,比如循环神经网络(RNN)(Mikolov et al., 2010; Hochreiter & Schmidhuber, 1997) ,因为这些模型被训练得可以对于给定的单词流预测出下一个(或多个)可能的单词(或单词集合)。然而,它们的内存(编码在隐状态和权值)一般很小,并不能准确地记住过去的事实(致使被压缩到稠密的向量中)。众所周知,RNNs很难执行记忆操作,比如简单的拷贝任务即输出刚刚读到的输入(Zaremba & Sutskever, 2014)。同样的情形发生在其他的任务上,比如,在视频和音频领域,观看影片需要长期记忆以回答关于这个影片的问题。
在本文的工作中,我们介绍一种叫做记忆网络的模型,尝试修复以上提到的问题。核心思想就是将在机器学习中用于推理的有效学习策略和可以读写的内存模块相结合。然后训练模型,使之可以高效的操作内存内存模块。我们在第2部分介绍整体的框架,在第3部分相大家展示在文本问答领域的具体实现。我们在第4部分讨论相关工作,然后再第5部分介绍实验部分,最后在第6部分作出总结。
2 记忆网络
一个记忆网络由1个内存模块m(用mi索引的数组)和如下的4个(通过学习得到的)模块I,G,O,R:
I:(输入特征映射)—— 将输入转换为内部特征表示。
G:(泛化)—— 对于给定新的输入更新旧的内存。我们称之为泛化是因为在这个阶段网络有机会压缩并泛化其内存以供未来某些需要。
O:(输出特征映射)—— 给定新的输入与当前的内存状态,产生新的输出(在特征空间中)。
R:(回复)—— 将输出转换为特定格式的回复。比如,文本回复或者一个动作。
给定输入x(比如,一个输入字符,单词或者句子,这依赖于粒度的选择,一幅图片或者一段音频信号),模型执行如下的流程:
- 将x转换为内部特征表示I(x)。
- 对于给定的新的输入,更新内存mi:mi=G(mi,I(x),m),∀i。
- 对于给定的新的输入和内存,计算输出特征o:o=O(I(x),m)。
- 最后,将输出o解码为最后的回复:r=R(o)。
训练和测试阶段都需要这个过程,这两个阶段的差别在于测试阶段不更新I,G,O,R的参数。记忆网络可以用于很多任务。其组件I,G,O,R可以使用很多目前存在的机器学习策略,如,SVMs、决策树、等等。
I组件:组件I可以利用一些通用的预处理过程,如,为文本输入进行句法分析、指代和实体消解。它也可以将输入编码到一个内部特征表示,比如,将文本转换到稀疏或稠密的特征向量。
G组件:G最简单的形式是将I(x)存储在内存的‘槽’中:
mH(x)=I(x)
其中H(.)是槽选择函数。也就是,G只更新内存m中索引为H(x)的部分,而不去触碰其他部分。G的更复杂的变种可以基于当前输入x所获的的信息来回退并更新早期存储的内存(或者全部内存)。如果输入是字符级别或者可以词级别,那么可以将其进行分组(也就是,将其分块化)并将每块存储到一个内存槽中。
如果需要的内存巨大(比如,对于Freebase或者Wikidata),那么我们需要对其进行组织。这可以通过之前介绍的槽选择函数来实现:比如,可以对其设计或者训练使之可以按照实体或者主题存储记忆。因此,为了提高扩展的效率,G(以及O)不需要在所有内存上进行操作:可以只对检索到的候选子集进行操作(只在相关主题的记忆上