AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

动态记忆网络:向通用 NLP 更近一步

  • 2019-05-17
  • 本文字数:1732 字

    阅读完需:约 6 分钟

动态记忆网络:向通用NLP更近一步

本文需要读者对诸如 LSTM 和 GRU(包括 seq2seq 编码器-解码器架构)之类的递归神经网络有一定的基础。


众所周知,通用 NLP 的一大障碍是不同的任务(例如文本分类,序列标记和文本生成)需要不同的序列结构。 解决这个问题的一种方法是将这些不同的任务看作是问答形式的问题。比如,文本分类问题可以视为询问模型某段文本表达的情绪是什么,答案可以是“积极”,“消极”或“中立”之一。


论文《有问必答:用于自然语言处理的动态记忆网络》(Ask Me Anything: Dynamic Memory Networks for Natural Language Processing)介绍了一种用于问答形式问题的新型模块化结构。


对于复杂的问答式问题而言,LSTM 和 GRU 的记忆组件可能成为瓶颈。仅一次前馈就想将记忆组件中的所有相关信息积聚起来是非常困难的,因此,该论文背后的关键思想是允许模型根据需要任意访问数据。


尽管乍看起来,这一架构非常复杂,但是它可以分解为许多简单的组件。


模 型

语义记忆模块

语义记忆模块指的是词嵌入(词向量表示),例如 Glove 向量,即输入文本在被传递到输入模块之前被转换成的向量。

输入模块


输入模块即指标准的 GRU(或 BiGRU),每个句子的最后的隐状态是明确可访问的。

问题模块


问题模块也是标准的 GRU,其中待解答的问题作为输入项,并且最后的隐状态是可访问的。

情景记忆模块


这一模块可让输入数据进行多次前馈。在每次前馈时,输入模块中的句子嵌入表示(sentence embedding)作为输入传递到情景记忆模块中的 GRU。 此时,每个句子嵌入表示都会被赋予权重,权重与其被询问的问题的相关性相对应。


对于不同的前馈,句嵌入表示会被赋予不同的权重。 比如,在下面的例子中:



由于句子(1)与问题没有直接关系,因此可能不会在第一次被赋予高权重。 然而,在第一次前馈时,模型发现足球与约翰相关连,因此在第二次前馈时,句子(1)被赋予了更高权重。


在第一次前馈(或第一个“episode”)中,问题嵌入表示(question embedding)'q’被用于计算来自输入模块的句子嵌入表示(sentence embedding)的注意力分数。然后,将句子 sᵢ的注意力得分输入 softmax 层(使得注意力得分总和为 1)或单个 sigmoid 单元来获得 gᵢ。gᵢ是赋予句子 sᵢ的权重,并作为在 timestep i 中 GRU 的输出项的全局门(global gate)。


timestep i 和 episode t 的隐状态计算如下:



当 g = 0 时,直接复制隐状态:



论文中用 mᵗ来表示 GRU 第 t 个 episode 最后的隐状态,可被视为在第 t 个 episode 中发现的事实聚集。 从第二个 episode 开始,mᵗ被用于计算第 t+1 个 episode 中句子嵌入表示以及问题嵌入表示 q 的注意力分数。


计算过程如下:



论文采用了许多简单的度量方法来计算 sᵢ和 q 以及 sᵢ和 mᵗ-1 之间的相似性,即元素相乘法和绝对值。然后将连接的结果输入一个 2 层的神经网络来计算 sᵢ的注意力得分。 对于第一个 episode,m⁰被替换为 q。


episode 的数量可以是固定的、预定义的数字,也可以由网络本身确定。在后一种情况下,为输入附加一项特殊的前馈结束表示(end-of-passes representation)。如果门函数(gate function)选择该向量,则停止迭代。

回答模块


回答模块由解码器 GRU 组成。 在每个 timestep,之前的输出将与问题嵌入表示一同作为输入项输入该模块。



然后使用词汇表上的标准 softmax 生成输出。


解码器通过 m 个向量的一个函数(来自情景记忆模块的 GRU 计算的最后隐藏状态)进行初始化。

情感分析应用

该论文发表时,其模型取得了当时情绪分析领域的最先进结果。



例如,在下面示例中,模型会关注所有的形容词,在仅允许 1 次前馈时,模型会产生不正确的预测。 然而,当允许 2 次前馈时,该模型在第二次前馈时会对积极的形容词倾注非常高的注意力,并产生正确的预测。


(情感的注意力分析)

其它数据集的表现


替换模块

模块化的一个重要好处是,可以在不修改任何其他模块的情况下将一个模块替换为另一个模块,只要替换模块具备正确的接口。


论文《用于视觉和文本问答的动态记忆网络》展示了动态记忆网络在基于图像回答问题中的作用。


输入模块被另一模块替换,后者基于 CNN 的网络从图像中提取特征向量。然后提取的特征向量会像以前一样输入到事件记忆模块。





阅读原文:


https://towardsdatascience.com/a-step-towards-general-nlp-with-dynamic-memory-networks-2a888376ce8f


2019-05-17 08:005284

评论

发布
暂无评论
发现更多内容

创建spring boot starter

曾彪彪

Java spring Boot Starter

USDT承兑商支付系统搭建,区块链支付平台开发

记一次node项目重构改进

华为云开发者联盟

Java 项目 方案

大项目写代码写到晕头转向?敏捷多项目框架解君愁

Learun

敏捷开发 软件开发

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

不想码代码,你还能做什么?(一)

研发管理Jojo

项目管理 技术管理 PMO

一定要写点什么?!

docker 安装consul

云辰

TNFE-Weekly[第七十二周已更新]

莹姐🙈

小程序 大前端 周刊

想学习数据结构和算法,推荐给你 10 本优质书单

沉默王二

数据结构 算法 书单推荐

东方证券企业架构之技术架构转型实践

BoCloud博云

云计算 容器 微服务 PaaS 博云

Docker映射详解,没问题了!

程序员的时光

Docker

5分钟带你掌握Makefile分析

华为云开发者联盟

makefile 脚本

将DevOps视为哲学——实施DevOps的绝佳方式

禅道项目管理

DevOps 测试 开发 持续交付

案例解析丨Spark Hive自定义函数应用

华为云开发者联盟

spark UDF

程序员快乐器之JAVA代码生成工具

Philips

敏捷开发 程序设计 软件架构 开发工具

区块链永续合约交易所搭建,永续合约系统开发

中途转行学Java,如何赛过科班生?你只需要做到这几点

小Q

Java 程序员 架构 技术 基础

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

碰撞率下降75%!Mobileye与所托瑞安宣布双方合作重大进展

最新动态

实践案例丨基于Raft协议的分布式数据库系统应用

华为云开发者联盟

raft 华为云

Python中的with是测试常用到的资源打开利器

陈磊@Criss

什么是云服务器,ECS它能干什么?

德胜网络-阳

LeetCode题解:1. 两数之和,Map+队列+双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

java中实现List集合中对象元素按其属性的中文拼音排序

云辰

同城双活与异地多活架构分析

vivo互联网技术

架构 高可用 架构设计 高可用系统的架构

基于electron桌面级脚手架的设计

久违

设计 大前端 全栈

使用Valgrind调试Linux C++程序

Simon

c++ gdb Valgrind memcheck 内存泄漏

【写作群星榜】9.1~9.13写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 文章

从linux源码看epoll

无毁的湖光

Linux TCP Linux Kenel

动态记忆网络:向通用NLP更近一步_AI&大模型_Anusha Lihala_InfoQ精选文章