赞
踩
前三层分别是char embedding、word embedding、context embedding,不再细说。
主要想记录一下对Attention Flow Layer的一些思考。
首先, 引入attention这一层的目的是为了将“问题的特征”融入到给定的context的embedding中去。 也就是说,在给出合理的答案之前,我们必须按照question的提示,重点关注context中和question语义相关或重叠的那些部分 (比如都出现了某个关键词),这些关键词在原文中所处的位置很有可能就是最终的答案。因此,比较合理的模型应该将question的信息加入到原本的context的特征表示中,知道了重点在哪里之后,之后才会比较容易找到答案。后续很多模型出现的question-aware、question-guided都是这么做的。
经过上面的分析,我们再明确一下我们的目标----即得到经过question修饰的context
embedding。注意一定要是context,而不是question。 好,那么如何来做呢?有两种方法。第一种方法很容易想到,就是原文中的context2query的部分。下面将一步一步分析:
S
t
j
=
α
(
H
:
t
,
U
:
j
)
∈
R
,
S
∈
R
T
×
J
\mathbf{S}_{t j}=\alpha\left(\mathbf{H}_{: t}, \mathbf{U}_{: j}\right) \in \mathbb{R},\mathbf{S} \in \mathbb{R}^{T \times J}
Stj=α(H:t,U:j)∈R,S∈RT×J
其中,H的第t列代表context第t个词(经过前三层)的embedding,同理U的第j列代表question的第j个词(经过前三层)的embedding。我们通过选取有效的α函数,就可以计算出两个单词的相似度,得到这样一个T*J的相似度矩阵。
我个人对相似度矩阵的理解是:只要我们选取的α函数是有效的,那么矩阵里的Stj都可以准确的表示两个单词的语义相似度。 扩展到S t: (第t行)就是,context中第t个单词和question中所有单词的语义相似度。有了这样一组语义相似度以后,那么重点来了,
我们就可以用question中的单词embedding的 " 线性组合 " 来表示context中的每个词的语义embedding。
这就是context2query核心思想。
a
t
=
softmax
(
S
t
:
)
\mathbf{a}_{t}=\operatorname{softmax}\left(\mathbf{S}_{t:}\right)
at=softmax(St:)
U
~
:
t
=
∑
j
a
t
j
U
:
j
\tilde{\mathbf{U}}_{: t}=\sum_{j} \mathbf{a}_{t j} \mathbf{U}_{: j}
U~:t=j∑atjU:j
于是,我们将S矩阵每一行都进行softmax归一化之后,就可以用question中word embedding的线性组合来表示context的每一个词。这样一来就把question的信息成功加入到context里了,即我们之前明确过的目标(这里直观感觉上是我们不仅把question的信息加进来了,甚至是只有question的信息而没有context的信息,但是由于S矩阵引入了context的信息,所以理论上还是合理的)。
接下来到了本文最精彩的部分,也就是得到question-aware context embedding的第二种方法,即原文中的query2context。经过以上的分析,我们不难推断,如果这里仍然按照之前的方法,对S矩阵的每一列做softmax归一化,然后对context的word embedding做线性组合得到的一定是question的word embedding,而我们得到question embedding是没用的,我们的目标是得到context embedding。怎么办呢?让我们伸出小手准备鼓掌
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。