当前位置:   article > 正文

【BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION】论文笔记

bi-directional attention

在这里插入图片描述
前三层分别是char embedding、word embedding、context embedding,不再细说。
主要想记录一下对Attention Flow Layer的一些思考。

  • 首先, 引入attention这一层的目的是为了将“问题的特征”融入到给定的context的embedding中去。 也就是说,在给出合理的答案之前,我们必须按照question的提示,重点关注context中和question语义相关或重叠的那些部分 (比如都出现了某个关键词),这些关键词在原文中所处的位置很有可能就是最终的答案。因此,比较合理的模型应该将question的信息加入到原本的context的特征表示中,知道了重点在哪里之后,之后才会比较容易找到答案。后续很多模型出现的question-aware、question-guided都是这么做的。

  • 经过上面的分析,我们再明确一下我们的目标----即得到经过question修饰的contextembedding。注意一定要是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)RSRT×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=jatjU: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。怎么办呢?让我们伸出小手准备鼓掌

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/527739
推荐阅读
相关标签