激活矩阵表示的是每一步中关注的关系,比如我们关注问题“xx公司的董事长投资了哪家公司”中的两个关系“董事长”和“投资”。我们通过一个矩阵来表示关系,对于知识图谱来说有N个节点,对这N个节点考虑它们两两之间的关系,得到一个NxN的矩阵。我们的激活矩阵对应到这个NxN的矩阵上,相应关系上的元素置为1,其它位置置为0。
激活向量和激活矩阵用a和W表示,因为这是一个多跳过程,使用上标t来表示进行到哪一步,每一步我们关注的实体和关系都是不一样的。方法的核心是建模实体通过关系转移到另一实体,我们通过at-1乘以Wt的矩阵乘法来实现,上图给出一个直观的例子。

我们可以通过链式乘法来进行多跳转移,一开始主题实体是a0,然后通过链式乘法构造不同的激活矩阵W,来一步一步建模多跳问题的转移。在每一步中通过注意力机制关注问题的不同部分,激活对应关系。如上图下侧,在第0步,找到问题中的主题实体“xx公司”,构造激活向量a0,在第1步中对问题做一个注意力机制,找到需要关注的关系“董事长”,然后将图谱中“董事长”对应的边做矩阵激活,得到W1,通过a0乘以W1得到激活向量a1这个实体,在第2步关注新的关系“投资”,将对应激活的边W2做矩阵乘法得到a2,最终得到实体答案“yy公司”。

上图展示了整个推理过程,我们的方法最显著的优势是推理过程完全可导,训练模型时仅需要对最终预测的实体施加loss,即在进行了第T步转移之后计算损失和优化,即可自动学出整个推理过程。
2. 实验结果

最后简单介绍我们三个数据集上做的实验,在针对电影领域的多跳数据集MetaQA,我们首次实现了100%准确率,比如三跳问题“xx电影的导演执导的影片中主角是谁?”,从“电影”跳到“导演”,再跳到“影片”,最后跳到“主角”,对于这样的问题,我们的模型实现了100%的准确率。
--
05
成果与资源
- Shulin Cao*, Jiaxin Shi*, et al. KQA Pro: A Dataset with Explicit Compositional Programs for Complex Question Answering over Knowledge Base. ACL 2022.
- Shulin Cao, Jiaxin Shi, et al. Program Transfer for Answering Complex Questions over Knowledge Bases. ACL 2022.
- Jiaxin Shi, Shulin Cao, et al. TransferNet: An Effective and Transparent Framework for Multi-hop Question Answering over Relation Graph. EMNLP 2021.