cs224n 笔记16 用于回答问题的动态神经网络(DMN for QA)

引言

由于一直在写论文准备毕业的事情,cs224这节课一直没有学习完。现在论文弄的差不多啦,在快毕业的这段时间,也把这门课程学习完吧~~

引入

课程首先抛出一个问题,所有的NLP任务都能被看做问答任务吗?
所谓的问答系统就是根据前文信息回答问题,比如在这里插入图片描述
这里I是输入(input),Q是问题(question),A是回答(answer)。在右边的例子中,以问答形式展示了命名实体识别、词性标注以及机器翻译这三种NLP任务。所以,如果可以学习到一个通用的问答模型,那么似乎可以同时解决这些NLP任务,这也就是这节课的重点–DMN。

两个难点

无人研究

这个难点就是说之前没有人用一个通用模型解决所有问题,当然,这节课也有其时效性,课程中的先进算法只是2015年的。不同的任务有其自身的特点,一般都是根据相应特点来搭建模型。
在这里插入图片描述

参数共享

我们做NLP任务时,不同的任务之间共享的一般只是词向量,而DMN则是想共享全部的参数,这样势必会顾此失彼,让NLP任务的效果变差。

DMN

这里讲的动态神经网络DMN只是解决第一个难题,也就是说,这个模型在应用于不同任务时还是需要不同的超参数,但是模型的基本架构还是通用的。
DMN的核心思想就是利用注意力机制,根据问题分配源文的权重,然后经过softmax得到输出序列。
在这里插入图片描述
最左边的模块利用glove得到每个单词的词向量,然后输入到input module中,input module利用GRU计算出每个时刻的隐层状态 s i s_i si。question module是利用GRU将问题表示成向量q。然后根据q利用注意力机制对 s i s_i si分配不同的权重信息,与问题相关的原文权重就高,比如图中和足球有关的信息权重就高。
然后将带有权重信息的原文输入到Episodic memory module中,这个模块有两个GRU轨道,课程中说这样模型具备一定的推理能力,得到原文的向量表示 m t m^t mt,最后经过answer module的softmax得到输出序列。

input module

这个模块就是将原文向量输入到GRU中,利用GRU的隐层状态进行下一步操作。从图中应该可以推断出每个时刻输入的是句子向量,那么在之前应该还有将词向量转为句子向量的操作,比如拼接或者求平均等,课程中没有说明。
在这里插入图片描述
这里的GRU也可以换成双向GRU,将隐层状态拼接输出,一个意思~
在这里插入图片描述

question module

在这里插入图片描述
也是利用GRU得到问题的表示向量q,一般使用GRU的最后一个隐层状态来表示q。

Episodic Memory module

在这里插入图片描述
m t m^t mt
h i t = g i t G R U ( s i , h i − 1 t ) + ( 1 − g i t ) h i − 1 t h_i^t=g_i^tGRU(s_i,h_{i-1}^t)+(1-g_i^t)h_{i-1}^t hit=gitGRU(si,hi1t)+(1git)hi1t
这里的上标t代表回顾几次源文,比如图中有两次,那么t=2,产生 m 1 m^1 m1 m 2 m^2 m2。同时隐层状态 h i t h_i^t hit的计算方式中, g i t g_i^t git是标量,代表注意力机制的计算结果,当 g i t = 0 g_i^t=0 git=0时,该时刻信息不保留,也就是说 h i t = h i − 1 t h_i^t=h_{i-1}^t hit=hi1t
g i t g_i^t git的计算方法如下式所示
z i t = [ s i ∘ q ; s i ∘ m t − 1 ; ∣ s i − q ∣ ; ∣ s i − m t − 1 ∣ ] z_i^t=[s_i \circ q;s_i \circ m^{t-1};|s_i-q|;|s_i-m^{t-1}|] zit=[siq;simt1;siq;simt1]
Z i t = W ( 2 ) t a n h ( W ( 1 ) z i t + b ( 1 ) + b ( 2 ) ) Z_i^t=W^{(2)}tanh(W^{(1)}z_i^t+b^{(1)}+b^{(2)}) Zit=W(2)tanh(W(1)zit+b(1)+b(2))
g i t = e x p ( Z i t ) ∑ k = 1 M i e x p ( Z k t ) g_i^t=\frac {exp(Z_i^t)}{\sum_{k=1}^{M_i}exp(Z_k^t)} git=k=1Miexp(Zkt)exp(Zit)
其核心思想就是计算 s i s_i si m t − 1 m^{t-1} mt1之间的相似度,相似度高的权重大,注意 m t − 1 m^{t-1} mt1初始化为q。

answer module

这个模块就是接收上次输出的单词等信息,经过softmax得到这次的输出。
a t = G R U ( [ y t − 1 , q ] , a t − 1 ) a_t=GRU([y_{t-1},q],a_{t-1}) at=GRU([yt1,q],at1)
y t = s o f t m a x ( W ( a ) a t ) y_t=softmax(W_{(a)}a_t) yt=softmax(W(a)at)

应用任务

问答

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

情感分析

在这里插入图片描述
虽然表现很好,但是需要根据不同的任务调整超参数才能得到最佳结果。

情感分析的一些例子

在这里插入图片描述
颜色越深代表模型的attention越强烈。如果只跑一个pass,则模型无法得到整个句子的全文,所以将过多的注意力放到无关紧要的贬义词上。

词性标注

在这里插入图片描述
在PTB上的词性标注结果

VQA

任何任务都可视作QA任务,所以这个模型也适用于VQA,只需将处理文本的输入模块替换为处理图像的输入模块:
在这里插入图片描述
VQA的输入不是序列的,所以输入模块的输出特征只是所有时刻隐藏状态向量的拼接。
在这里插入图片描述
结果也是很好
在这里插入图片描述
下面介绍的这点就很有意思了,将attention可视化,可以很形象的看出学习的有效性。图中越亮代表越注意,可以发现模型的确在注意问题相关的部分。
在这里插入图片描述
在这里插入图片描述

总结

大部分NLP任务都可视作QA

DMN可以解决多种QA任务

还有可以在问题上也做attention的Dynamic Coattention Networks
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值