Memory Network系列3 - Dynamic Memory Networks
-
References
Dynamic Memory Networks
之前我们说到了MemNN, MemN2N,现在我们来学习一个新的记忆网络模型——DMN。DMN由论文Ask Me Anything: Dynamic Memory Networks for Natural Language Processing 提出,本文认为,几乎所有的NLP问题都可以认为是一个QA问题。正如标题所示,DMN可以用在很多种类的NLP的任务中,如QA、文本分类、情感分析、序列模型。
实现
与MemNN类似,DMN也由4个部分组成:
Input Module
输入模块将文本转换为向量表示作为memory的输入。本文使用 GRU 处理文本输入,将GRU的hidden state作为输出。需要注意的是,对于不同的输入有不同的输出方法。若输入的是一句话,输出则为句子中每个词的hidden state,最终会得到句子长度个向量;若输入的是多个句子,则将多个句子cat到一起,句子间用一个标志<EOF>间隔,取每次输入<EOF>后的hidden state作为输出,最终会得到句子个数个向量。模块输出为
。 Question Module
本部分输入为一个问题,与input module类似,question model也将句子经过一个GRU,但这里我们只需要RNN的final state作为输出。模块输出为
。最后一层记忆的输出 为最后的模块输出。 Episodic Memory Module
本部分由多层memory组成,每一部分都将
、前一层的输出 、 作为输入输入到 Attention Mechanism
中,将Attention得到的作为 Memory Update Mechanism
的输入,经过Memory Update Mechanism
后得到该层记忆输出。 各层输出通过一个RNN联系到一起,每一层的输出
均输入GRU中,得到的hidden state即为该层网络的输出 ,即: 。 最后一层网络的输出
即为 Memory Module的输出。 Memory Update Mechanism
每一层memory内部记忆的更新都使用了一个修改后的GRU:
本部分将
与其对应的 输入上述修改后GRU中,取 final state作为该层记忆输出 。 Attention Mechanism
本文使用了一个门函数作为Attention Mechanism。序列中的每一个节点的gate值都由当前节点值、前一层的输出 、 决定。 当k=0即当前为记忆网络的第一层时,输入
为 。 门控函数为一个2层神经网络:
其中
为一个长向量用于表示 之间的相似度: where
is the element-wise product. Answer Module
这部分通过memory module的输出与
生成最后的answer。对于seq2seq问题,这里可以使用一个GRU生成答案,对于一般分类问题,这里将 输入一层fc即可。