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

在这里插入图片描述
前三层分别是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。怎么办呢?让我们伸出小手准备鼓掌👏
    b = softmax ⁡ ( max ⁡ c ρ l ( S ) ) ∈ R T \mathbf{b}=\operatorname{softmax}\left(\max _{c \rho l}(\mathbf{S})\right) \in \mathbb{R}^{T} b=softmax(cρlmax(S))RT
    h ~ = ∑ t b t H : t ∈ R 2 d \tilde{\mathbf{h}}=\sum_{t} \mathbf{b}_{t} \mathbf{H}_{: t} \in \mathbb{R}^{2 d} h~=tbtH:tR2d
    作者对S矩阵中的每一行取最大值,得到一个T维的向量,然后对这个向量做softmax归一化,并作为context word embedding进行线性组合的系数,得到的组合结果记为h~,最后将h重复T次。为社么这样做就可以了呢。
    举个例子,如果我们不进行“对S矩阵的每一行取最大值”的操作,直接利用第一行进行的系数进行线性组合,得到的一定是question中第一个单词的embedding。然而,如果加了取最大值的操作后,我们得到一个T维的列向量,这个列向量的意义就发生了变化,它再不代表某一个特定的question word对所有context word的相似度,而是question整体对context word的相似度。 如果这个T维向量中的第t个位置的数值比较大,这说明question中出现了和conetxt第t个单词语义相似的词(虽然经过了取最大值的操作,不确定到底到底是question中的哪个位置出现的,但是这并不影响),那么我们用这个比较大的数去乘以对应的context word,不就相当于把question的信息加进来了吗?这样一来,我们就根据question的提示,把注意力集中到了context中与question语义相关的那些单词上。好了,大家可以开始鼓掌👏了。
    G : t = β ( H : t , U ~ : t , H ~ : t ) ∈ R d G \mathbf{G}_{: t}=\boldsymbol{\beta}\left(\mathbf{H}_{: t}, \tilde{\mathbf{U}}_{: t}, \tilde{\mathbf{H}}_{: t}\right) \in \mathbb{R}^{d_{\mathrm{G}}} G:t=β(H:t,U~:t,H~:t)RdG
    最后,我们将原始context word embedding、经过两种方法得到的question-aware context embedding进行融合,作为attention层的输出。

  • 接下来是Modeling Layer:将G通过一个两层的双向LSTM去重新捕获加入了question信息之后的单词间的interaction。LSTM的输出记为M。

  • 最后是Output Layer:p1计算的是context中的每个词正好是答案start的概率。p2是end。
    p 1 = softmax ⁡ ( w ( p 1 ) ⊤ [ G ; M ] ) \mathbf{p}^{1}=\operatorname{softmax}\left(\mathbf{w}_{\left(\mathbf{p}^{1}\right)}^{\top}[\mathbf{G} ; \mathbf{M}]\right) p1=softmax(w(p1)[G;M])
    p 2 = softmax ⁡ ( w ( p 2 ) ⊤ [ G ; M 2 ] ) \mathbf{p}^{2}=\operatorname{softmax}\left(\mathbf{w}_{\left(\mathbf{p}^{2}\right)}^{\top}\left[\mathbf{G} ; \mathbf{M}^{2}\right]\right) p2=softmax(w(p2)[G;M2])
    其中end index的预测需要将M再通过一次LSTM网络,得到M2
    L ( θ ) = − 1 N ∑ i N log ⁡ ( p y i 1 1 ) + log ⁡ ( p y i 2 2 ) L(\theta)=-\frac{1}{N} \sum_{i}^{N} \log \left(\mathbf{p}_{y_{i}^{1}}^{1}\right)+\log \left(\mathbf{p}_{y_{i}^{2}}^{2}\right) L(θ)=N1iNlog(pyi11)+log(pyi22)
    然后让gt序号的概率值最大,也就是这里的 L(θ)最小。

注意

论文中S矩阵的维度和给出的图好像是反的,本文的解释是按照论文中给出的S维度来解释的,如果按照图来看可能需要自行转换理解。当时看这篇论文云里雾里的,被这两个attention绕来绕去,看明白之后整理一下方便以后回忆,如果能帮到其他人理解就更好啦。
还有,这些都是个人理解,不知道有没有不对的地方。如果有的话欢迎大家指出。溜了溜了…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值