KBQA知识图谱问答(二) 记忆网络Memory Network

前言

最近刚好在看BAMnet这篇做KBQA的实验,顺带把记忆网络的几篇经典文章看了一下做一下总结。另外就是 Facebook 7月份刚上传的一篇用 memory 来改进 BERT 结构的文章 Large Memory Layers with Product Keys 在精度不降的前提下提高了 BERT 的效率,看来脸书是真的喜欢 Memory这个概念的运用拓展。

MemNN

MEMORY NETWORKS ICLR2015

记忆网络的提出主要是解决 RNN 的隐层无法保存长期记忆、能传达的记忆内容太少的问题。这里就引入了一种外部记忆模块就和 RAM 一样能保存大量历史信息,与一些读写模块一起组成了 Memory Network,如下图:
在这里插入图片描述

由图中可以看出一共有四个模块:

  • I: input feature map
    把输入映射为向量
  • G: generalization
    使用新的输入数据更新记忆内容
  • O: output
    给定新的输入和现有的记忆状态,在特征空间里产生输出
  • R: response
    将输出转化为指定输出形式(自然语言)

具体来说,I模块是 embedding lookup,将原始文本转化为词向量,G模块将输入的向量存储在memory数组的下一个位置,不做其他操作,对老的记忆不做修改。O模块根据输入的问题向量在所有的记忆中选择出 topk 相关的记忆,具体选择方式为,先选记忆中最相关的memory:
o 1 = O 1 ( x , m ) = arg ⁡ max ⁡ i = 1 , … , N s O ( x , m i ) o_{1}=O_{1}(x, \mathbf{m})=\underset{i=1, \ldots, N}{\arg \max } s_{O}\left(x, \mathbf{m}_{i}\right) o1=O1(x,m)=i=1,,NargmaxsO(x,mi)
其中目标函数是用 Bilinear Regression 来建模问题 q q q 和记忆 m m m 的相关程度:
s ( x , y ) = Φ x ( x ) ⊤ U ⊤ U Φ y ( y ) s(x, y)=\Phi_{x}(x)^{\top} U^{\top} U \Phi_{y}(y) s(x,y)=Φx(x)UUΦy(y)
接下来根据选择出的 o 1 o_1 o1 和输入 x x x 一起选择与他们两个最相关的记忆 o 2 o_2 o2
o 2 = O 2 ( x , m ) = arg ⁡ max ⁡ i = 1 , … , N s O ( [ x , m o 1 ] , m i ) o_{2}=O_{2}(x, \mathbf{m})=\underset{i=1, \ldots, N}{\arg \max } s_{O}\left(\left[x, \mathbf{m}_{o_{1}}\right], \mathbf{m}_{i}\right) o2=O2(x,m)=i=1,,NargmaxsO([x,mo1],mi)
然后一直迭代下去,就这样选择出于Question最相关的 topk 个 memory slot 。将其作为R模块的输入,用于生成最终的答案。其实这里也很简单就是使用与上面相同的评分函数计算所有候选词与R输入的相关性,得分最高的词语就作为正确答案输出即可:
r = argmax ⁡ w ∈ W s R ( [ x , m o 1 , m o 2 ] , w ) r=\operatorname{argmax}_{w \in W} s_{R}\left(\left[x, \mathbf{m}_{o_{1}}, \mathbf{m}_{o_{2}}\right], w\right) r=argmaxwWsR([x,mo1,mo2],w)
如果数据集是输出一句话的,那么最后可以用RNNLM来生成带有回复信息的句子。
最后它定义的损失函数(margin ranking loss)如下,设 k = 2 k=2 k=2
∑ f ‾ ≠ m o 1 max ⁡ ( 0 , γ − s O ( x , m o 1 ) + s O ( x , f ‾ ) ) + ∑ f ‾ ′ ≠ m o 2 max ⁡ ( 0 , γ − s O ( [ x , m o 1 ] , m o 2 ] ) + s O ( [ x , m o 1 ] , f ‾ ′ ] ) ) + ∑ r ⃗ ≠ r max ⁡ ( 0 , γ − s R ( [ x , m o 1 , m o 2 ] , r ) + s R ( [ x , m o 1 , m o 2 ] , r ‾ ] ) ) \begin{array}{c}{\sum_{\overline{f} \neq \mathbf{m}_{o_{1}}} \max \left(0, \gamma-s_{O}\left(x, \mathbf{m}_{o_{1}}\right)+s_{O}(x, \overline{f})\right)+} \\ {\sum_{\overline{f}^{\prime} \neq \mathbf{m}_{o_{2}}} \max \left(0, \gamma-s_{O}\left(\left[x, \mathbf{m}_{o_{1}}\right], \mathbf{m}_{o_{2}}\right]\right)+s_{O}\left(\left[x, \mathbf{m}_{o_{1}}\right], \overline{f}^{\prime}\right] ) )+} \\ {\sum_{\vec{r} \neq r} \max \left(0, \gamma-s_{R}\left(\left[x, \mathbf{m}_{o_{1}}, \mathbf{m}_{o_{2}}\right], r\right)+s_{R}\left(\left[x, \mathbf{m}_{o_{1}}, \mathbf{m}_{o_{2}}\right], \overline{r}\right]\right) )}\end{array} f=mo1max(0,γsO(x,mo1)+sO(x,f))+f=mo2max(0,γsO([x,mo1

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值