动态记忆网络(DMN)
论文:Ask Me Anything: Dynamic Memory Networks for Natural Language Processing
1、概述
Question answering(QA)是一个复杂的自然语言处理任务,它需要杰出的文本理解力和推理能力。自然语言处理中不部分任务都可以归结为 QA 问题。例如机器翻译(这句话翻译成法语是什么?);序列标注问题(包括词性标注、命名实体识别等);情感分类等。动态神经网络(DMN)是一个统一的神经网络框架,可以用来处理输出的问题序列,形成语义与情景记忆,然后生成相应的答案。DMN 的整体流程就是输入数据(包括数据和问题),然后生成相应的记忆片段,最后解析生成回答。
2、动态神经网络结构
动态神经网络包含了5个模块:输入模块、语义记忆模块、问题模块、片段记忆模块、回答模块。具体的网络结构如下:
1)输入模块
输入模块可以看作一个函数的中间过程,而这个函数最终将返回一个向量表示。输入模块将它的中间值发送给片段记忆模块,片段记忆模块基于问题模块输入的问题和注意机制完成上述函数的计算。输入模块是一个循环神经网络,一般选用GRU,它的输入是词向量(可以通过Glove或者word2vec获得),通过给定的词向量去计算隐藏状态 $c_t$ 。其计算公式如下:
$ c_t = SEQ-MODEL(L[w_t^I], h_{t-1})$
其中 $L$ 是词嵌入矩阵,$w_t^I$ 是第 $t$ 个词的输入序列。
输入模块的输出序列是多个。在输入只有一个句子的情况下,输入模块输出 GRU 的所有隐藏状态。在输入是多个句子的情况下,我们将所有句子拼接,并在每个句子末尾插入句末标记, 每个句末标记的位置的隐藏状态作为输出。
2)语义记忆模块
在上面图中的语义记忆模块是Glove词向量,事实上就是用来生成词向量的模块,作为输入模块的输入。不过作者说在本工作总没有使用它。
3)问题模块
问题模块的模型和输入模块相同,并且共享输入模块中的网络结构和词嵌入权重。问题模块的主要作用是帮助片段记忆模块去提取输入模块中输入的信息。隐藏状态的计算公式和输入模块相同,但是输出的结果只有最后时刻的向量值。
4)片段记忆模块
片段记忆网络基于问题模块中的问题来检索出输入模块中的有用信息。然后推断这些信息生成一个最终的信息表示(也称为记忆),回答模块会基于这个信息表示生成回答。而且片段记忆模块允许多词输入信息,通过注意机制关注每次输入的不同信息。每个输入都会产生一个片段,最后将这些片段归结为记忆。这样我们的模块就可以由多个片段组成,注意机制会关注每个片段的重要信息。这样就行成了传递式推理,因为第一次输入后也许会发现我们需要更多的信息才能得到好的结果。
例如上图中的例子:
$ question\ :\ Where\ is\ the\ football?$
$ inpyt\ :\ John\ put\ down\ the\ football.$
通过上面的输入和并不能很好的解决问题,而且又引入了新的问题,因此需要进一步迭代无寻找关于 $John$ 的输入,正如上图中一个问题对应了三个输入一样。值得注意的是在第二次迭代时错误的给予了输入模块中句子2一些权重(0.3)。
片段记忆模块中的模型是GRU网络,在这里使用门函数作为注意机制,表达式如下:
$ g_t^i = G(c_t, m^{i-1}, q) $
在这里 $c_t$ 表示本次输入的值,$m^{i-1}$ 表示 $i-1$ pass时的值,$ q$ 表示问题向量。具体的门函数表达式如下:
$G(c, m, q) = \sigma(W^{(2)} tanh(W^{(1)}z(c,m,q) + b^{(1)}) + b^{(2)})$
隐藏层更新表达式:
$ h_t^i = g_t^iGRU(c_t, h_{t-1}^i) + (1-g_t^i)h_{t-1}^i$
第 $i $ 次pass的计算片段,为第 $i$ 个序列的隐藏层最后的输出值,其表达是如下:
$ e^i = h_{T_C}^i$
第 $i $ 次pass之后的记忆值,其计算公式如下:
$ m^i = GRU(e^i, m^{i-1})$
5)回答模块
回答模块也是一个GRU网络,从记忆中解码处代表答案的单词序列。回答模块中的网络可以看作是一对多的输入-输出结构。
初始化输入值:$a_0 = m$
$ t $ 时刻的值:$a_t = GRU([y_{t-1}, q], a_{t-1})$
输出值:$ y_t = softmax(W^{(a)};a_t)$
3、训练模型
模型的损失函数:回答序列的交叉熵。
最小化回答序列的交叉熵来训练模型。
动态记忆网络(DMN)的更多相关文章
- NLP教程(7) - 问答系统
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- 【深度学习Deep Learning】资料大全
最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books by Yoshua Bengio, Ian Goodfellow and Aaron C ...
- 论文笔记:Learning Dynamic Memory Networks for Object Tracking
Learning Dynamic Memory Networks for Object Tracking ECCV 2018Updated on 2018-08-05 16:36:30 Paper: ...
- fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
https://mp.weixin.qq.com/s/_xILvfEMx3URcB-5C8vfTw 这个库的目的是探索用深度学习进行NLP文本分类的方法. 它具有文本分类的各种基准模型,还支持多标签分 ...
- 斯坦福大学CS224d课程目录
https://www.zybuluo.com/hanxiaoyang/note/404582 Lecture 1:自然语言入门与次嵌入 1.1 Intro to NLP and Deep Learn ...
- NLP十大里程碑
NLP十大里程碑 2.1 里程碑一:1985复杂特征集 复杂特征集(complex feature set)又叫做多重属性(multiple features)描写.语言学里,这种描写方法最早出现在语 ...
- NLP项目
GitHub NLP项目:自然语言处理项目的相关干货整理 自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域.本文作者为自然语言处理NLP初学者整理了 ...
- NLP文本分类方法汇总
模型: FastText TextCNN TextRNN RCNN 分层注意网络(Hierarchical Attention Network) 具有注意的seq2seq模型(seq2seq with ...
- 一文看懂NLP神经网络发展历史中最重要的8个里程碑!
导读:这篇文章中作者尝试将 15 年的自然语言处理技术发展史浓缩为 8 个高度相关的里程碑事件,不过它有些偏向于选择与当前比较流行的神经网络技术相关的方向.我们需要关注的是,本文中介绍的许多神经网络模 ...
随机推荐
- C#设计模式之九组合模式(Composite Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达的意 ...
- javascript 动态修改css样式
方法一:改变外联css文件,这里不讲这个. 方法二:通过改变claaName来改变样式,语法: obj.className = "style2"; //或者 obj.setAttr ...
- LeNet训练MNIST
jupyter notebook: https://github.com/Penn000/NN/blob/master/notebook/LeNet/LeNet.ipynb LeNet训练MNIST ...
- CSS基础知识思维导图xmind
这是我根据自己的学习笔记整理的思维导图,WEB前端的知识很多,汇总来看会比较清晰.
- js的map遍历和array遍历
1. array遍历: [1].forEach() forEach是ES5中操作数组的一种方法,主要功能是遍历数组.forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第 ...
- BZOJ1299: [LLH邀请赛]巧克力棒(Nim游戏)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 552 Solved: 331[Submit][Status][Discuss] Descriptio ...
- pycharm最新code码,分享给大家
最新的pycharm激活码,到明年11月份,一名努力的Python程序员 这俩天,在忙学校布置的小项目,给大家更新少了,我会慢慢补上的,努力学pycharm,有什么问题可以问我哦,我竭尽所能帮大家解答 ...
- MyBatis 返回主键
1,用于插入语句 2,传入对象 3,使用下面的属性即可 userGengratedKeys="true" keyProperty="orderId" keyCo ...
- Linux查看机器的硬件信息
转载:https://linux.cn/article-9932-1.html
- ionic 确认提示操作框
//确认框 .factory('ActionSheet', function ($ionicActionSheet, TipsPort, Service,Loading) { var ActionSh ...