- RNN解决长期依赖的能力随着文本长度的增加越来越差,attention机制是解决这种问题的一种思路。
- 现在再来看另外一种思路—深度记忆网络:Deep Memory Network在Aspect based Sentiment等NLP领域都有过成功的实践,但其提出者本身是以通用模型的形式提出的。
Introduce of Memory Network
Memory Network是一种新的可学习模型,它使用一个整合了长期记忆的一个组件(称为Memory)作为推断组件(inference components)来进行推理。长期记忆Memory可以被读和写,以实现预测的最终目的。
原论文作者认为RNN的记忆问题(无法完成简单的复制任务,即将输入原样输出)也可以被Memory Network解决。它核心思想来自机器学习文献中成功应用的使用外置的可读写的记忆模块来进行推断。
Memory Networks
这是Facebook AI在2015年提出来的:MEMORY NETWORKS。论文是第一次提出记忆网络,利用记忆组件保存场景信息,以实现长期记忆的功能。对于很多神经网络模型,RNN,lstm和其变种gru使用了一定的记忆机制,在Memory Networks的作者看来,这些记忆都太小了。
一个记忆网络(memory networks),包括了记忆 m m m,还包括以下4个组件 I I I, G G G, O O O, R R R(lstm的三个门,然后m像cell的list):
一个记忆网络是由一个记忆 m m m(一个以 m i m_i mi作为索引的数组对象)和4个组件 I I I, G G G, O O O, R R R组成。其中:
- I I I :(input feature map) - 将输入转化为中间特征表示。不同的应用有不同的方法。例如NLP中的词向量化等。(可以利用标准预处理,例如,文本输入的解析,共参考和实体解析。 还可以将输入编码为内部特征表示,例如,从文本转换为稀疏或密集特征向量)
- G G G :(Generalization) - 负责根据输入更新memory单元。原作者称之为泛化,因为网络在该阶段有机会将记忆压缩和泛化以供后面使用。在作者的具体实现里,只是简单地插入记忆数组里。作者考虑了几种新的情况,虽然没有实现,包括了记忆的忘记,记忆的重新组织。(最简单的 G G G形式是将 I ( x ) I(x) I(x)存储在存储器中的“slot”中)
- O O O :(Output feature map) - 给定新输入和当前记忆状态,产生一个新的输出(在特征表示空间上)即负责根据输入获取memory单元的输出。从记忆里结合输入,把合适的记忆抽取出来,返回一个向量。每次获得一个向量,代表了一次推理过程。
- R R R :(Response) - 将output(即O)转化到目标形式(例:一个文本的回复或者一个动作),即将memory的输出转换为目标输出。
所以,I、R算是memory的配套设施,G、O则是直接与memory交互。
简单来说,就是输入的文本经过 I I I 模块编码成向量,然后将其作为 G G G 模块的输入,该模块根据输入的向量对memory进行读写操作,即对memory进行更新。然后 O O O 模块会根据Question(也会经过Input模块进行编码成为向量)对memory的内容进行权重处理,将memory按照与Question的相关程度进行组合得到输出向量,最终 R R R 模块根据输出向量编码生成一个自然语言的答案出来。
Memory Networks的处理过程
给定一个输入 x x x(例:字符、词或者句子(视处理力度而定),图像或者声音信号),模型处理过程如下:
- 将x转化为中间特征表示 I ( x ) I(x) I(x).
- 使用新输入更新记忆 m i : m i = G ( m i , I ( x ) , m ) , ∀ i m_i: m_i = G(m_i,I(x),m),\forall i mi:mi=G(mi,I(x),m),∀i
- 使用新输入的中间特征表示和记忆计算输出特征 o : o = O ( I ( x ) , m ) o: o = O(I(x),m) o:o=O(I(x),m)
- 最后,解码输出特征到最终回复: r = R ( o ) r = R(o) r=R(o)
这个过程在训练和测试时都适用,两者之间的区别在于:测试时记忆也会被存储,但模型参数 I I I, G G G, O O O, R R R将不会再更新。 I I