# QAonMilitaryKG  QAonMilitaryKG,QaSystem based on military knowledge graph that stores in mongodb which is different from the previous one, 基于mongodb存储的军事领域知识图谱问答项目,包括飞行器、太空装备等8大类,100余小类,共计5800项的军事武器知识库,该项目不使用图数据库进行存储,通过jieba进行问句解析,问句实体项识别,基于查询模板完成多类问题的查询,主要是提供一种工业界的问答思想demo。 # 项目背景  基于知识图谱或知识库的问答KBQA是目前垂直领域或百科领域问答中使用较多的一种问答方式,本质上是在做结构化数据的匹配查询任务。笔者之前利用neo4g图数据库上基于医疗领域结构化知识库,阐述了基于图数据库的医疗知识图谱构建与问答方案,并实现了一个简单的demo。项目见:(https://github.com/liuhuanyong/QASystemOnMedicalKG)  技术选型是实现自动问答系统的一个重要环节,这项工作与数据样式关系尤为密切。经验上来说,对于实体类型较多以及实体关系种类较多的知识库,使用图数据进行知识存储是个较好的选择。而对应实体类型较少,实体关系较少,实体属性较多以及带有时序性的数据时,选用文档型数据库mongodb是个不错的选择。  军事领域是敏感度、机密系数较高的一个领域,其数据价值很高,获取相关军事数据并提供一个便捷的人机交互方式具有重要的战略意义。军事中的装备信息,军事基地信息,军事作战部队之间的关联信息,以图谱的形式组织,能够在作战策略推荐,军事人员培训上起到重要作用。目前,公开的军事资料不多,收录较全的有环球军事网,其中的人物,战役,兵器库,术语库等为军事提供了一个很好的信息平台。其中,武器库是其中结构化程度较高的一项数据,其中包括了飞行器、舰艇等8大类武器,轰炸机等100余小类,共计5800项武器结构化数据。这为结构化知识问答提供了一个的数据,因此,本项目选择该数据集作为知识库,使用mongodb进行自动问答的实验。  本项目有2个重要目标:  1,采集并解析军事武器库网站,进行字段信息的标准化,形成一定规范、规模的军事武器装备结构化知识库。  2,实现基于mongodb的军事领域知识库的自动问答。 # 项目框架 ![image](https://github.com/liuhuanyong/QAonMilitaryKG/blob/master/image/schema.png) # 项目构成 # 1, 数据集类型及统计信息 | 项目 | 数量 | 示例 | | :--- | :---: | :---: | | 大类 | 8 | 飞行器,太空装备 | | 小类 | 148 | 护卫舰艇, 航天基地,卫星| | 国家 | 88 | 中国,美国,苏联,日本| | 武器类实体 | 5800 | 神舟五号,神舟7号,AK-47,歼-15 | | 实体属性 | 184 | 最大飞行速度,成员,长度,首次发射轨道,口径 | | 实体关系 | 1 | <轰炸机,SUB_CLASS,飞行器> | # 2, 数据样式 ![image](https://github.com/liuhuanyong/QAonMilitaryKG/blob/master/image/data_sample1.png) ![image](https://github.com/liuhuanyong/QAonMilitaryKG/blob/master/image/data_sample2.png) # 3, 问句类型 | 问句大类 | 问句小类 | 问句举例 | | :--- | :---: | :---: | | 属性值问答 | 单实体单属性问答 | 神舟五号的长度是多少? | | 属性值问答 | 单实体多属性问答 | 神舟五号的长度以及运载火箭是多少? | | 属性值问答 | 多实体单属性问答 | 神舟五号以及神舟十号的长度是多少? | | 属性值问答 | 多实体多属性问答 | 神舟五号的长度,运载火箭以及辽宁舰艇的航长分别为多少是多少? | | 属性区间值筛选问答 | 单属性区间问答 | 最大飞行速度大于500公里的战斗机? | | 属性区间值筛选问答 | 单属性多区间问答 | 服役时间在1950年之后2000年之前的轰炸机? | | 属性区间值筛选问答 | 多属性多区间问答 | 服役时间在1950年之后2000年之前且最大航程大于5000公里的运输机? | | 属性最值筛选 | 单实体属性最值问答 | 长度最长的宇宙飞船 | # 项目运行 主要文件构成如下: | 文件名称 | 中文名称 | 实现功能 | | :--- | :---: | :---: | | collect_data.py | 数据获取 | 网站公开数据解析与获取 | | insert_data.py | 数据导入 | 对数据进行标准化并存入至数据库 | | military_qa.py | 知识问答 | 知识问答 | | military.json | 数据文件 | 5800条武器知识 |  项目执行步骤:  1、执行insert_data.py,将输入倒入至mongodb当中。  2、执行military_qa.py,开始进行问答测试。  ps:若需要进行自我重新构建数据,可运行collect_data.py。 # 项目结果 ![image](https://github.com/liuhuanyong/QAonMilitaryKG/blob/master/image/res_example1.png) # 总结 1、本项目完成了采集并解析军事武器库网站,进行字段信息的标准化,形成一定规范、规模的军事武器装备结构化知识库。实现基于mongodb的军事领域知识库的自动问答。 2、本项目简要介绍了工业级的问答架构图,该架构图朴实且如实地介绍了面相结构化文本的知识构建以及结构化查询流程以及粗略实现细节。 3、面向具有数字型数据的结构化知识的问句的形式有多种,主要有纯属性值查询如:单实体单属性,单实体多属性,多实体单属性,多实体多属性等问题。带筛选条件查询,如如单属性值与多属性值区间查询。最值条件查询共三种,本项目初步实现了对这三种主要问句类型问答。 4、在实体识别,属性值识别,数值识别上,主要采用的方式是领域词及扩展词,配合正则表达式的方式来实现,没有使用学习模型。作为军事领域,学习模型在武器类实体识别上效果可能不会太好,在识别后进行实体链接映射会遇到一定困难。 5、实体与查询属性项之间的对应和成对是整个问答查询的最核心所在,本项目使用基于关系模板穷举的方式完成该目标,准确率较高,但缺点是穷举可能性不大,构造成本较高。 6、既然是结构化知识问答,那么业务场景下的问答应该是简单的,多实体多属性混杂出现的情况应该要少一些,即问题的问答可以很多样,但问题的内部结构不应太复杂,否则就丢失了自动问答解放信息杂糅的本意了。 7、知识图谱是结构化知识的一种方式,存储方式可以用关系型,可以用nosql,也可以用图数据库,不同的方式的区别在于sql的转化上。在关系级联程度不高的情况下,使用非图数据库可能会是更好的方式。 8、深度学习在工业界问答中,在基于qa对检索中用的比较多,在结构化知识图谱查询中较难大显身手,集中应用点在实体论元识别上,个人认为在实体属性关系的识别上不会很惊艳,很有可能没有规则来的快,来的准确。 如有自然语言处理、知识图谱、事理图谱、社会计算、语言资源建设等问题或合作,可联系我: 1、我的github项目介绍:https://liuhuanyong.github.io。 2、我的csdn博客:https://blog.csdn.net/lhy2014 3、about me:刘焕勇,中国科学院软件研究所,lhy_in_blcu@126.com