公众号 系统之神与我同在

前几个月参加了今年ccks(中国知识图谱与计算语义大会)任务四基于知识图谱问答的比赛:

a榜第三 b榜出差去了 等回来的时候结束了 在这里写个分享

知识图谱典型问题:

问题:

武汉大学出了哪些科学家

查询语句:

select ?x where {?x<职业><科学家_(从事科学研究的人群)>.?x<毕业院校><武汉大学>.}

答案:

"<郭传杰> <张贻明> <刘西尧> <石正丽> <王小村>"

该问题的特点是两个关系的结果求交集

问题:

凯文·杜兰特得过哪些奖?

查询语句:

select ?x where { <凯文·杜兰特> <主要奖项> ?x . }

答案:

"7次全明星(2010-2016)” “5次NBA最佳阵容一阵(2010-2014)” “NBA得分王(2010-2012;2014)” “NBA全明星赛MVP(2012)” "NBA常规赛MVP(2014)"

简单的一跳问题

问题:

获得性免疫缺陷综合征涉及哪些症状?

查询语句:

select ?x where {<获得性免疫缺陷综合征><涉及症状>?x.}

答案:

"<淋巴结肿大> <HIV感染> <脾肿大> <心力衰竭> <肾源性水肿> <抑郁> <心源性呼吸困难> <低蛋白血症> <不明原因发热> <免疫缺陷> <高凝状态> <右下腹痛伴呕吐> "

医学问题都比较长,需要通过ES来搜索实体名称用于解决一般的实体识别方案的不足

问题:

詹妮弗·安妮斯顿出演了一部1994年上映的美国情景剧,这部美剧共有多少集?

查询语句:

select ?y where {?x<主演><詹妮弗·安妮斯顿>.?x<上映时间>""1994"".?x<集数>?y.}

答案:

"236"

该问题较为复杂需要用句法分析和问题类型判定来协助查询生成

实现原理

例如问题是:莫妮卡·贝鲁奇的代表作?

第一步:我们将该问题进行命名实体识别(预处理模块:实体识别),得到名为“莫妮卡·贝鲁奇”的实体提及,将该实体提及输入别名词典和ES中,得到备选实体名称;

第二步:将问题输入我们的问题结构分类模型(预处理模块:问题分类),得到该问题属于一跳问实体的问题类型,得知该问题有一个实体槽位和一个关系槽位需要填充(预处理模块:槽位预测);

第三步:将第一步中得到的实体通过语义特征和人工特征进行实体消歧,得到真正的实体为<莫妮卡·贝鲁奇>(实体分析模块:实体链接);

第四步:根据第二步中预测的槽位,将实体填充到该查询语句中得到select ?x where {<莫妮卡·贝鲁奇><>?x.}(查询生成模块:槽位填充);

第五步:搜索<莫妮卡·贝鲁奇>的所有关系名称,和原文进行语义匹配并排序,得到关系<代表作品>(查询生成模块:路径排序);

第六步:将代表作品填入第二步所预测的关系槽位中,得到查询语句select ?x where {<莫妮卡·贝鲁奇><代表作品>?x.},并转化为图数据库查询语言(查询生成模块:槽位填充);

第七步:将第六步中得到的查询语言在图数据库中查询并得到答案,并进行答案校验(答案验证模块:验证答案的实体类型)。

问题解析模块:

问题分类:

一个问题所属的类型有两个判断依据:1、链式和夹式 2、问题的跳数 3、每一跳问实体还是问关系,例如:

a)一跳问实体类型:

莫妮卡·贝鲁奇的代表作? select ?x where {<莫妮卡·贝鲁奇><代表作品>?x.} select ?x where {<><>?x.}

其括号内结构为<主><谓><宾>,得到主语、谓语,问宾语

b)二跳链式问实体类型:

发明显微镜的人是什么职业? select ?y where {<显微镜><发明人>?x.?x<职业>?y.} select ?y where {<><>?x.?x<>?y.}

其括号内结构为<主1><谓1><宾1><主2><谓2><宾2>,得到主语1、谓语1,匹配中间节点<?x>,再根据中间点的”职业“得到链式答案

c)二跳夹式问实体类型:

我们会在哪个民俗节日里猜灯谜? select ?x where {?x<类别><民俗>.?x<节日活动><猜灯谜>.} select ?x where {?x<><>.?x<><>.}

其括号内结构为<主1><谓1><宾1><主2><谓2><宾2>,得到主语1、谓语1、主语2、谓语2,最终得到宾语1、宾语2。将二者取交集,得到夹式答案

槽位预测:

根据问题的分类,就能够预测出该问题有几个语义槽位需要填充

实体链接主要使用了语义特征和图特征:

这里推荐matchzoo用于语义特征建模:

路径排序主要使用的是一个语义比对方法:

此方法也用在了项目中:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐