论文笔记

模型

由四个模块组成,分别是输入模块,记忆模块,推理模块和回答模块
Bidirectional Attentive Memory Networks for Question Answering over Knowledge Bases

输入模块

输入一个自然语言问题,使它经过embedding层将单词序列转换为embedding序列,使用双向LSTM将它编码,这些编码就是双向LSTM的隐藏状态

记忆模块

候选生成

虽然所有的KB中的实体都可以作为候选的答案,但是这样做代价非常高昂而且没有必要。我们只考虑和句子中主题词距离很近的词语。答案就是对实体节点的一个文本描述(例如,年龄)。举个例子,Ohio是问题“Who was the secretary of state of Ohio in 2011?”的主体词。在得到问题的主题词之后,我们要手机所有和它相连的h hops以内的实体作为候选答案。

知识库表示

从KB中得到的每一个候选答案,我们将它们编码为三种类型的信息,分别是答案类型,路径和上下文。

Answer type 答案类型

实体类型信息是排序答案的重要线索。举个例子,如果一个问题使用了疑问词where,那么答案中那些类型与地点相关的就更可能是正确答案。我们使用一个BiLSTM来编码它的描述来得到一个d维向量Ht

Answer path 答案路径

我们定义一个答案路径:一个从候选答案到主题词实体的关系序列。举个例子,对于Ohio这个问题,(见图)Jon A.Hused的答案路径既可以表示为关系id的序列[office_holder,governing_officials]或者文本描述[office,holder,governing,officials]。因此我们通过BiLSTM编码答案路径为Hip1H^{p1}_iHip2H^{p2}_i则是通过计算关系embeddings的平均值(通过一个关系embedding层)

Answer context 答案上下文

答案上下文指的是候选答案周围的实体,并且这些实体在有限制条件的情况下可以帮助回答问题。例如,还是上面的例子,实体Jon A.Hused的上下文包括了政府职务头衔secretary of state和开始日期2011-01-09。然而,对于没有限制条件的简单问题,答案上下文并不是必须的而且可能吸收噪音。我们使用两种策略来解决这个问题:

  1. 使用了一个importance module来聚焦于重要的答案层面(之后解释)
  2. 我们仅仅考虑那些与问题有重叠(overlap)的上下文节点。

特别地,对于每一个候选答案的上下文节点,我们首先计算它和问题的最长公共子序列,当且仅当我们得到一个非终结的子串,再将它通过BiLSTM编码。最后,候选答案的答案上下文会被编码为所有上下文节点的平均,记作向量HicH^c_i

Key-value 记忆模块

在我们的模型中,我们使用了一个key-value记忆网络来存储候选答案。不像基础的记忆网络,它的addressing阶段基于key的记忆,reading阶段基于值记忆,通过这样的功能分离,为编码先验知识提供了很好地灵活性。因此,在编码完答案类型,路径和上下文之后,我们使用线性预测:

Mikt=ftkHit1M^{kt}_i=f^k_t(H^{t_1}_i)
Mtvt=ftvHit1M^{vt}_t=f^v_t(H^{t1}_i)
Mikp=fpk[Hip1;Hip2]M^{kp}_i=f^k_p([H^{p1}_i;H^{p2}_i])
Mivp=fpv[Hip1;Hip2]M^{vp}_i=f^v_p([H^{p1}_i;H^{p2}_i])
Mck=fck(Hic)M^k_c=f^k_c(H^c_i)
Mcv=fcv(Hic)M^v_c=f^v_c(H^c_i)

MiktM^{kt}_iMivtM^{vt}_i是答案类型AitA_i^t的d维key和value向量表示。相似的,我们同样有key和value表示答案路径和上下文。使用M来作为key-value记忆,它的行Mi={Mik,Miv}M_i=\{M^k_i,M^v_i\},这里Mik=[Mikt;Mikp;Mikc]M^k_i=[M^{k_t}_i;M^{k_p}_i;M_i^{k_c}]组成了key,

Miv=[Mivt;Mivp;Mivc]M^v_i=[M^{v_t}_i;M^{v_p}_i;M_i^{v_c}]组成values。这里的[,]和[;]表示按行和按列连接。

推理模块

推理模块由一个泛化模块还有我们的双层双向注意力网络组成。这个双层双注意力网络用来捕捉问题和KB间的双向交互。主注意力网络包括了KB-aware注意力模块,根据KB来聚焦于问题的重要部分,importance module则根据问题来聚焦于KB中的重要部分。副注意力网络通过进一步利用双向注意力机制来增强问题和KB向量。

KB-aware 注意力模块

问题中的所有单词并不都是一样的。我们是用一个KB-aware注意力机制来聚焦于问题中的重要部分,(例如图3)。特别地,我们首先使用self attention在所有的问题的词向量HQH^Q上来得到d维的问题向量q,公式如下:
q=BiLSTM([HQAQQT,HQ])q = BiLSTM([H^QA^{QQ^T},H^Q])
AQQ=softmax((HQ)THQ)A^{QQ} = softmax((H^Q)^TH^Q)
softmax默认应用于输入张量的最后一个维度。使用问题总结向量q,应用另一个基于记忆的attention(AttaddAtt_{add})来得到答案类型mtm_t,路径mpm_p,上下文mcm_c
mx=i=1AaiXMivxm_x=\sum_{i=1}^{|A|}a^X_i\cdot M_i^{v_x}
ax=Attadd(q,Mkx)a^x = Att_{add}(q,M^{k_x})

这里x{t,p,c}x\in \{t,p,c\}Attadd(x,y)=softmax(tanh([xT,y]W1)W2)Att_{add}(x,y)=softmax(tanh([x^T,y]W_1)W_2),W1R2d×dW_1\in R^{2d\times d}W2Rd×1W_2\in R^{d\times 1}

,这都是可训练的权重

至此我们根据问题得到了KB summary m=[mt;mp;mc]m=[mt;mp;mc]。继续计算问题到KB的attention,在问题单词qiq_i和KB之间,通过公式AQm=HQTmA^{Qm}=H^{Q^T}m,对AQmA^{Qm}的最后一个维度应用maxpooling,也就是说aiQ=maxjAijQma_i^Q=max_jA^{Qm}_{ij},我们选择qiq_i和知识库之间最强的链接。这之后的想法是问句中的每一个单词都有特定的意义,(例如指明了答案类型,路径或者上下文),max pooling可以帮助找出这个目标。我们在应用一个softmax来得到一个向量a~Q\widetilde{a}^Q,这个就是一个KB-aware question attention 向量,因为它根据KB指明了qiq_i的重要程度

Importance 模块

importance模块聚焦于重要的KB部分,通过问题中的相关性来进行衡量。(通过问题来衡量知识库中哪一部分重要)。首先要计算一个Q×A×3|Q|\times |A|\times 3(应该是这么多维度)的attention 张量,AQMA^{QM}它表示了每一对链接的强度{qi,Ajx}x={t,p,c}\{q_i,A^x_j\}^{x=\{t,p,c\}}。然后我们取AQMA^{QM}的问句单词维数的最大值并将它标准化得到注意力矩阵A~M\widetilde{A}^M,它表示了每一个候选答案某一方面的重要性。之后,我们继续计算question-aware记忆表示M~k\widetilde{M}^k。(论文公式4)
M~v={M~i=1A}RA×d\widetilde{M}^v=\{\widetilde{M}^{|A|}_{i=1}\}\in R^{|A|\times d}
M~iv=j=13Mijv\widetilde{M}^v_i=\sum_{j=1}^3M^v_{ij}
M~k={M~ik}i=1ARA×d\widetilde{M}^k=\{\widetilde{M}^k_i\}^{|A|}_{i=1}\in R^{|A|\times d}
M~ik=A~iMMik\widetilde{M}^k_i=\widetilde{A}^M_iM^k_i
A~=softmax(AMT)T\widetilde{A}=softmax(A^{M^T})^T
AM=maxi{AiQM}i=1QA^M=max_i\{A^{QM}_i\}^{|Q|}_{i=1}
AQM=(MkHQ)TA^{QM}=(M^kH^Q)^T

Enhancing 模块

进一步加强问题和KB表示,通过利用双向attention。计算KB-enhanced问题表示q~\widetilde{q}它利用了相关的KB信息,通过在AQMA^{QM}的最后一个维度应用max pooling。那就是说AMQ=maxk{A.,.,kQM}k=13A^Q_M=max_k\{A^{QM}_{.,.,k}\}^3_{k=1},然后将其标准化得到一个question-to-KB attention 矩阵A~MQ\widetilde{A}^Q_M,我们从这个矩阵计算出了question-aware KB summary并且将它吸收至问题表示H~Q=HQ+a~Q(A~MQM~v)T\widetilde{H}^Q=H^Q+\widetilde{a}^Q\bigodot(\widetilde{A}^Q_M\widetilde{M}^v)^T。最后,我们得到了一个d维KB-enhanced问题表示向量
q~=H~Qa~Q\widetilde{q}=\widetilde{H}^Q\widetilde{a}^Q。相似地,我们可以计算一个question-enhanced KB表示Mk\overline{M}^k吸收了相关的问题信息:

Mk=M~k+a~M(A~QM(H~Q)T)\overline{M}^k=\widetilde{M}^k+\widetilde{a}^M\bigodot(\widetilde{A}^M_Q(\widetilde{H}^Q)^T)

a~M=(A~MQ)Ta~QRA×1\widetilde{a}^M=(\widetilde{A}^Q_M)^T\widetilde{a}^Q\in R^{|A|\times1}

A~QM=softmax(AMQT)RA×Q\widetilde{A}^M_Q=softmax(A^{Q^T}_M)\in R^{|A|\times|Q|}

泛化模块

我们在回答问题之前增加了一个one-hop attention。我们使用问题表示q~\widetilde{q}在key 记忆矩阵Mk\overline{M}^k上通过注意力机制查询,并从值记忆中取回最相关的信息,这些信息被用来使用取更新问题向量。最后,我们应用一个residual 层和batch norm,帮助模型优化。因此我们有:

q^=BN(q~+q)\widehat{q}=BN(\widetilde{q}+q')
q=GRU(q~,m~)q'=GRU(\widetilde{q},\widetilde{m})
m~=i=1AaiM~iv\widetilde{m}=\sum_{i=1}^{|A|}a_i\cdot\widetilde{M}^v_i
a=AttaddGRU(q~,Mk)a=Att^{GRU}_{add}(\widetilde{q},\overline{M}^k)

回答模块

给定一个问题Q的表示q^\widehat{q}和候选答案{Ai}i=1A\{A_i\}^{|A|}_{i=1}的表示{Mik}\{\overline{M}^k_i\},我们可以计算一个匹配得分S(q^,Mik)S(\widehat{q},\overline{M}^k_i)在每一对(Q,Ai)(Q,A_i)S(q,a)=qTaS(q,a)=q^T\cdot a。候选答案根据这个得分来进行排序

相关文章: