引言
由于一直在写论文准备毕业的事情,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,hi−1t)+(1−git)hi−1t
这里的上标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=hi−1t。
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=[si∘q;si∘mt−1;∣si−q∣;∣si−mt−1∣]
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}
mt−1之间的相似度,相似度高的权重大,注意
m
t
−
1
m^{t-1}
mt−1初始化为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([yt−1,q],at−1)
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