前言
这次主要是针对《Question Answering over Freebase via Attentive RNN with Similarity Matrix based CNN》作为入门。其余文章都是通过这篇baseline的引用及被引用来调研。这些论文对于KBQA的解决方案都是从向量建模入手,把问题和候选答案都映射到一个低维空间,得到它们的分布式表达(Distributed Embedding),通过训练数据对该分布式表达进行训练,使得问题向量和它对应的正确答案向量在低维空间的关联得分(通常以点乘为形式)尽量高。当模型训练完成后,则可根据候选答案的向量表达和问题表达的得分进行筛选,找出得分最高的作为最终答案。他们都使用的SimpleQA这个数据集,总量10w条,都是一些单实体一跳的简单问答。这些框架差不多都是两步走,如下图:
AR-SMCNN
Question Answering over Freebase via Attentive RNN with Similarity Matrix based CNN ACL2018
KBQA业界成熟的做法是先将问题和知识库中的三元组联合编码至统一的向量空间,然后在该向量空间内做问题和候选答案间的相似度计算。该类方法简单有效,可操作性比较强,然而忽视了很多自然语言词面的原始信息。本文的创新点在于AR-SMCNN使用 RNN 的序列建模本质来捕获语义级关联,并使用注意机制同时跟踪实体和关系。同时,文中使用基于 CNN 的相似矩阵和双向池化操作建模数据间空间相关性的强度来计算词语字面的匹配程度。
KB三元组(subject, relation, object),简写为(s, r, o)描述了一个fact,而KBQA的任务就是给定一个问题,预测(s,r),只要s,r都预测对了,就可以直接得到answer,即o。根据这些推断,KBQA问题可以分成以下两个步骤:
1、给定问题Q,找出entity mention X,然后在KB中找到所有与X一致的实体,组成实体集合E,则E中所有实体都有相同的实体名。
2、KB中所有与E中实体相连的关系组成关系集合R,先把问题Q中的X用 < e > <e> <e> 替换得到question pattern P,然后把P与R中所有关系进行比对并打分,score最高的就视为最终结果。
所以问题的关键就在于每个关系与问题的匹配,模型从字面表达、语义两个层面进行建模,输入是经替换 mention 后的问题模版(pattern)P 和候选关系 r k r^k rk 。模型左边的部分是结合了 attention 机制的 BiGRU,用于从语义层面进行建模,得到P和r的表示之后,就直接相互点乘来得到它们的相似度。右边的部分是CNN上的相似性矩阵M,在这里用的cosine来获取M,用于从字面角度进行建模,最后用一个双向max-pooling层,双向的意思就是分别从feature map的长和宽两个方向进行最大池化。最终将特征 z 1 , z 2 , z 3 , z 4 z^1 ,z^2,z^3,z^4 z1,z2,z3,z4 连接在一起并通过线性层得到最终的候选关系分数 S ( P , r k ) S(P,r^k) S(P,rk) 。
其中 p i p_i