郭雅志作者北京化工大学学校NLP、知识图谱、对话/问答系统研究方向

基于知识图谱的问答系统入门—NLPCC2016KBQA数据集

本人认为学习一样东西,直接上手跑实验是最有效提升的方法之一。看了那么多的理论介绍文章,抽象的说辞,最后还是似懂非懂。所以,直接上手数据集跑实验,与理论结合,能有更深刻的了解。同时也记录下学习 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 之后用于构建实体识别和属性选择等任务的数据集。

问答对样例如下所示:

数据集本身存在的问题

知识库实体间的歧义

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

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

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

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

问题中的实体歧义

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

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

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

因此该问题的涉及的实体具有歧义性,同样的,当模型检索到我们认为的正确实体和正确属性后,依然有可能会被判定为错误答案。

知识库中相关实体三元组数量过多的情况下,对检索模型的效果、效率也是个挑战。

在具有 4300W 条三元组的知识库中,同一个实体会检索出大量(几十、几百条)的相关三元组,而且在存在上述两个歧义性问题的情况下,识别的效果和效率都是很大的问题。

以上的两个问题在实体识别实验部分和属性抽取部分的影响较小,但在实体链接知识库检索最终答案三元组的部分会有较大的影响。

数据集预处理及实验结果

清洗训练数据、测试数据、知识库

过滤属性,去除‘-’,‘•’,空格等噪音符号,同时把每一行 lower() 转成小写。

分别保存为:train_clean.csv, test_clean.csv, nlpcc-iccpol-2016-clean.kbqa.kb。

构造开发集

原始训练集数量为 14,609,Shuffle 后抽出 2609 作为开发集,其余作为训练集,如下。

分别保存为:train_clean.csv, dev_clean.csv, test_clean.csv。

构造实体识别的训练集、开发集、测试集

构造实体识别数据集需要根据三元组-Enitity 反向标注问题,给 Question 打标签。由于我们希望从单问题中抽取单个实体,并未采用 BIO 的标注,直接采用 0/1 标注法,即 0 表示非实体,1 表示实体。

同时需要确保其实体完整出现在问题中,对于未出现的样例,我们直接删除忽略。错误样例如下所示:

过滤后的数据集信息如下:

过滤后的数据集样例如下所示:

分别保存为:entity_train.csv, entity_dev.csv, entity_test.csv。

基于 BERT+BiLSTM+CRF 模型的实验结果如下所示,其中 accuracy 是从 9556 个问句识别出完全匹配实体的准确率

未完全匹配的实体样例如下,部分是识别错误,部分是同义词,部分是噪音问题。

构造属性抽取的训练集、开发集、测试集 

1. 构造测试集的整体属性集合,提取+去重,获得 4373 个属性 RelationList;

2. 一个 sample 由“问题+属性+Label”构成,原始数据中的属性值置为 1;

3. 从 RelationList 中随机抽取五个属性作为 Negative Samples。

数据集大小如下:

数据集 samples 如下:

分别保存为:relation_train.csv, relation_dev.csv, relation_test.csv。

之前构造的数据进行训练,在这个测试集上测试的结果。基于BERT的训练结果如下所示,其中 accuracy 是真正的准确率

模型没有识别出的测试样例如下,可以看出缺少深度语义匹配的能力。

结束语

之后也会把相关代码和预处理数据开源到我的 Github 上:https://github.com/supergyz

PaperWeekly
PaperWeekly

推荐、解读、讨论和报道人工智能前沿论文成果的学术平台。

入门KBQA问答系统知识图谱BERT
6
相关数据
基于Transformer 的双向编码器表征技术

BERT是谷歌发布的基于双向 Transformer的大规模预训练语言模型,该预训练模型能高效抽取文本信息并应用于各种NLP任务,并刷新了 11 项 NLP 任务的当前最优性能记录。BERT的全称是基于Transformer的双向编码器表征,其中“双向”表示模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息。

知识库技术

知识库是用于知识管理的一种特殊的数据库,以便于有关领域知识的采集、整理以及提取。知识库中的知识源于领域专家,它是求解问题所需领域知识的集合,包括基本事实、规则和其它有关信息。

知识图谱技术

知识图谱本质上是语义网络,是一种基于图的数据结构,由节点(Point)和边(Edge)组成。在知识图谱里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。知识图谱是关系的最有效的表示方式。通俗地讲,知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。知识图谱提供了从“关系”的角度去分析问题的能力。 知识图谱这个概念最早由Google提出,主要是用来优化现有的搜索引擎。不同于基于关键词搜索的传统搜索引擎,知识图谱可用来更好地查询复杂的关联信息,从语义层面理解用户意图,改进搜索质量。比如在Google的搜索框里输入Bill Gates的时候,搜索结果页面的右侧还会出现Bill Gates相关的信息比如出生年月,家庭情况等等。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

噪音技术

噪音是一个随机误差或观测变量的方差。在拟合数据的过程中,我们常见的公式$y=f(x)+\epsilon$中$\epsilon$即为噪音。 数据通常包含噪音,错误,例外或不确定性,或者不完整。 错误和噪音可能会混淆数据挖掘过程,从而导致错误模式的衍生。去除噪音是数据挖掘(data mining)或知识发现(Knowledge Discovery in Database,KDD)的一个重要步骤。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

推荐文章
暂无评论
暂无评论~