[关闭]
@ShawnNg 2016-12-14T22:27:51.000000Z 字数 2814 阅读 4279

Ask Me Anything: Dynamic Memory Networks for Natural Language Processing

深度学习 QA



一、文章信息

作者

Ankit Kumar, Peter Ondruska, Mohit Iyyer, James Bradbury, Ishaan Gulrajani, Victor Zhong, Romain Paulus, Richard Socher

单位

MetaMind

文章来源

ICML 2016

二、文章内容

1 模型-动态记忆网络(Dynamic Memory Network )

1.1 输入模块(Input Module)

1.1.1 输入

输入有可能是一个句子,一段文章,或者几篇文章,问题的答案就在这些文档当中。输入序列是长度为的词序列

1.1.2 模型

GRU-RNN

是word embedding。
模型也可以选LSTM-RNN,但是表现一样而计算复杂度增加了。

1.1.3 输出

1.2 问题模块(Question Module)

1.2.1 输入

输入是一个句子,对应的词序列,长度为

1.2.2 模型

和Input module一样,使用GRU-RNN


这里的L和Input module的L是共用的。

1.2.3 输出

输出就是final hidden state,也就是

1.3 事件记忆模块(Episodic Memory Module)

1.3.1 Attention Mechannism
1.3.1.1 输入

对于每一轮迭代,使用以上三者来作为输入。

1.3.1.2 输出

输出是第i次迭代,对应第t位置的一个得分,文中称为gate

1.3.1.3 模型

对G建模,需要使用上述输入构建一个特征集

G是一个两层的前向神经网络

如果一些数据集给定了问题对应的事实,那就可以进行对Attention模型进行有监督学习,可以使用cross-entropy作为目标函数。

1.3.2 Memory Update Mechanism

RNN用来迭代更新Memory

1.3.1.1 输入

事实序列
基于事实序列的门得分

1.3.1.2 模型

对GRU作出改变

Episodic Memory Module需要一个停止迭代的信号。如果是有监督的attention,我们可以加入一个特殊的end-of-passes的信号到inputs中,如果gate选中了该特殊信号,则停止迭代。对于没有监督的数据集,可以设一个迭代的最大值。

1.3.1.3 输出

输出最后一次迭代的

1.4 回答模块(Answer Module)

该模块是最终结果输出的模块,主要是输出答案序列,作为一个decoder。

1.4.1 输入

Question Module的输出
Episode Memory Module的输出

1.4.2 输出

输出序列,每个都是词典长度大小。

1.4.3 模型

这也是一个GRU-RNN,但是跟普通的decoder不一样,因为它的初始状态,而且每一次都用上一次生成的词和问题向量作为输入。

2 训练

训练过程可以看作是一个有监督分类,对答案的输出序列使用cross-entroy目标函数。如果数据集有gate的监督数据,还可以将gate的cross-entroy加到总的cost上去,一起训练。训练直接使用backpropagation和gradient descent就可以。

三、简评

这是DMN的开章,因此这也是最原始的动态记忆网络。文中详细地讲述了DMN的结构,这是理解DMN必读的文章。

四、实现

尽管github上已经有不少的DMN实现,有用theano的,也有用tensorflow的。但是我希望通过复现来仔细学习DMN,因此我使用tensorflow进行实现。
Code: https://github.com/Shawn1993/Dynamic-Memory-Network-for-Tensorflow

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注