[TOC]
- 调研时间:2019.06.05~2019.06.19
- 参赛时间:2019.06.28~2019.07.25
中文知识图谱问答(从0到0.6+)
- Chinese Knowledge Base Question Answering(CKBQA)
一、任务
1、任务定义
什么是知识库?
一条条知识,而把大量的知识汇聚起来就成了知识库。
1
2
3ex1:奥巴马出生在火奴鲁鲁
ex2:姚明是中国人
ex3:谢霆锋的爸爸是谢贤知识来源:维基百科、百度百科等百科全书
- 特点:非结构化的自然语言、不适合计算机去处理
三元组(triple)(为了方便计算机的处理和理解,需要更加形式化、简洁化的方式去表示知识)
1
2
3
4- ex1:奥巴马出生在火奴鲁鲁 --> (奥巴马,出生地,火奴鲁鲁)
- (主语,谓语,宾语)subject predicate object
- (实体,属性,属性值)entity attribute value
- (头实体,关系,尾实体)head_entity relation tail_entity进一步,把实体看作是结点,把关系看作是一条边,包含大量三元组的知识库就构成了一个庞大的知识图谱
什么是知识库问答?
- 基于知识库问答(knowledge base question answering, KBQA)
- 即,给定自然语言问题,通过对问题进行语义理解和解析,进而利用知识库进行查询、推理得出答案。
- 按应用领域划分:开放领域(百科知识问答等)和特定领域(金融、医疗、宗教、客服等)
- 评价指标:召回率、精确率、F1值、MRR(平均倒数排序)
- 两大关键技术
- 【实体链指】:将问句中的实体名字链接到知识库中特定的实体上,涉及到实体识别和实体消歧。
- 【关系抽取】:将问句中的实体关系抽取出来,涉及到词性标注、词法句法分析、关系分类等。
- 举个栗子:姚明的老婆是什么星座?
- (姚明,妻子,叶莉)—>(叶莉,星座,天蝎)
CCKS2019CKBQA定义
- 基于中文知识图谱的自然语言问答,简称 CKBQA
(Chinese Knowledge Base Question Answering) - 即输入一句中文问题,问答系统从给定知识库中选择若干实体或属性值作为该问题的答案。
- 问题均为客观事实型,不包含主观因素。
- 理解并回答问题的过程中可能需要进行实体识别、关系抽取、语义解析等子任务。
- 这些子任务的训练可以使用额外的资源,但是最终的答案必须来自给定的知识库。
2、相关评测
简单问题:NLPCC 2015-2018
(对应单元组查询)
- NLPCC2015 评测:Open Domain Question Answering
- NLPCC2016 评测:Open Domain Chinese Question Answering
- NLPCC2017 评测:Open Domain Question Answering
- NLPCC2018 评测:Open Domain Question Answering
复杂问题:CCKS 2018-2019
(对应多元组查询)
- CCKS2018 评测 任务四:开放领域的中文问答任务,CCKS2018 COQA 比赛平台
- CCKS2019 评测 任务六:中文知识图谱问答,CCKS2019 CKBQA 比赛平台,PKU BASE的在线查询终端:gStore,SPARQL语法规则
3、相关数据
训练集
NLPCC 2016(14609条)2016、2018测试集答案
1 | <question id=1> 《机械设计基础》这本书的作者是谁? |
CCKS 2019 (2298条)
1 | q1:莫妮卡·贝鲁奇的代表作? |
知识库
NLPCC 2016 知识库网盘
三元组(43063796条)
1
2
3
4
5空气干燥 ||| 别名 ||| 空气干燥
空气干燥 ||| 中文名 ||| 空气干燥
空气干燥 ||| 外文名 ||| air drying
空气干燥 ||| 形式 ||| 两个
空气干燥 ||| 作用 ||| 将空气中的水份去除提及-实体(7623034条)
1
2
3
4
5空气 干燥 ||| 空气干燥
air drying ||| 空气干燥 氧化结膜干燥
罗育德 ||| 罗育德
鳞 ||| 鳞 公子鳞
squama ||| 鳞 鳞片
CCKS 2019 知识库网盘,密码:hcu8 开放领域问答的数据+金融领域问答数据 (1/4)
三元组(41009142条):由<>括起的为实体,由””括起的为文本值
1
2
3
4
5<美国奥可斯(香港)国际控股集团> <公司名称> "美国奥可斯(香港)国际控股集团有限公司" .
<美国奥可斯(香港)国际控股集团> <成立时间> "2007-06-28" .
<美国奥可斯(香港)国际控股集团> <经营范围> <培训> .
<美国奥可斯(香港)国际控股集团> <经营范围> <影视> .
<美国奥可斯(香港)国际控股集团> <公司口号> "品牌立业,质量最好" .提及 + 实体 + order(13930118条):可以用来辅助选手进行实体链接
1
2
3
4
5献陵 献陵_(唐高祖李渊陵墓) 1
献陵 明献陵 2
献陵 献陵_(朝鲜太宗献陵) 3
佛罗伦萨 佛罗伦萨_(意大利托斯卡纳大区首府) 1
佛罗伦萨 佛罗伦萨足球俱乐部 2实体 + 类型 + 值(25182628条):可以用于检查问题类型和答案类型
1
2
3
4
5<美国奥可斯(香港)国际控股集团> <类型> <文学作品> .
<美国奥可斯(香港)国际控股集团> <类型> <文化> .
<寻美中国> <类型> <品牌> .
<青春是我和你一杯酒的深> <类型> <文学作品> .
<青春是我和你一杯酒的深> <类型> <网络小说> .
4、相关工作
- NLPCC2015 第1名评测论文 [1]
- NLPCC2016 第1-4名评测论文 [2-5]
- NLPCC2017 第1-2名评测论文 + 会议论文 [6-8]
- NLPCC2018 第1名评测论文 [9]
- CCKS2018 第1-3名评测论文 [10-12]
- CCKS2019 第1-4名评测论文 [13-16]
二、方法
1、创建数据库
- 图数据库:NEO4J、JENA、gStore(Linux)
- 关系数据库:MySQL(ours)、PostgreSQL
- 注意:
1
2
3
4
5
6
7
8统计字段长度
检查数据正误
设置主键:id 自增
创建索引
设置编码:utf8mb4
设置引擎:Innodb
建立访客用户
Python - pymysql
2、创建训练数据
分类单多跳问句(二分类)
单跳:
SPARQL 只出现一个三元组
1
2
3q1:莫妮卡·贝鲁奇的代表作?
select ?x where { <莫妮卡·贝鲁奇> <代表作品> ?x. }
<西西里的美丽传说>双跳:
SPARQL 出现两个以上三元组
1
2
3q616:红豆的演唱者出生在?
select ?y where { ?x <代表作品> <红豆_(王菲演唱歌曲)>. ?x <出生地> ?y. }
<东城区_(北京市东城区)>
分类链式问句(二分类)
- 链式:
SPARQL 多个三元组呈递进关系,x->y->z,非交集关系
1
2
3
4
5
6
7q894:纳兰性德的父亲担任过什么官职?
select ?y where { <纳兰性德> <父亲> ?x. ?x <主要职位> ?y. }
"武英殿大学士" "太子太傅"
q554:宗馥莉任董事长的公司的公司口号是?
select ?y where { ?x <董事长> <宗馥莉>. ?x <公司口号> ?y. }
"win happy health,娃哈哈就在你身边"
主谓宾分类(三分类)
问句的答案对应三元组里面的主语,spo=0
1
2
3q70:《悼李夫人赋》是谁的作品?
select ?x where { ?x <代表作品> <悼李夫人赋>. }
<汉武帝_(汉朝皇帝)>问句的答案对应三元组里面的谓语,spo=1
1
2
3q506:林徽因和梁思成是什么关系?
select ?x where { <林徽因_(中国建筑师、诗人、作家)> ?x <梁思成>. }
<丈夫>问句的答案对应三元组里面的宾语,spo=2
1
2
3q458:天津大学的现任校长是谁?
select ?x where { <天津大学> <现任校长> ?x . }
<李家俊_(天津市委委员,天津大学校长)>
实体提及识别(NER序列标注)
- 根据训练语料的SPARQL语句,查找实体的提及,反向构建训练数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18q1408:电影《怦然心动》的主要演员?
select ?x where { <怦然心动_(美国2010年罗伯·莱纳执导电影)> <主演> ?x. }
<艾丹·奎因> <玛德琳·卡罗尔> <卡兰·麦克奥利菲> <约翰·玛哈尼> <摩根·莉莉>
电 O
影 O
《 O
怦 B-LOC
然 I-LOC
心 I-LOC
动 I-LOC
》 O
的 O
主 O
要 O
演 O
员 O
? O
关系抽取(语义相似度计算,二分类)
- 查找实体的关系中与问句最相近的关系
- 一个正例,再从对应实体的关系中随机抽取5个作为负例
1
2
3
4
5
6
7
8
9
10q267:里奥·梅西的生日是什么时候?
select ?x where { <里奥·梅西_(阿根廷足球运动员)> <出生日期> ?x . }
"1987-06-24"
里奥·梅西的生日是什么时候? 出生日期 1
里奥·梅西的生日是什么时候? 妻子 0
里奥·梅西的生日是什么时候? 所属运动队 0
里奥·梅西的生日是什么时候? 中文名 0
里奥·梅西的生日是什么时候? 类型 0
里奥·梅西的生日是什么时候? 外文名 0
实体链接(二分类)
- 查找问句中实体提及对应的唯一实体
- 6个特征:order、提及初始分、问题和提及字符匹配度、问题和实体语义相似度、问题和实体字符匹配度、问题和实体关系的最大相似度 —> 标签
1
2
3
4
5
6
7q2035:张三丰创立了什么门派?
select ?x where { <张三丰_(武侠小说人物)> <荣誉> ?x . }
"创立武当派"
张三丰创立了什么门派? <张三丰_(南宋至明初道士)> 1.0 1.0 0.43 0.15978466 0.6 0.99257445 0
张三丰创立了什么门派? <张三丰_(武侠小说人物)> 0.9 1.0 0.43 0.97132427 0.58 0.99660385 1
张三丰创立了什么门派? <张三丰_(桌游《英雄杀》中的英雄之一)> 0.8 1.0 0.43 0.920861 0.38 0.0007164952 0
纠正错误标注
- 由于时间问题只纠正了一部分
- 实体中含多余空格:q10、q149、q490、q559、q723、q1191
- 多个三元组未以’.’分割:q65
- 实体标注错误:q124、q300、q422、q432、q449、q1699
- 关系标注错误:q381
1
2
3
4
5
6
7
8
9
10
11q10:北京奥运会的口号是什么?
select ?x where { <2008年北京奥运会 > <口号> ?x. }
"同一个世界,同一个梦想"
修正:
select ?x where { <2008年北京奥运会> <口号> ?x. }
q124:吉野家创建于什么时候?
select ?x where { <吉野家> <创始时间> ?x. }
"1899"
修正:
select ?x where { <吉野家_(日本牛肉饭店)> <创始时间> ?x. }
3、训练模型
分类单多跳问句(二分类:BERT 做单句子分类)acc=89.13%
1
2
3
4
5
6
7
8
9
10
11
12# acc低的原因:以下问题实则单跳可以解决
q542:习大大是哪里毕业的?
select ?y where { ?x <别名> "习大大" . ?x <毕业院校> ?y . }
"清华大学"
q1560:小马哥有哪些主要成就?
select ?y where { ?x <别名>"小马哥". ?x <主要成就> ?y. }
"改变中国SNS现状" "1998年创立 腾讯公司" "腾讯慈善基金会"
q1574:习大大什么时候入党?
select ?y where { ?x <别名> "习大大". ?x <入党时间> ?y . }
"1974"分类链式问句(二分类:BERT 做单句子分类)acc=96.15%
- 主谓宾分类(三分类:BERT 做单句子分类)acc=91.63%
实体提及识别(NER序列标注:BERT+BiLSTM+CRF 的 NER 模型)
1
2
3
4
5评价指标:召回率 Recall
只使用单跳数据,初始结果 87.28%
改进:
去除提及的书名号和双引号,结果 89.47%,但只能识别0~1个实体提及
加入单多跳所有数据,模型测试结果 88.24%,可以识别出多个提及关系抽取(语义相似度计算,二分类:BERT 做句子对分类)
1
2
3
4
5单跳数据初始结果83.7%,mask掉实体提及81.06%,
最终模型是混合 nlpcc2016 和 ccks2019 的所有数据
改进:
nlpcc2016数据负例是从关系全集中抽取的,
改成ccks2019从对应实体的所有候选关系中抽取实体链接(二分类:xgboost 做分类)
1
2
3
4
5
6
7
8
9
10
11正例结果acc:89.15%,按概率分布评价acc:97.34%
改进1:
提及得分:order、1/order、提及初始分、实体长度、实体长度占问题长度比
实体得分:问题和实体的语义相似度、问题和实体后缀的语义相似度、问题和实体后缀的杰卡德系数
关系得分:问题和实体关系的最大相似度,问题和实体关系的最大杰卡德系数
正例结果acc:98.90%,按概率分布评价acc:99.13%,初赛最后一天实现,复赛未能派上用场,很遗憾。
改进2:
查找所有候选实体,提及左右进行扩展或删减,外加百度百科搜索
实体链接后还是没找到实体,采用暴力搜索,逐个字符匹配
若识别出多个提及,则实体链接也对应多个,但链式问题搜索答案时只使用得分最高的
4、预测数据
- 实体提及识别要考虑问句中出现的空格问题
1
2
3{"id": "q1", "question": "\"成败一知己,生死两妇人\"所说的人物有什么重大成就?", "hop": "1", "spo": "2", "chain": "1", "mention_list": ["成败一知己,生死两妇人"]}
{"id": "q2", "question": "葬于茂陵的皇帝在位于哪段时间?", "hop": "1", "spo": "0", "chain": "1", "mention_list": ["茂陵", "皇帝"]}
{"id": "q3", "question": "\"光武中兴\"说的是哪位皇帝?", "hop": "0", "spo": "0", "chain": "0", "mention_list": ["光武中兴"]}
5、搜索答案
注释
1
2
3
4
5
6hop=0 表示是单跳问题(如:姚明的女儿是谁?),hop=1 表示是多跳问题(单跳问题仅需一个三元组,多跳需两个以上)
spo=0 表示已知谓宾求主语,spo=1 表示已知主宾求谓语,spo=2表示已知主谓求宾语(如:姚明的女儿是谁?)
chain=0 表示非链式问题,chain= 表示链式问题(如:姚明的女儿的年龄是多少?)
ner 表示用NER模型识别出问句中的实体提及(如:姚明的女儿是谁? 提及:姚明)
Entity Linking 表示实体链指,找出提及对应的实体(如:姚明的女儿是谁? 实体:<姚明_(中职联公司董事长兼总经理)>)
Relation Extraction 表示关系抽取,找出问题中关系(如:姚明的女儿是谁? 关系:<女儿>)详细介绍
1
2
3
4
5step1:先对问题进行分类(判断是否单多跳、是否主谓宾、是否链式)和提及识别;
step2:根据识别到的提及,进行左右扩展或删减,搜索所有的候选实体,根据一组特征对候选实体打分排序(实体链接模型),取top1;
step3:根据spo值,搜索实体对应的所有关系,与当前问题计算语义相似度(关系抽取模型),取top1,搜索数据库得到统一单跳问题的求解;
step4:如果是链式且是多跳问题,将step3得到的答案作为实体再进行一遍step3,得到多跳链式问题的求解;
step5:如果是非链式且识别到多个实体,对每个实体搜索数据库,查询对应的所有候选三元组,然后求交集,得到多跳多实体问题的求解。
三、总结
- 参加完CCKS2019评测会议后再补充 。。。。。。
- 本方法暂时没有开源的打算… …
四、参考文献
- [1] NLPCC2015 1st Ye Z, Jia Z, Yang Y, et al. Research on open domain question answering system[M]//Natural Language Processing and Chinese Computing. Springer, Cham, 2015: 527-540.
- [2] NLPCC2016 1st Lai Y, Lin Y, Chen J, et al. Open domain question answering system based on knowledge base[M]//Natural Language Understanding and Intelligent Applications. Springer, Cham, 2016: 722-733.
- [3] NLPCC2016 2nd Yang F, Gan L, Li A, et al. Combining deep learning with information retrieval for question answering[M]//Natural Language Understanding and Intelligent Applications. Springer, Cham, 2016: 917-925.
- [4] NLPCC2016 3rd Xie Z, Zeng Z, Zhou G, et al. Knowledge base question answering based on deep learning models[M]//Natural Language Understanding and Intelligent Applications. Springer, Cham, 2016: 300-311.
- [5] NLPCC2016 4th Wang L, Zhang Y, Liu T. A deep learning approach for question answering over knowledge base[M]//Natural Language Understanding and Intelligent Applications. Springer, Cham, 2016: 885-892.
- [6] NLPCC2017 1st Lai Y, Jia Y, Lin Y, et al. A Chinese question answering system for single-relation factoid questions[C]//National CCF Conference on Natural Language Processing and Chinese Computing. Springer, Cham, 2017: 124-135.
- [7] NLPCC2017 2nd Zhang H, Zhu M, Wang H. A Retrieval-Based Matching Approach to Open Domain Knowledge-Based Question Answering[C]//National CCF Conference on Natural Language Processing and Chinese Computing. Springer, Cham, 2017: 701-711.
- [8] NLPCC2017 会议 周博通, 孙承杰, 林磊, et al. 基于LSTM的大规模知识库自动问答[J]. 北京大学学报:自然科学版, 2018.
- [9] NLPCC2018 1st Ni H, Lin L, Xu G. A Relateness-Based Ranking Method for Knowledge-Based Question Answering[C]//CCF International Conference on Natural Language Processing and Chinese Computing. Springer, Cham, 2018: 393-400.
- [10] CCKS2018 1st A QA Search Algorithm based on the Fusion Integration of Text Similarity and Graph Computation
- [11] CCKS2018 2nd A Joint Model of Entity Linking and Predicate Recognition for Knowledge Base Question Answering
- [12] CCKS2018 3rd Semantic Parsing for Multiple-relation Chinese Question Answering
- [13] CCKS2019 1st 混合语义相似度的中文知识图谱问答系统
- [14] CCKS2019 2nd Combining Neural Network Models with Rules for Chinese Knowledge Base Question Answering
- [15] CCKS2019 3rd Multi-Module System for Open Domain Chinese Question Answering over Knowledge Base
- [16] CCKS2019 4th DUTIR中文开放域知识库问答评测报告
五、相关博客
- 基于知识图谱的问答系统入门之—NLPCC2016KBQA数据集 【代码未公开】发布于 2019-01-02,编辑于 2019-05-29
- 问答QA(二)基于BERT的知识库问答实战,Github:bert-kbqa-NLPCC2017 2019年03月09日 00:12:35
- 基于BERT的KBQA探索-知乎,基于BERT的KBQA探索-CSDN,Github:KBQA-BERT 代码有点像上面的 发布于 2019-04-19,编辑于 2019-07-03
- NLPCC2016 KBQA 1st 方案
- CCKS2018 CKBQA 1st 方案
- 自由讨论 | KBQA从入门到放弃—入门篇
- KBQA从入门到放弃 - Part 2 | 每周话题精选 #09
- KBQA 知识库问答领域研究综述(未完待续。。)
- 基于知识库的问答:seq2seq模型实践
- KBQA 个人总结
- 揭开知识库问答KB-QA的面纱0·导读篇
- 知识图谱问答总结
- 肖仰华 | 基于知识图谱的问答系统
- 基于知识图谱的问答系统(KBQA)
- 各类QA问答系统的总结与技术实现(持续更新)
- 知识图谱入门 (九)知识问答
- KBQA: 基于开放域知识库上的QA系统 | 每周一起读