前言
之前的记忆网络BAM模型是取每个实体的two-hop以内的范围作为关系的候选区,因为WebQA数据集里问题基本能在two-hop以内解决,但是这样只是针对具体情况而缺乏泛华性,最近看到一些论文可以解决KBQA中的多跳问题具有一定参考性,并且这些年做多跳的还是比较少的,SimpleQA数据集精度都差不多登顶了(数据及本身有限制),隔壁用GNN系列在Multi-hop阅读理解上做的也是风生水起,KBQA也可以考虑一下多跳的问题了。
多跳问题就是问句中包含多个关系甚至多个实体,个人认为一方面可能是用到多个三元组推理,另一方面也可能只是要用到多个三元组来解决问题比如 徐峥和黄渤共演的电影有哪些? 这种就是推理,六小龄童在西游记中扮演了那个角色? 这种就是需要用到多个三元组去回答。这里我看到的相关论文是解决后者的。
当时刚看完记忆网络第一反应是用这种形式的网络结构去不断做回馈和再匹配来得到下一步答案,就跟端到端那篇做阅读QA的可视化效果那种解释来用到KBQA同样适用(如下图),但是有个很大的问题就是KBQA没有上下文只有一句问句,用关系表示去做映射效果不一定会很好,更不用说在open-domain里做了。
Enhancing Key-Value Memory Neural Networks for Knowledge Based Question Answering
这是NAACL2019的一篇论文,之前也看到了但是没有细看,这里的方法就是看完记忆网络系列的文章后水到渠成而来的结果,论文的贡献点是解决KBQA中的三种问题:
- 多跳问题怎么去做匹配
- 搜索多个候选三元组时为了效率怎么及时停下搜寻
- 不需要semanic parsing那样大量的人工标注但也能借鉴其中的灵活度
1、多跳推理:
关于KV-MemNN之前的博客已经讲过了,这里与BAM不同的是它将问题的表示向量 q q q做了更新重新放回网络再做二次reasoning:
p i = Softmax ( A Φ ( x ) ⋅ A Φ ( k i ) ) p_{i}=\operatorname{Softmax}\left(A \Phi(x) \cdot A \Phi\left(k_{i}\right)\right) pi=Softmax(AΦ(x)⋅AΦ(ki))
o = ∑ i p i A Φ ( v i ) o=\sum_{i} p_{i} A \Phi\left(v_{i}\right) o=i∑piAΦ