(十九)基于知识图谱的问答系统(KBQA)
作者简介
作者:孟繁中
原文:https://zhuanlan.zhihu.com/p/339722352
转载者:杨夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
个人笔记:https://github.com/km1994/nlp_paper_study
从本章开始介绍对话机器人的能力扩展。知识图谱是将知识连接起来形成的一个网络。由节点和边组成,节点是实体,边是两个实体的关系,节点和边都可以有属性。知识图谱除了可以查询实体的属性外,还可以很方便的从一个实体通过遍历关系的方式找到相关的实体及属性信息。例如:人脉路径查询,企业实际控制人查询等。KBQA系统就是基于知识图谱的问答系统,给定一个用户信息,在知识图谱中通过推理的方式找到相关信息并回答。
知识图谱构建
构建过程
1、用户定义实体类别及属性
用户通过控制台定义实体类别及描述,这个很关键,后续训练的时候会根据这些数据来从数据文件中抽取实体。还需要定义实体属性,属性的类型及描述,后续训练根据这些数据抽取属性值。实体之间的关系自动抽取。
2、上传数据
数据需要包含实体,属性及关系信息,否则会抽取失败。
3、启动信息抽取
相关算法
第一部分,信息抽取,涉及到的实体识别、实体链接、实体关系识别、概念抽取 等,需要用到许多自然语言处理的技术,包括但不仅限于分词、词性标注、分布式语义表达、篇章潜在主题分析、同义词构建、语义解析、依存句法、语义角色标注、语义相似度计算等等。
第二部分才到融合,目的是将不同数据源获取的知识进行融合构建数据之间的关联。包括实体对齐、属性对齐、冲突消解、规范化等,更多的是做一个数据的映射、实体的匹配,可能还会涉及的是本体的构建和融合。最后融合而成的知识库存入上一部分提到的数据库中。
知识图谱问答
使用Rasa平台连接知识图谱的回答,本质上就是获取意图和实体信息,然后到知识库里面去查找对应的内容。
第一种办法,rasa的意图识别很粗犷,比如只有kbqa_intent,那么kbqa_action里面就需要根据rasa提供的实体信息来区分如何读取知识图谱,应该是查询属性,还是查询关系等等。Rasa论坛中,有个kbqa机器人的文章,大体也是这个思路,只是他将知识图谱相关的意图分为三类,实体查询,关系查询和属性查询,本质上都是要在只是图谱里面做细致的分类。这种方式相对于第二种方法,耦合度更低。知识图谱的问答可以直接将用户的问题使用图计算的方式,从图数据库中检索。所以更灵活。
配置流程
在rasa的nlu中配置对应的意图,如kbqa_intent
在rasa的rule或story中,将对应的kbqa intent转到自定义kbqa_action
在kbqa_action调用知识图谱的推理接口
推理过程
由于在rasa的pipeline里面,实体的实体和关系比较粗,只是为了给用户的问题转到kbqa_action,因此在kbqa_action要重新对用户的问题做分析计算,找出答案。
第二种方法,rasa提供的意图很细节,已经到了知识图谱的关系或者属性的级别,kbqa_action只需要在kb中实体对其,然后找到匹配的关系或者属性即可。
配置流程
在rasa的nlu中配置对应的意图,如kbqa_intent
在rasa的rule或story中,将对应的kbqa intent转到自定义kbqa_action
在kbqa_action调用知识图谱的推理接口
推理过程
在rasa的pipeline里面,已经将实体和意图识别出来了,因此,这里的推理算法就容易很多,主要步骤如下:
1、实体连接
根据kbqa_action传过来的实体,在知识图谱中找到对应的实体。
2、属性或关系预测
根据kbqa_action传过来的意图,对实体相关的属性和关系做匹配,最终找到对应的答案。
例如,传过来的实体和意图(苹果,颜色),那么实体连接就是“苹果”,苹果包含属性有[颜色,味道,产地],那么经过相似算法后会匹配到颜色这个属性,查询知识图谱找到答案。
相关算法
实体的连接方法就是同义词表和模糊匹配算法即可。
关系和属性的匹配算法,考虑到知识图谱的训练数据和rasa nlu的数据可能有些不同,因此考虑语义相似度和同义词表2种匹配。例如word2vec的余弦距离等。