论文: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)的更多相关文章

  1. NLP教程(7) - 问答系统

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  2. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  3. 论文笔记:Learning Dynamic Memory Networks for Object Tracking

    Learning Dynamic Memory Networks for Object Tracking  ECCV 2018Updated on 2018-08-05 16:36:30 Paper: ...

  4. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择

    https://mp.weixin.qq.com/s/_xILvfEMx3URcB-5C8vfTw 这个库的目的是探索用深度学习进行NLP文本分类的方法. 它具有文本分类的各种基准模型,还支持多标签分 ...

  5. 斯坦福大学CS224d课程目录

    https://www.zybuluo.com/hanxiaoyang/note/404582 Lecture 1:自然语言入门与次嵌入 1.1 Intro to NLP and Deep Learn ...

  6. NLP十大里程碑

    NLP十大里程碑 2.1 里程碑一:1985复杂特征集 复杂特征集(complex feature set)又叫做多重属性(multiple features)描写.语言学里,这种描写方法最早出现在语 ...

  7. NLP项目

    GitHub NLP项目:自然语言处理项目的相关干货整理 自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域.本文作者为自然语言处理NLP初学者整理了 ...

  8. NLP文本分类方法汇总

    模型: FastText TextCNN TextRNN RCNN 分层注意网络(Hierarchical Attention Network) 具有注意的seq2seq模型(seq2seq with ...

  9. 一文看懂NLP神经网络发展历史中最重要的8个里程碑!

    导读:这篇文章中作者尝试将 15 年的自然语言处理技术发展史浓缩为 8 个高度相关的里程碑事件,不过它有些偏向于选择与当前比较流行的神经网络技术相关的方向.我们需要关注的是,本文中介绍的许多神经网络模 ...

随机推荐

  1. Javascript删除数组里的某个元素

    删除array数组中的某个元素,首先需要确定需要删除元素的索引值. ? 1 2 3 4 5 6 7 var arr=[1,5,6,12,453,324]; function indexOf(val){ ...

  2. JS对全角与半角的验证,相互转化以及介绍

    1.什么是全角和半角? 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节. 汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都 ...

  3. CSS3布局之多列布局columns详解

    columns语法:columns:[ column-width ] || [ column-count ]设置或检索对象的列数和每列的宽度 其中:[ column-width ]:设置或检索对象每列 ...

  4. cf55D. Beautiful numbers(数位dp)

    题意 题目链接 Sol 看到这种题就不难想到是数位dp了. 一个很显然的性质是一个数若能整除所有位数上的数,则一定能整除他们的lcm. 根据这个条件我们不难看出我们只需要记录每个数对所有数的lcm(也 ...

  5. 如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor

    要想快速完成一个项目, 自动化是很关键很有用的一块. 自动化测试比人工测试快很多. 特别是在回归测试中. 实践证明, 虽然投入了时间在写自动化测试代码上, 但是在回归测试中节省了大量的时间,同时及时发 ...

  6. NoHttp封装--07 自定义异步任务框架

    MainActivity: public class MainActivity extends Activity implements View.OnClickListener { .... @Ove ...

  7. (后台)SQL Server 代理(已禁用代理 XP) 怎么解决(转)

    百度知道搜索的答案: 在SQL Server Management Studio中连接到SQL Server实例后,会显示“SQL Server 代理”节点.如果当前该实例的Agent服务没有启动,“ ...

  8. solidity高级理论(三):时间单位与view

    solidity高级理论(三):时间单位与view 关键字:时间单位.view.Gas优化 solidity使用自己的本地时间单位 变量 now 将返回当前的unix时间戳(自1970年1月1日以来经 ...

  9. asp.net Web项目中使用Log4Net进行错误日志记录

      使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能 ...

  10. Linux核心调度器之周期性调度器scheduler_tick--Linux进程的管理与调度(十八)

    我们前面提到linux有两种方法激活调度器:核心调度器和 周期调度器 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因 ...