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

本人认为学习一样东西,直接上手跑实验是最有效提升的方法之一。
看了那么多的理论介绍文章,抽象的说辞,最后还是似懂非懂。
所以,直接上手数据集跑实验,与理论结合,能有更深刻的了解。
同时也记录下学习KBQA的过程,也希望对同入门的同学有些帮助。
目录:
1、引言
2、数据集介绍
3、数据集本身存在的问题
4、数据集预处理及实验结果
5、KBQA整体流程
6、结束语

引言

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

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

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

数据集介绍

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

此次使用的数据集来自NLPCC ICCPOL 2016 KBQA 任务集,其包含 14 609 个问答对的训练集和包含 9 870 个问答对的测试集。 并提供一个知识库,包含 6 502 738 个实体、 587 875 个属性以及 43 063 796 个 三元组。知识库文件中每行存储一个事实( fact) ,即三元组 ( 实体、属性、属性值) 。各文件统计如下:

训练集:14609
开发集:9870
知识库:43063796

知识库样例如下所示:

"希望之星"英语风采大赛|||中文名|||“希望之星”英语风采大赛
"希望之星"英语风采大赛|||主办方|||中央电视台科教节目中心
"希望之星"英语风采大赛|||别名|||"希望之星"英语风采大赛
"希望之星"英语风采大赛|||外文名|||Star of Outlook English Talent Competition
"希望之星"英语风采大赛|||开始时间|||1998
"希望之星"英语风采大赛|||比赛形式|||全国选拔
"希望之星"英语风采大赛|||节目类型|||英语比赛

原数据中本只有问答对(question-answer),并无标注三元组(triple),本人所用问答对数据来自该比赛第一名的预处理https://github.com/huangxiangzhou/NLPCC2016KBQA。构造Triple的方法为从知识库中反向查找答案,根据问题过滤实体,最终筛选得到,也会存在少量噪音数据。该Triple之后用于构建实体识别和属性选择等任务的数据集。

问答对样例如下所示:

<question id=1>	《机械设计基础》这本书的作者是谁?
<triple id=1>	机械设计基础 ||| 作者 ||| 杨可桢,程光蕴,李仲生
<answer id=1>	杨可桢,程光蕴,李仲生
==================================================
<question id=2>	《高等数学》是哪个出版社出版的?
<triple id=2>	高等数学 ||| 出版社 ||| 武汉大学出版社
<answer id=2>	武汉大学出版社
==================================================
<question id=3>	《线性代数》这本书的出版时间是什么?
<triple id=3>	线性代数 ||| 出版时间 ||| 2013-12-30
<answer id=3>	2013-12-30
==================================================

数据集本身存在的问题

  • 知识库实体间的歧义

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

<question id=9687>	谁是贝拉克·奥巴马的妻子?
<triple id=9687>	贝拉克·奥巴马 ||| 妻子 ||| 米歇尔·奥巴马
<answer id=9687>	米歇尔·奥巴马

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

贝拉克·奥巴马(美国现任总统) ||| 别名 ||| 贝拉克·奥巴马
贝拉克·奥巴马(美国现任总统) ||| 姓名 ||| 贝拉克·侯赛因·奥巴马
贝拉克·奥巴马(美国现任总统) ||| 妻子 ||| 米歇尔·奥巴马
......
贝拉克·奥巴马 ||| 主要成就 ||| 1996年伊利诺伊州参议员 美国第56届、57届总统 2009年诺贝尔和平奖获得者 时代周刊年度风云人物2008、2011 任期内清除本·拉登
贝拉克·奥巴马 ||| 代表作品 ||| 《我相信变革》《我父亲的梦想》《无畏的希望》
贝拉克·奥巴马 ||| 妻子 ||| 米歇尔·拉沃恩·奥巴马
......
贝拉克·奥巴马(美国第44任总统) ||| 血型 ||| ab
贝拉克·奥巴马(美国第44任总统) ||| 学院 ||| 西方学院
贝拉克·奥巴马(美国第44任总统) ||| 妻子 ||| 米歇尔·拉沃恩·奥巴马

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

贝拉克·奥巴马(美国第44任总统) ||| 妻子 ||| 米歇尔·拉沃恩·奥巴马

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

  • 问题中的实体歧义

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

<question id=249>	博士来拜是什么年代的作品?
<triple id=249>	博士来拜 ||| 年代 ||| 1461年
<answer id=249>	1461年

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

博士来拜(曼特尼亚画作) ||| 别名 ||| 博士来拜
博士来拜(曼特尼亚画作) ||| 中文名 ||| 博士来拜
博士来拜(曼特尼亚画作) ||| 类别 ||| 油画,壁画
博士来拜(曼特尼亚画作) ||| 年代 ||| 1461年
博士来拜(曼特尼亚画作) ||| 作者 ||| 曼特尼亚
......
博士来拜(维登画作) ||| 别名 ||| 博士来拜
博士来拜(维登画作) ||| 中文名 ||| 博士来拜
博士来拜(维登画作) ||| 类别 ||| 油画
博士来拜(维登画作) ||| 年代 ||| 1455年
博士来拜(维登画作) ||| 作者 ||| 维登
博士来拜(维登画作) ||| 属地 ||| 慕尼黑画廊藏
......
博士来拜(达·芬奇画作) ||| 别名 ||| 博士来拜
博士来拜(达·芬奇画作) ||| 中文名 ||| 博士来拜
博士来拜(达·芬奇画作) ||| 类别 ||| 油画
博士来拜(达·芬奇画作) ||| 年代 ||| 1481-1482
博士来拜(达·芬奇画作) ||| 作者 ||| 达芬奇
博士来拜(达·芬奇画作) ||| 现藏 ||| 佛罗伦萨乌菲兹美术馆
博士来拜(达·芬奇画作) ||| 规格 ||| 246 x 243 厘米

问句中的问题是:“博士来拜是什么年代的作品?“,涉及到”年代“这个属性,而这幅作品被不同时期的很多人创作过,我们无法从当前问句下得到要询问的是哪位艺术家的创作年代。因此该问题的涉及的实体具有歧义性,同样的,当模型检索到我们认为的正确实体和正确属性后,依然有可能会被判定为错误答案。

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

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

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

数据集预处理及实验结果

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

过滤属性,去除‘-’,‘•’,空格等噪音符号;

同时把每一行lower()转成小写。

上下车人次 -统计年度- 上下车人次统计年度
• 陆地 陆地
作 者 作者
i s b n isbn

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

  • 构造开发集

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

训练集:12000
开发集:2609
测试集:9870

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

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

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

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

firefo os的许可证是什么啊?	firefox os
我想知道明基tx501投影机的特性是什么啊?	明基 tx501
我想知道凤仪亭被叫做什么啊?	凤仪亭址
1984年萨拉冬季奥运会的参赛人员是多少啊?	1984年萨拉热窝冬季奥运会
飚王诱惑 sfd042(2gb)的宽度是多少毫米?	飚王诱惑 sfd042(2gb)
大安大王庙的古建筑群的相关记载出自哪里?	大安大王庙古建筑群
“佛吉尼亚”潜艇的控制装置是什么?	“弗吉尼亚”潜艇

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

训练集:11883
开发集:2571
测试集:9556

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

长 1
城 1
x 1
1 1
0 1
的 0
输 0
入 0
接 0
口 0
是 0
什 0
么 0
? 0

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

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

accuracy 0.96

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

【识别错误】动物地鸠属是属于什么目呀? 地鸠属 动物地鸠
【同义词】《鲁迅全集》这本书是什么时候出版的呀? 《鲁迅全集》 鲁迅全集
【同义词】我想知道永安镇机场叫什么名字? 永安镇 永安镇机场
【同义词】海尔kfrd-35gw/03me-s4空调是什么类型的? 海尔kfrd-35gw/03me-s4 海尔kfrd-35gw/03me-s4空调
【问题噪音】你知道辛夷花粥管治疗什么吗? 辛夷花粥 辛夷花粥管
  • 构造属性抽取的训练集、开发集、测试集

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

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

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

数据集大小如下:

训练集:12000*(1+5)
开发集:2609*(1+5)
测试集:9870*(1+5)

数据集samples如下:

你知道计算机应用基础这本书的作者是谁吗?	作者	1
你知道计算机应用基础这本书的作者是谁吗?	儿女	0
你知道计算机应用基础这本书的作者是谁吗?	应用大小	0
你知道计算机应用基础这本书的作者是谁吗?	节日意义	0
你知道计算机应用基础这本书的作者是谁吗?	最低气压	0
你知道计算机应用基础这本书的作者是谁吗?	时长	0

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

基于BERT的训练结果如下所示

accuracy:0.95

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

0.01970141	0.9802986	304不锈钢管可以用于什么范围啊?	应用范围	1
0.9996922	0.00030779938	无尘玻璃打砂机是说什么内容的啊?	正文	1
0.99984515	0.00015485194	猩猩还有什么别的名字吗?	品种	1
0.9963929	0.003607082	河床竞技俱乐部组织了什么比赛啊?	联赛	1
0.99984705	0.00015298015	榉是什么类型的?	亚纲	1
0.9998454	0.00015459256	你知道香港有什么明星吗?	地域名人	1
0.99984837	0.0001516119	复兴歌是在什么时候流行的?	采用	1
0.9983584	0.0016415163	台北联营公车218路线是在什么地方开始的?	路线资讯	1

KBQA整体流程

完成实体识别模型和属性抽取模型后还需检索模型进行知识库检索,才算完整的KBQA。

  • KBQA流程:
1、输入问句
2、通过实体识别模型检测问句中的实体,得到mention
3、通过检索模型在知识库中检索mention,得到候选集(K个候选实体的所有三元组)
4、通过属性抽取模型在候选集中挑选最合适的属性,得到唯一三元组
5、输出答案
  • 知识库建立索引

由于知识库数据量庞大,而且需要多次检索知识库,因此需要建立索引提高效率。

而同一实体的三元组分布在知识库中不同位置,因此需要对每个实体记录多个始末片段。

行号     三元组
22591789 联想s320 ||| 别名 ||| 联想s320
22591790 联想s320 ||| 中文名 ||| 联想s320
22591791 联想s320 ||| 上市时间 ||| 2008年
22591792 联想s320 ||| 网络频率 ||| gsm/gprs;900/1800mhz
22591793 联想s320 ||| 重量 ||| 100 克
22591794 联想s320 ||| wap上网 ||| 支持飞笺

41117728 联想s320 ||| 别名 ||| 联想s320
41117729 联想s320 ||| 产品类型 ||| 手机
41117730 联想s320 ||| 3g网络 ||| gsm
41117731 联想s320 ||| 电池容量 ||| 820mah
41117732 联想s320 ||| 存储卡 ||| 支持最大容量为4gb mirco sd存…
41117733 联想s320 ||| 暂无 ||| 暂无

最终通过遍历知识库,记录每个实体的名称、开始位置、结束位置,记录结果如下:

联想s320 22591789  22591794  41117728  41117733 
英汉互译每日通	29607701	29607708
无水港	2092039	2092043
工程材料与成型技术	14055336	14055340
报信	26475602	26475606
《太空嬉哈族》	39914687	39914693

总数为650 5059,保存为index.csv

  • 识别测试集得到mentions

通过训练好的实体识别模型,识别测试集中的问题,输出所有mentions,保存为testset_predict_answer.txt。数量为9870,如下所示

计算机应用基础
计算机应用基础
高等数学
戴维斯
高等数学
高等院校素质教育“十二五”规划教材
mc
  • 检索知识库

将上述9870个mention,进行知识库检索,寻找符合以下规则的三元组:

(此方法待改进)
if mention与索引中的实体完全匹配
    选取该实体
elif mention in entity
    选取该实体
else
    选取字符串编辑距离最小的实体 
return 实体相关的所有三元组
  • 属性选择+输出答案

此时,每个测试集中的question都有检索得到的候选三元组

把question+relation放入之前训练好的属性抽取模型

对每个三元组打分,排序,输出topK个答案

整个KBQA完成!

结束语

以上内容为KBQA的整体流程,从这个过程中加深了对KBQA的理解和认识。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
基于知识图谱问答系统KBQA)是一种利用知识图谱来回答用户提出的自然语言问题的技术。知识图谱是一种用于表达和存储实体、属性和实体之间关系的数据结构,能够将海量的结构化和半结构化数据进行组织和展示。KBQA系统通过将用户的问题解析为知识图谱中的查询操作,从而能够高效地从知识图谱中获取和推理出正确的答案。 在KBQA系统的实现过程中,首先需要将海量的结构化和半结构化数据转化为知识图谱的表示形式。这可以通过自动抽取和构建知识库来实现,也可以借助人工标注和知识工程师的专业知识来构建。知识图谱的构建通常包括实体识别、属性提取和关系抽取等步骤。 当用户提出一个问题时,KBQA系统会首先对问题进行语义解析,提取出问题的关键词和实体信息。然后,系统根据问题的语义和知识图谱的结构,利用查询语言(如SPARQL)将问题转化为对知识图谱的查询操作。通过在知识图谱中查找符合查询条件的实体和关系,系统能够找到与用户问题相关的知识,并生成相应的答案。 KBQA系统的优势在于能够从结构化的知识图谱中获取精确和全面的答案,同时还能够支持复杂的查询操作和多跳推理。它可以广泛应用于各个领域,如智能搜索、智能助理和智能客服等。然而,知识图谱的构建和维护需要耗费大量的人力和时间,并且对领域知识的要求较高,这是KBQA系统应用中的挑战之一。未来,随着知识图谱技术的不断发展和完善,KBQA系统有望在实际应用中的效果得到进一步提升。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值