@songying
2018-07-05T13:30:38.000000Z
字数 1125
阅读 1076
memory-networks
参考博客: https://zhuanlan.zhihu.com/p/29679742
参考源码: https://github.com/carpedm20/MemN2N-tensorflow
数据集: Penn TreeBank, Text8
我们的模型在这两个数据集上取得的效果与RNN和LSTM接近。
, q, a 均由V个单词的词典构成
从上图可以看出,对于输入的句子s分别会使用A和C进行编码得到Input和Output的记忆模块,Input用来跟Question编码得到的向量相乘得到每句话跟q的相关性,Output则与该相关性进行加权求和得到输出向量。然后再加上q并传入最终的输出层。
模型主要参数包括四个矩阵:A, B, c, w .
- A, B, C三个矩阵是embedding矩阵(d × V) ,用于将输入文本, question编码成词向量。
- W是最终的输出矩阵
- 对于输入句子 , 将每个 转化成d维的 memory vectors 。
- query q也embedding成一个internal state
利用softmax计算每个memory与question的匹配度。
Output memory representation
每个 都有对应的输出 vector . response vector
Generating the final prediction
最终的预测标签是
每层的输入是 k层输出 与 k层输入 的和
每一层有自己的 embedding 矩阵
在最顶层, 有:
对于模型中的参数选择, 论文提出了两种方法(主要是为了减少参数量,如果每层参数都不同的话会导致参数很多难以训练)。
1. Adjacent: , 以及 : ,
2. Layer-wise(RNN-like): 与rnn类似选用完全共享参数的方法: , 以及 .由于这样会大大的减少参数量导致模型效果变差,所以提出一种改进方法, 令 .