知识问答泛读系列(一)—— Cognitive Graph fo
一、写在前面的话
由于时间有点赶,所以大致上只是简单地浏览了一遍,如有不对的地方,还望多多指教。整体看来,该模型的提出是针对多跳阅读理解,即若问题想要的答案无法在包含在一次检索中。
故CogQA使用两个系统来维护一张认知图谱(Cognitive Graph),系统一在文本中抽取与问题相关的实体名称并扩展节点和汇总语义向量,系统二利用图神经网络在认知图谱上进行推理计算。
二、论文模型
1. 系统一:BERT
- 输入:问题本身、从前面段落中找到的“线索(clues)”、关于某个实体x的维基百科文档
- 系统一的作用:
-
抽取文档中的“下一跳实体名称(hop span)”和“答案候选(ans span)”,这部分做法和正常的阅读理解一样,使用pointer network输出每个位置是“下一跳实体名称”或者“答案候选”开始或者结束的概率,但CogQA认为“下一跳实体名称”更多关注语意相关性,“答案候选”则需要匹配疑问词,故CogQA使用4类标签对每个位置进行标注: , , , ,另外使用第0个位置的输出被用来产生一个阈值,判断段落内是否有有意义的“下一跳实体名称”或者“答案候选”。
-
生成实体的语义向量,文中是使用BERT的third-to-last layer output at position 0作为其向量表示
2. 系统二:图卷积
系统一抽取出的“下一跳实体名称”或“答案候选”都将在认知图谱中建立一个新的点,并进行下一步迭代。系统二在认知图谱上进行推理计算,文中使用图神经网络(GNN)实现的隐式推理计算——每一步迭代,前续节点将变换过的信息传递(Graph MessagePassing)给下一跳节点,并更新目前的隐表示(Hidden Representation)。最终所有的“答案候选”点的隐表示将通过一个带有softmax函数的全连接网络来判断哪个是最终答案。
在认知图谱扩展过程中,如果某被访问节点出现新的父节点(环状结构或汇集状结构),表明此点获得新的线索信息(clues),需要重新扩展计算。最终算法流程借助前沿点(frontier nodes)队列形式实现,具体描述如下:
三、实验结果
这周比较忙,只是简单地读了下论文,大多东西都参考了[1]中的内容,个人感觉将阅读理解结合图卷积是个非常棒的想法,而且从论文结论上看,该模型大大增强了可解释性,这也是深度学习时代大家一直力图突破的点。