(三)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()将最终的答案转化为用户可以理解的自然语言表示。
答案生成模块的算法流程
在这里插入图片描述
问答系统的构建方法相对简单,我们可以在很多具体的方向上进行优化,以提升系统性能。

发布了19 篇原创文章 · 获赞 1 · 访问量 343

猜你喜欢

转载自blog.csdn.net/qq_41557627/article/details/104945218