RNN解决长期依赖的能力随着文本长度的增加越来越差,attention机制是解决这种问题的一种思路,今天我们再来看另外一种思路,深度记忆网络。Deep Memory Network在QA和Aspect based Sentiment等NLP领域都有过成功的实践,但其提出者本身是以通用模型的形式提出的。
Introduce of Memory Network
Memory Networks
一个记忆网络是由一个记忆
m
m
m(一个以
m
i
m_i
mi?作为索引的数组对象)和4个组件
I
,
G
,
O
,
R
I,G,O,R
I,G,O,R组成。其中:
Memory Networks的处理过程
给定一个输入x(例:字符、词或者句子(视处理力度而定),图像或者声音信号),模型处理过程如下:
将x转化为中间特征表示
I
(
x
)
I(x)
I(x)。使用新输入更新记忆
m
i
m_i
mi?:
m
i
=
G
(
m
i
,
I
(
x
)
,
m
)
,
?
i
m_i=G(m_i, I(x), m), \forall i
mi?=G(mi?,I(x)//代码效果参考:http://hnjlyzjd.com/hw/wz_24181.html
,m),?i使用新输入的中间特征表示和记忆计算输出特征o
o
o:
o
=
O
(
I
(
x
)
,
m
)
o=O(I(x), m)
o=O(I(x),m)最后,解码输出特征到最终回复:
r
=
R
(
o
)
r=R(o)
r=R(o)
这个过程在训练和测试时都适用,两者之间的区别在于:测试时记忆也会被存储,但模型参数
I
,
G
,
O
,
R
I,G,O,R
I,G,O,R将不会再更新。
I
,
G
,
O
,
R
I,G,O,R
I,G,O,R可以使用现有任何机器学习的方法来实现(SVM, 决策树)。
组件
I
I
I:
I
I
I可以使用标准的预处理步骤来实现,比如输入文本的语法分析、指代消解、实体识别等。它同样也可以将输入编码到一个中间的特征表示(将文本转化为稀疏或者稠密的特征向量)。
组件
G
G
G: 最简单的G的形式可以是将
I
(
x
)
I(x)
I(x)储存起来的槽位(slot):
m
H
(
x
)
=
I
(
x
)
m_{H(x)}=I(x)
mH(x)?=I(x)
其中
H
(
x
)
H(x)
H(x)是选择槽位的一个函数。即,
G
G
G只更新m的索引
H
(
x
)
H(x)
H(x),其他索引下的记忆部分将保持不变。更复杂的
G
G
G的实现还可以允许
G
G
G去根据当前输入x得到的新证据去更新先前存储的记忆。如果输入是字符级别或者词级别的你也可以将其进行分组。
如果记忆非常庞大(假设要记忆整个Freebase或者Wikipedia),你可能不得不把记忆使用
H
(
x
)
H(x)
H(x)来组织起来。
如果记忆已经被填满。你也可以使用
H
H
H来实现一种遗忘机制。
O
O
O和
R
R
R组件:
O
O
O组件被特别应用于读取记忆和执行推断,
R
R
R组件则根据
O
O
O的输出产生最终回复。例:在QA中,使用
O
O
O查找相关的记忆,然后
R
R
R生成文字来组成答案。
R
R
R可以是RNN,视
O
O
O的输出而定。这种设计基于的假设是,如果没有限定在这种记忆上,RNN会表现得相当差(事实上很多场景下确实如此)。
原论文给了一个QA的例子,但由于这个模型并没有广泛使用这里就不介绍了。我们转而介绍一种常用的端到端的记忆网络实现。
End-To-End Memory Network
端到端的记忆网络本质上也是一种RNN架构,但与RNN不同之处在于,在递归过程中会多次读取大型外部存储的记忆来输出一个符号。下面介绍的Memory Network可以有很多层,也易于反向传播,需要对网络的每一层进行监督训练。它以端到端的形式被应用于QA和Aspect Based Sentiment。
模型将一系列离散的输入
x
i
,
.
.
.
,
x
n
x_i,...,x_n
xi?,...,xn?存储在记忆中,并接受一个查询
q
q
q,输出回答
a
a
a。模型会将所有的
x
x
x写为记忆存储在一个固定大小的缓存中,然后寻求一个
x
x
x和
q
q
q的连续表示。该连续表示会被多跳处理以输出a。这使得错误信号能够在多级记忆中反向传播到输入。
Single Layer
整个模型是很多层堆起来的,我们先介绍单个层。
输入记忆表示(Input memory representation):假定我们把给定输入集
x
1
,
.
.
.
,
x
i
x_1,...,x_i
x1?,...,xi?存储在记忆中。整个输入集
x
i
{x_i}
xi?都会经由每个
x
i
x_i
xi?所处的连续空间的嵌入(embedding)被转化为维度为
d
d