cs224d lecture16 dynamic Memory network

主要内容:

paper:Ask Me Anything: Dynamic Memory Networks for Natural Language Processing

是否所有NLP任务都可视作QA?

在old-school NLP系统中,必须手工整理一个“知识库”;然后在这个知识库上做规则推断。这节课介绍的DMN完全不同于这种小作坊,它能够直接从问答语料中学习所有必要的知识表达。

DMN还可以在问答中做情感分析、词性标注和机器翻译。

所以构建一个joint model用于通用QA成为终极目标。

要实现这个目标,有两个障碍。

  1. 没有任何已有研究探讨过如何让单个模型学会这么多的任务。每种任务都有独特的特点,适合不同的神经网络来做:
  1. 第二个障碍

Fully joint multitask learning(同一个decoder/classifier,不仅仅共享词向量,而应该共享全部参数)非常困难。

有些不成功的研究发现,只能在低层(词向量)共享参数、如果任务之间没有直接关联则会顾此失彼。

感觉就是迁移学习无法应用于 nlp 上,同时应到到两个不同的任务上,然后对相同的参数进行训练,往往会得到很差的效果。 So if you're trying to train two tasks together in one model, say you just have two softmaxes on the same Hidden state of your LSTMs. It turns to actually get worse in many cases, too.

Dynamic Memory Networks

今天介绍的DMN仅仅解决了第一个问题。虽然有些超参数还是得因任务而异,但总算是个通用的架构了。

回答特别难的问题

你无法记住全文,但看了问题之后,只要带着问题扫几眼原文,你就能找出答案。

这种现象启发了DMN。

Dynamic Memory Networks

先来看big picture(接下来会对每个模块单独讲解):

主要有以下几个module:

  • semantic memory module: 词向量
  • input module: 使用GRU或LSTM对原文进行encoder,每一个word对应一个hidden vector,同question mudule 共享 GRU 的权重参数
  • Question Module 和 Episodoc memory Module: 计算出一个Question Vector q,根据q应用attention机制,回顾input的不同时刻。根据attention强度的不同,忽略了一些input,而注意到另一些input。这些input进入Episodic Memory Module,注意到问题是关于足球位置的,那么所有与足球及位置的input被送入该模块。该模块每个隐藏状态输入Answer module,softmax得到答案序列。

attention 的过程实际上是一个 transitive reasoning 传递关系的过程:

比如上图中,问题是关于football的语义 question vector q,那么带着 q 回顾一遍原文,找到 John put down the football, 得到Episodic memory modelu的输出 \(m^1\), 然后带着q 和 \(m_1\) 再回顾一次原文,然后又找到 John moved to the bedroom 和 John went to the hallway, 计算得到 \(m^2\).

具体怎么实现看接下来具体模块的讲解。

input Module

输入模块接受 \(T_I\) 个输入单词,输出 \(T_C\) 个“事实”的表示。如果输出是一系列词语,那么有 \(T_C=T_I\);如果输出是一系列句子,那么约定 \(T_C\) 表示句子的数量,\(T_I\) 表示句子中单词的数量。我们使用简单的GRU读入句子,得到隐藏状态 \(h_t=GRU(x_t,h_{t−1})\),其中 \(x_t=L[w_t]\),L是embedding matrix,\(w_t\) 是时刻 t 的词语。

事实上,还可以将这个Uni-GRU升级为Bi-GRU:

Question Module

Episodic Memory Mudule

\[h_i^t=g_i^tGRU(s_i,h_{i-1}^t)+(1-g_i^t)h_{i-1}^t\]

其中:

  • \(g_i^t\) is just a single scalar number. Should I pay attention to this sentence.也相当于一个gate机制,当 \(g_i^t=0\) 时表示与 \(s_i\) 无关。
  • 上标t表示 \(t^{th}\) time that we went over the entire input.

如何计算 \(g_i^t\) ,也就是怎么判断当前迭代与input中的每个sentence是否相关。

相当简单和直接: sentence similarity: element-wise product or subtraction of sentence vector.

计算sentence相似性:

\[z_i^t=[s_i\circ q; s_i\circ c^{t-1}; |s_i-q|; |s_i-m^{t-1}|]\]

一个双层neural network:

\[Z_i^t = W^{(2)}tanh(W^{(1)}z_i^t+b^{(1)})+b^{(2)}\]

softmax计算当前迭代次数下每个sentence所占的比重:

\[g_i^t=\dfrac{exp(Z_i^t)}{\sum_{k=1}^{M_i}exp(Z_i^t)}\]

Answer Module

相关工作

有很多已有工作做了类似研究:

  • Sequence to Sequence (Sutskever et al. 2014)

  • Neural Turing Machines (Graves et al. 2014)

  • Teaching Machines to Read and Comprehend (Hermann et al. 2015)

  • Learning to Transduce with Unbounded Memory (Grefenstette 2015)

  • Structured Memory for Neural Turing Machines (Wei Zhang 2015)

  • Memory Networks (Weston et al. 2015)

  • End to end memory networks (Sukhbaatar et al. 2015)

同 MemNet 对比

相同点

  • 都有input, scoring, attention and response模块

不同点

  • MemNets对于input representations 使用词袋,然后有一些embedding去encode位置, DMN 使用 GRU

  • MemNets迭代运行attention和response

这些不同点都是由于MemNets是个非sequence模型造成的。而DMN是个血统纯正的neural sequence model,天然适合序列标注等任务,比MemNets应用范围更广。

DMN的sequence能力来自GRU,虽然一开始用的是LSTM,后来发现GRU也能达到相同的效果,而且参数更少。(这回答了GRU和LSTM那节课有个学生的问题:哪个计算复杂度更低。Manning当时回答应该是一样的,还不太相信Richard的答案。说明在工程上,还是做实验的一线博士更有经验)

Evaluation

这是一个自动生成的QA语料库,里面都是一些简单的问答。部分NLP学者很厌恶机器生成的语料,但如果连机器生成的语料都无法解决,何谈解决真实的复杂问题。

情感分析

依然拿到最高分数。

此时问题永远是相同的,其向量是固定的。

遗憾的是,对于不同的任务,超参数依然必须不同才能拿到最佳结果。

Episodes数量:

其中task3是三段论,理论只需要3个pass,但模型依然需要5个。考虑到这是个end to end训练,没有监督信号指示那些fact是重要的,所以这个表现还挺好。情感分析的NA是因为,计算复杂度实在太高了。分数已经在降低,所以干脆没跑。

情感分析的一些例子

VQA vision question answering

Everthing is Question Answering, 这也太酷了吧~

input module 不太一样,这里是通过CNN提取特征,将图像中的每一块区域用向量表示,然后作为GRU的输入。由于卷积特征并不是序列的,所以输入模块的输出特征只是所有时刻隐藏状态向量的拼接。

显然这需要很好的数据集啊。。

这就真的很吊了~!

最高分。。

 总结

参考