知识库问答KB-QA——深度学习(3)(记忆网络)

什么是记忆网络

记忆网络由Facebook AI Research的Jason Weston等人提出,其论文发表在2015年ICRL会议。对于很多问题(如自动问答、对话系统等),我们都希望模型能够像我们人一样具有记忆机制,能够记住一些信息(上下文、知识库等),为此发明了很多记忆模型。一个广为人知的记忆模型就是长短时记忆网络(Long Short-Term Memory, LSTM)。然而它的记忆实质上是一种内在(Internal)表达,只能记住在使用时所输入的一些历史信息。它就像计算机的内存一样,能够存储一些使用时的历史输入信息(把所有的历史输入信息都压缩到一个低维空间上,这样也会损失很多信息),一旦使用完毕,记忆就会被抹去,记忆量也非常有限。

我们想要找到一种外部(External)表达的记忆,就像计算机的硬盘一样,能够长期存取大量的记忆信息。在使用时再去记忆库中读取相关的记忆。对于KB-QA问题,我们也希望将知识库里的知识直接存储在我们的模型中。近年来,人们在这方面的研究作出了不懈努力,发明了一些能够提供外部记忆的模型,其中有两个最著名的模型,一个是由Google DeepMind团队提出的神经图灵机(Neural Tuning Machine),而另一个就是今天要讲的记忆网络。

记忆网络其实是一种框架结构,它里面的每一个模块(也称组件,Component)都可以根据应用套用不同的模型,也可以根据应用的需要增加其他的模块。总体来说它可以分为以下5个模块:

  • 输入模块I(Input)将外部输入转化为内部表达。我们可以把输入模块想象成人类的感知器官,接受外部的原始输入并将其转化为能够被大脑处理的生物信号。具体来说,输入模块用于将外部的输入(如自然语言句子、图片等) x x x 转化为内在的分布式表达 I ( x ) I(x) I(x)。输入模块可以根据应用的需要选用不同的模型,诸如CNN、LSTM、bag-of-words等等。
  • 记忆模块M(Memory)用于存储记忆。每一条记忆都是一个分布式表达向量 m i m_{i} mi,每一个记忆有一个索引地址号 i i i,所有记忆组成了我们的记忆模块。我们的记忆模块就像是计算机中的硬盘一样,存储着一条条的信息,每一个信息都有一个物理地址。我们可以记忆模块进行记忆的读取,修改,删除,也可以插入新的记忆信息。
  • 泛化模块G(Generalization)根据外部输入的内在表达 I ( x ) I(x) I(x) 去更新记忆 G ( m i , I ( x ) , m ) G\left(m_{i}, I(x), \mathbf{m}\right) G(mi,I(x),m)。我们可以根据新的输入对记忆模块中的每一个记忆都进行更新并增加新的记忆,也可以仅对部分相关记忆作针对性更新。最简单的方式是,直接将输入存储在记忆模块中而不对其他的记忆进行修改,即 m H ( x ) = I ( x ) m_{H(x)}=I(x) mH(x)=I(x)。这里 H ( x ) H(x) H(x) 是一个为输入选择记忆槽(为输入确定记忆的索引地址)的函数,在记忆存储满的时候,也可根据 H ( x ) H(x) H(x) 函数对记忆进行替换。更复杂一点,我们也可以引入一些遗忘机制等等。
  • 输出模块O(Output)根据外部输入的内在表达 I(x)去选择记忆模块中与之最相关的记忆。 该记忆也称为支撑记忆(Support Memory),即 o = O ( I ( x ) , m ) o=O(I(x), \mathbf{m}) o=O(I(x),m)。这个 选择 的方式有很多,最简单的方法就是将 I ( x ) I(x) I(x) 和记忆向量 m i m_{i} mi 投影到同一个向量空间中,通过比较 相似度得分(cosine,点乘等)来选择最相似度得分最高的记忆作为输出。当然我们也可以根据应用的需要,选择多个记忆作为输出。选择多个记忆的方式也有很多种,最简单的方法就是选择相似度得分最高的k个记忆作为输出,论文中作者提出了另一种方法,先选择得分最高的作为第一个输出 o 1 o_{1} o1,再选择与 I x I_{x} Ix 得分加上与 o 1 o_{1} o1 得分 最高的记忆作为第二个输出,以此类推(这种方法更像是在进行推理,先将输入作为推理的支点,选择与输入最相关的记忆作为第一条线索,再根据输入和第一条线索去确定下一条线索)。
  • 回答模块R(Response)根据输入的内在表达和输出模块提供的记忆,输出满足应用需要格式的结果。它就相当于encoder-decoder模型中的decoder部分,将 I x I_{x} Ix { m o 1 , … , m o k } \left\{m_{o_{1}}, \ldots, m_{o_{k}}\right\} { mo1,,mok} 作为输入,根据应用的需要使用不同的模型输出最终的结果(分类器、语言模型、RNN、CNN等)。

给定训练数据 输入输出对 ( x , r ) (x,r)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值