(三)KBQA系统实现-基于知识图谱的问答系统设计与实现_基于知识图谱的面向对象问答系统设计-程序员宅基地

技术标签: 笔记  

以下内容来自于《自然语言处理实践,聊天机器人技术原理与应用》
本节将以天气领域的 KBQA 系统为例,详细介绍如何设计并实现一个基于知识图谱的问答系统。
系统简介

  1. 实现目标
    系统根据用户输入的与天气相关的问题,理解用户的问题意图,从天气知识图谱数据中检索答案,或加以一定的推理生成候选答案,通过算法进行排序,将最优答案反馈给用户。
  2. 系统功能
    天气问答系统可以回答用户提出的天气相关的一系列问题,其主要功能包括:
    (1)回答天气基本信息的问题。例如气温、天气状况、风力风向等。如:上海今天天气怎么样?
    (2)回答天气相关应用场景的问题。例如带伞、洗车、防晒等。如:今天从上海出门需要带伞吗?

模块设计
问答系统的架构如图所示,其有三个核心模块:自然语言理解、查询映射和答案生成。
问答系统的架构
自然语言理解模块: 也称为问句分析模块,采用模板匹配的方法提取问句中的实体等信息词。该步骤也可以采用自然语言处理领域的技术实现,如中文分词、词性标注、命名实体识别、句法分析等。
查询映射模块: 根据自然语言理解模块提取的问句信息和用户意图将自然语言问题转换为相应的查询,进行天气数据接口调用及知识图谱调用。
答案生成模块: 候选答案消歧、排序等操作,可以采用基于排序规则的或者机器学习的方法。部分子模块的功能描述如下。
1.问句处理模块该模块的主要任务是识别出问句中的天气信息词,确定问句与天气问答相关,然后提取与天气相关的应用场景词、地域词、时间节点词等。
例 1:今天上海天气怎么样?time:今天,address:上海,weather_word:天气
例 2:明天从上海出门要带伞吗?time:明天,address:上海,weather_word:带伞
2.意图识别模块确定是问天气基本属性类还是应用场景类问题。根据天气信息词确定咨询的是关于天气的哪一类型的信息,根据是否有场景信息词确定问题属于哪一应用场景。例 1 中的问句是咨询天气基本信息问题。例 2 中的问句是咨询天气应用相关的问题:是否带伞。
3.映射问题表示
(1)用户咨询的问句不一定直接对应知识图谱中的标准表示。例如,知识图谱中存放的是气温字段,而用户咨询的是温度,因此要做词汇映射消歧。
(2)需要映射天气服务接口与知识图谱中的标准表示。解决映射问题一般采用如下方法:
● 进行字符串相似度匹配(可以采用主流的相似度匹配算法或其他算法)。
● 通过建立同义词表映射解决映射问题。这种方法中同义词表的维护和更新对映射准确度有显著影响。
● 在进行服务接口与知识图谱之间的映射时,可能需要进行必要的拆分和合并操作。
4.构建查询该模块通过对输入的问题进行处理,将问题转化为知识图谱查询语言,进而访问知识图谱,通过检索获得答案。这里我们采用 SPARQL 语言访问知识图谱,获得答案信息。
5.知识推理如果问题问的是天气基本属性或知识图谱中定义的一些应用场景,则可以从知识图谱中查找,直接返回属性值。如果询问的是未定义的天气应用场景类问题,则需要通过推理获得答案。以明天是否需要带伞为例,需要构建的规则样例是:天气状态为下雨则需要带伞,否则无须带伞。
6.候选答案消歧、排序
从知识图谱中查询到的答案可能不止一个,这种情况下需要对返回的答案进行排序,返回最优的答案。具体模型的设计需要结合具体的领域进行,大致来说,可以选择的方法分为基于规则和基于机器学习两种。
7.天气知识图谱将整个天气问答系统看作本体,该本体内部有多个用户查询意图,意图之间也有层次关系,即多级意图。
在这里插入图片描述
如图 3-19 所示,「天气查询」这个意图为一级意图,而由这个一级意图可以延伸出多个和天气相关的话题,即二级意图,例如洗车咨询、晾晒咨询、防晒咨询、带伞咨询、穿衣咨询等。每个意图又有许多与之密切关联的属性和规则库中对应的规则,例如,在二级意图「防晒咨询」中,一个天气对象名为 weather,与其相关联的属性有:weather.temperature
● 天气对象的天气状况 weather.condition
● 查询天气的时间属性 time
上述属性的值可由天气服务接口获取,多个值共同决定防晒咨询意图返回的候选答案。另外,通常还需要执行规则对意图加以约束。例如,当最高气温高于 30 度,天气状况为晴天,且用户咨询天气的时间在 10 点 ~16 点的某个时刻时,询问是否需要做好防晒工作,回答应为「是」。
定义好上述天气知识图谱的结构后,天气知识图谱需要与问答系统中的其他模块产生交互,以便生成最终的答案。天气知识图谱与其他模块交互示意图如图 3-20 所示。
在这里插入图片描述
观察图 3-20 可以发现,首先需要由自然语言理解模块进行查询信息词的提取(时间、地点、查询意图词),并将提取到的查询信息词作为输入传递给天气知识图谱。为了将用户的自然语言与天气知识图谱中的标准定义相映射,需要在此时进行本体映射的操作。接着,天气知识图谱会根据用户的意图,向天气服务接口发送一个查询请求(queryRequest),天气服务接口查询到天气知识图谱需要的天气对象信息,将查询响应(queryResponse)返回给天气知识图谱。然后,天气知识图谱将意图所需天气信息及意图对应的规则输出给自然语言生成模块,自然语言生成模块主要做答案生成工作,并对候选答案进行排序,最终将答案反馈给用户。
天气领域问答系统的具体实现
按照上面的模块设计,以结构化的方式构建天气领域问答系统。系统的核心组成模块共 3 个,即自然语言理解、查询映射和答案生成。下面以伪代码的形式展现系统的实现过程。系统的输入为用户的一次天气问句「sentence」,例如 sentence=「明天上海天气怎么样」,系统的输出为问答系统返回的结果。天气问答系统的整体算法流程如算法 3-2 所示。在这里插入图片描述天气问答系统的整体算法流程
自然语言理解模块由问句处理和意图识别两个子模块构成。这个过程整体采用串行处理方式,先进行问句处理,提取天气问句中的时间(time)、地点(address)、意图词(intent_word)等重要信息词,再根据上述信息词进行意图的分类:根据前述介绍,本例中的意图主要分为两大类,一类是天气基本信息问答,另一类是与天气相关的应用场景问答。特别地,可以通过设计天气信息词字典,以字典数据匹配的方法进行意图识别。天气字典示例如表 3-1 所示。在这里插入图片描述
自然语言理解模块的算法流程在这里插入图片描述
获取用户问句信息词和用户的意图后,可以根据用户的具体意图和相关约束条件进行数据接口数据查询和天气知识图谱信息查询,生成若干候选答案。这部分模块的输入有 4 个,分别是自然语言理解模块获得的问句信息词(infoWord)和用户意图(userIntent)、外部天气数据或天气数据接口(weatherInterface)、天气知识图谱(weatherKG)。需要注意的是,如果自然语言理解进行问句处理的结果是用户意图为 NULL,则可能有两种情况:一种是用户输入的不是查询天气的问句,另一种是用户没有给出明确的天气查询意图。在问答系统中,可以直接返回「问句意图不明确,无法查询天气」给用户。当自然语言理解部分返回的用户意图不为空时,才进入查询映射模块,判断时间和地点信息词是否为空;如果为空,直接赋值默认值。例如,可以自行设置 defaultTime,可以是「今天」或者「明天」,defaultAddress 可以是用户所在城市或用户历史查询频率最高的城市。获得自然语言理解模块的输出后,通过调用 ontologyMappingNL()操作将自然语言理解模块输出的自然语言信息词映射到本体,接着根据用户意图进行问题的分类,根据所需天气信息产生一个 queryRequest 请求,发送给天气服务接口。接着,天气服务接口会将相应的天气信息反馈给系统,系统仍然需要进行一次 ontologyMappingSer()映射操作,以便将天气信息映射到天气知识图谱的标准表示上,然后系统就可以结合意图对应的规则库里的相关规则,推导出候选答案。查询映射模块的算法流程如算法 3-4 所示。
查询映射模块的算法流程
在这里插入图片描述
查询映射模块获得候选答案后,将候选答案作为答案生成模块的输入。候选答案在该模块中要经过消歧、打分排序等操作,然后系统将获得唯一的答案。最后,系统通过 transformNL()将最终的答案转化为用户可以理解的自然语言表示。
答案生成模块的算法流程
在这里插入图片描述
问答系统的构建方法相对简单,我们可以在很多具体的方向上进行优化,以提升系统性能。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41557627/article/details/104945218

智能推荐

(前端)工作总结 2_"class=\"widget-header"-程序员宅基地

文章浏览阅读6.2k次,点赞4次,收藏16次。erp系统所涉及到的主要框架 ace admin 地址:http://ace.jeka.by/右侧隐藏按钮.net 控件 控制一行显示4个,每个label属性display : inline-block 设置成固定宽度 80,外侧div设置min-width:140px 高度随label个数自动增加。注意:设置成table样式的话 checkbox 与 label文本产生高度差 不在同一个..._"class=\"widget-header"

[Opengl]OpenGL图形编程项目实战1-4章代码_opengl项目实战-程序员宅基地

文章浏览阅读4.3k次,点赞10次,收藏50次。目录第一章 计算机图形学概论第二章 图形变换第三章 图形建模绘制二维几何体绘制奥运五环运行环境:系统:macOSBigSur11.0.1macOS Big Sur 11.0.1macOSBigSur11.0.1IDE:Xcode Version12.2(12B45b)Xcode\ Version 12.2 (12B45b)Xcode Version12.2(12B45b)采用的OpenGL第三方库:GLUTGLUTGLUT第一章 计算机图形学概论调用OpenGL提供的茶壶、_opengl项目实战

python语法元素+温度转换实例_python实现温度转换(1) 输入输出的摄氏度采用大写字母c开头,温度可以是整数或小数-程序员宅基地

文章浏览阅读833次。一、程序的格式框架Python采用严格的“缩进”(即:tab键)来表示程序的格式框架,即表明程序的包含和层次关系。二、注释是程序编写过程中,程序员在代码中加入的一行或多行星系,用来对该段、该函数的说明,提高代码的可读性。注释一般采用英文说明,也可用中文说明。注释部分会被编译器忽略,不被执行。注释的表示方法:单行注释以为#开头,多行注释采用’’’(3个单引号)开头和结尾。注释主要的3个用..._python实现温度转换(1) 输入输出的摄氏度采用大写字母c开头,温度可以是整数或小数

python中选择结构_Python中选择结构通过什么语句实现_后端开发-程序员宅基地

文章浏览阅读207次。Python代码的单行注释使用什么符号_后端开发Python代码的单行注释使用井号“#”,井号表示单行注释的开始,跟在“#”号后面直到这行结束为止的代码都将被解释器忽略,使用方法是在Python程序中将井号放在需要注释的内容之前即可。 Python中选择结构通过什么语句实现Python中的选择结构语句是 if elif else。Python用缩进代替了Java/C/C++/C#中常用的大括号{}..._9.[判断题]语句:putchar('\n');表示输出一个换行符。

python用pip安装numpy错误_科学网-安装numpy-胡涛的博文-程序员宅基地

文章浏览阅读450次。下载numpy.1.11.2.zip安装包,上传到集群,使用python2.7来安装python setup.py install出现报错:SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.安装python-devpip install python-devDEPR..._error: no matching distribution found for python-devel

计算混响时间的意义_混响是什么意思,混响时间计算公式汇总,混响器的-程序员宅基地

文章浏览阅读1.4k次。混响是什么意思,混响时间计算公式汇总,混响器的作用是什么音乐设备一波接着一波,层出不穷地出现在我们的生活当中,比如MP3、随身听、音响、功放等等,让我们有些目不暇接了,也正是他们的存在,混响是什么意思,混响时间计算公式汇总,混响器的作用是什么音乐设备一波接着一波,层出不穷地出现在我们的生活当中,比如MP3、随身听、音响、功放等等,让我们有些目不暇接了,也正是他们的存在,让我们的精神世界和娱乐生活变..._混响时间与回声消除

随便推点

关于baserecyclerviewadapterhelper同时设置emptyview和header_baserecyclerviewadapterhelper:4.0.0-beta02 显示empty-程序员宅基地

文章浏览阅读3k次。默认情况下无数据时只显示emptyview。在recyclerView.setAdapter(adapter)之前调用adapter.setHeaderAndEmpty(true);adapter.setHeaderFooterEmpty(true,true);_baserecyclerviewadapterhelper:4.0.0-beta02 显示emptyview

AppFuse搭建本地邮件服务器_fuse客户端服务器-程序员宅基地

文章浏览阅读1.3k次。邮件服务器选用apache-james-2.3.2,官网http://james.apache.org/下载解压即可;运行\james-2.3.2\bin\run.bat,出现如下界面:Text代码 D:\Program Files\james-2.3.2\bin>run.bat Using PHOENIX_HOME: D:\Program File_fuse客户端服务器

栈应用之简易计算器算法的原理及实现(C语言)_c语言计算器原理-程序员宅基地

文章浏览阅读8.5k次,点赞12次,收藏74次。1.后缀表达式a * b上面表达式称为中缀表达式,其特点是操作符位于中间位置(仅一个操作符)。a b *上面表达式称为后缀表达式,其特点是操作符位于后面位置(仅一个操作符)。计算器算法的原理是将中缀表达式转换为后缀表达式,然后进行计算。我们在下一章节对中缀转后缀进行介绍。表达式:6*(5+(2+3)*8+3)其后缀表达式为:6 5 2 3 +_c语言计算器原理

linux多路径键盘重启,linux多路径连接iScsi存储_重启自动连接-程序员宅基地

文章浏览阅读272次。如果不是开机启动,即3和5是off,需要改成开机启动#chkconfig iscsi --level 35 on#chkconfig iscsid --level 35 on4.启动iSCSI服务,查看服务状态# service iscsi start## service iscsi status5.修改配置文件# vim /etc/iscsi/iscsid.confnode.startup=au..._linux 取消 iscsi 自动重新连接

模拟ls -l命令简易代码demo_ls -l demo-程序员宅基地

文章浏览阅读773次。话不多说 上代码:/************************************************************************* > File Name: ls-l.c > Author: > Mail: > Created Time: Wed 08 Mar 2017 05:32:08 AM PST *********************_ls -l demo

云服务器使用入门_程序员怎么使用自己的云服务器-程序员宅基地

文章浏览阅读374次。云服务器使用入门学习目标背景介绍基本操作总结学习目标掌握云服务器使用的基本方法。背景介绍当前市场上对程序员的基本需求之一就是能够使用服务器进行开发。在绝大多数公司中,我们都会使用Centos系统(Linux发行版之一)进行开发,因为它是被验证的最稳定的企业级开发服务器。下面我们将学习一些简单的命令,来开启我们Centos学习之旅。基本操作假设你已经通过运维人员开通了服务器,并获得了root用户权限(在公司中,你可能得不到这么高的权限),需要在终端中输入这些命令。使用ssh命令登陆服务器:s_程序员怎么使用自己的云服务器

推荐文章

热门文章

相关标签