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