作者丨郭雅志

学校丨北京化工大学

研究方向丨NLP、知识图谱、对话/问答系统

本人认为学习一样东西,直接上手跑实验是最有效提升的方法之一。看了那么多的理论介绍文章,抽象的说辞,最后还是似懂非懂。所以,直接上手数据集跑实验,与理论结合,能有更深刻的了解。同时也记录下学习 KBQA 的过程,也希望对同入门的同学有些帮助。

引言

本人最近在做 KBQA 相关的的工作,有些大致的了解和想法后希望能够在实验中学习更多。

目前研究的 KBQA 暂时专注在简单知识库问答上: 即根据一个问题,抽出一条三元组,生成 Sparql 语句,进而进行知识图谱查询返回答案。

最终选择了 NLPCC2016KBQA 数据集,基线模型采用 BERT。

数据集介绍

NLPCC 全称自然语言处理与中文计算会议(The Conference on Natural Language Processing and Chinese Computing),它是由中国计算机学会(CCF)主办的 CCF 中文信息技术专业委员会年度学术会议,专注于自然语言处理及中文计算领域的学术和应用创新。

此次使用的数据集来自 NLPCC ICCPOL 2016 KBQA 任务集,其包含 14,609 个问答对的训练集和包含 9870 个问答对的测试集。并提供一个知识库,包含 6,502,738 个实体、 587,875 个属性以及 43,063,796 个三元组。

知识库文件中每行存储一个事实(fact),即三元组 ( 实体、属性、属性值) 。各文件统计如下:

知识库样例如下所示:

原数据中本只有问答对(question-answer),并无标注三元组(triple),本人所用问答对数据来自该比赛第一名的预处理:

http://github.com/huangxiangzhou/NLPCC2016KBQA

构造 Triple 的方法为从知识库中反向查找答案,根据问题过滤实体,最终筛选得到,也会存在少量噪音数据。该 Triple 之后用于构建实体识别和属性选择等任务的数据集。

问答对样例如下所示:

数据集本身存在的问题

知识库实体间的歧义

以“贝拉克·奥巴马”为例,涉及该实体的问答对如下:

在知识库中查询包含该实体的三元组,结果如下(部分):

首先,知识库中存在“贝拉克·奥巴马”的多条实体,有可能是多数据来源的融合或其他原因,从而并不能完全保证信息的对齐。我们查看“妻子”这一属性,发现有的是“米歇尔·拉沃恩·奥巴马”有的是“米歇尔·奥巴马”,而我们问答对中给出的答案是“米歇尔·奥巴马”。因此当我们的模型检索到正确三元组时:

虽然在实体和属性都映射正确的情况下,最终答案仍可能被判定为错误。

问题中的实体歧义

以“博士来拜”为例,涉及该实体的问答对如下:

在知识库中查询包含该实体的三元组,结果如下(部分):

问句中的问题是:“博士来拜是什么年代的作品?“,涉及到”年代“这个属性,而这幅作品被不同时期的很多人创作过,我们无法从当前问句下得到要询问的是哪位艺术家的创作年代。

因此该问题的涉及的实体具有歧义性,同样的,当模�