热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动问答系统流程

一个自动问答系统可分为问句处理和答案检索两大部分。在一个面向电影领域知识的问答系统中,把所有数据存放在mysql数据库中,用非结构数据库neo4j&#x

一个自动问答系统可分为问句处理和答案检索两大部分。 
在一个面向电影领域知识的问答系统中,把所有数据存放在mysql数据库中,用非结构数据库neo4j(也称图形属性数据库)构造电影图谱,在电影图谱的基础上进行答案检索。之所以不直接从mysql数据库中检索所有数据是因为关系型数据库mysql的查询效率不高。那么又为什么不直接把所有信息存放在非结构数据库neo4j上呢?反正我们是通过这个数据库进行检索的。这是因为mysql数据库增删查改操作更加方便,而neo4j的每次改动都需要重新构造图谱以覆盖。事实上这也是比较“工程性”的思想。

首先是我们的数据格式。对于每一部电影我们的信息组织如下: 
这里写图片描述
这个图也是neo4j数据库将构造出来的图谱,基于其中的结点、关系、属性,我们进行答案检索。

接着问句处理,包括:命名实体词典的构建、问题抽象、问题分类和问题还原、答案生成。

对于用户输入的一个问句,我们首先都是进行hanlp分词,由于hanlp自己提供的通用型命名实体工具包在电影领域上的分词效果可能没有想象中那么好,很多电影名诸如“我不是潘金莲”“爱乐之城”“巴黎危机”等等都无法识别出来,因此我们人工标注了很多词典,包括演员名、导演名和电影名等作为Hanlp的自定义词典,把这些词典放在hanlp词典的data/dictionary/custom/文件目录下。在项目的hanlp.properties(bin目录下)里改动root路径为hanlp词典所在文件路径,在CustomDictionaryPath中添加词典名,空格表示同个目录下。我们自定义的词性包括:电影名 nm;电影角色名 nnt等等。

而问题的抽象,说白了就是用电影名、角色名的词性nm和nnt来代替这些专有词。这样做是为了简化下一步的问句分类器的选取工作量,也缩减训练集的规模,毕竟电影名和角色名是层出不穷、五花八门的,干扰性比较强。一个问句“长城的导演是谁”会被抽象为“nm 的导演是谁”,问句“美人鱼中谁演八哥”被抽象为“nm中谁演nnt”。

问题分类,我们采用的是分类到模板的方法。比如说我们猜想关于询问一部电影的导演的相关信息可能有“nm的导演是谁”“谁是nm的导演”“nm是谁执导的”“谁执导了nm”四种问法,然后我们希望通过分类器,只要抽象化后的问句是这以上四种,就统一返回模板“nm 制作 导演列表”或者“nm 制作 导演 代表作品”(取决于更具体一点的问句信息),之所以采用模板,是为了图的检索便利,观察我们上面的那个电影信息组织方式,归一化后的模板都是严格按照图的结点/属性/关系排列的。但是这种方法的缺点是人工量比较大,所能处理的问句远达不到口语化的程度,因为问句都是我们人工尽最大可能想出来,也只是我们所能想到的。在此基础上,我们整合一张所有问句分词后的高频词语,用以构造新问句的特征矩阵,采用spark的贝叶斯分类器,实现对输入的问句归一化到最终的24个模板的目的。流程图如下: 
这里写图片描述

通过以上的步骤,对于一个问句“美人鱼中谁演八哥”-》“nm 中谁演nnt” -》归化到模板:“nm 角色列表 角色 nnt 演员 名字”,问句还原就是还原nm和nnt,最后得到“美人鱼 角色列表 角色 八哥 演员 名字”并到我们的neo4j图形数据库中检索。关于neo4j的部分,这里将不写了,详细可以看我写的其他博客。项目中需要导入neo4j/hanlp/spark相关jar包,这是我们的问句处理和最后检索答案的效果: 
这里写图片描述

相关代码可见我的github 
关于两个数据库的操作,有心得以后可以再写。


推荐阅读
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
author-avatar
有些人笨的不行
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有