马上毕业了,回顾三年还是做了很多工作,其中也参考了很多开源程序,闲来无事开一篇文章,记录一下我的毕业设计。我的毕设是做领域知识图谱,知识图谱的构建主要有一下几步:数据采集、数据处理、数据存储以及可视化。知识图谱的可视化功能是很强的,因此我根据网上基于vue
和d3.js
可视化程序,改造为了我的知识图谱可视化方案。
系统的总体架构分为知识存储层和知识图谱应用层。知识图谱的知识存储层主要涉及到对数据的采集、处理得到知识三元组,然后将从数据中抽取到的军事装备知识进行存储;应用层完成对军事装备实体的查询、军事装备之间关系的查询、各个类别的军事装备信息的知识概览等功能,并通过Vue.js和D3.js应用开发技术给用户提供知识图谱的可视化及交互效果。
将华戍防务公司开发的墨子·未来指挥官军事推演软件数据库作为结构化数据源,同时,采用Python
编程语言,urllib3
、xpath
和re
库编写爬虫,采集环球军事网和https://www.radartutorial.eu/
网站中的数据。
墨子联合作战推演系统以现代海空作战推演仿真为主,覆盖陆、海、空、天、电全域联合作战,支持战术、战役级作战的推演仿真。该款软件内包含了大量的武器装备数据,按照官网安装完软件后,可以跳过权限表登录数据库,得到结构化的装备数据。
环球军事网·环球武器库的数据我采用了liuhuanyong的数据,他做的教程质量非常高,看了他的教程和知识图谱示例可以很快地入手知识图谱,在此对这位大牛表示感谢。
Radartutorial网站,是一个为了教育目的而创建的,为雷达专业相关学者、维护人员提供雷达原理和技术的详细概述的网站。同样的,网站中将雷达按照技术体制等进行了详尽的分类,并收录了数百个雷达的参数数据。这里我使用爬虫对该网站数据进行了爬取,爬虫程序位于ConstructDatabases/util/radardata.py
(由于编写的时间比较早,代码可能已经无法运行了...)。
数据处理有两方面,首先以上获取到的数据存在相互关联的较少,并且大量的数据是以数据属性的形式存在的,因此针对数据属性,将其建模为类(节点),并且采用随机的方式生成一些链接,使得数据的关联性更加丰富;其次,还有大量非结构化数据,例如文本数据,这些数据需要利用知识抽取算法得到结构化的SPO
三元组。这里我使用了哈工大的ltp
语言技术平台对三元组进行抽取(抽取代码为ConstructDatabases/util/triples.py
)。
Neo4j是目前市场上较为成熟的高性能图数据库,自带有展示界面,广泛应用在市面上的知识图谱中。本项目将所有知识存储到了该款图数据库中。推荐用docker
安装neo4j数据库。
该可视化系统采用了vue
框架和d3.js
库,参考了CoderWanp的vue-d3-graph项目,感谢作者开源了功能丰富、美观的知识图谱可视化程序并且编写了详细的教程。可视化大概分为一下几个模块:
- 信息概览 在系统界面上单击鼠标左键选中节点,系统会高亮与该节点相关联的实体节点,并且在页面的右下角会弹出选中实体的知识概览信息
- 二维可视化 在左侧的文字搜索框中搜索感兴趣的节点,可以对该节点及其相邻节点高亮显示。
- 三维可视化
推荐在linux
平台安装数据库,几行命令就搞定,非常方便。使用docker
安装neo4j数据库的教程在这里。安装好了之后,需要网页登录一下,更改数据库的用户名密码,再把程序连接neo4j数据库的密码部分更新为新密码,否则会连接失败,同时需要安装相应的python
软件包。
前端可视化工程采用vue.js
框架编写,需要node.js
开发环境。然后在前端根目录Frontend
执行npm install
,安装好依赖包后执行npm run serve
即可运行。
前端需要请求后端才能获得数据,这里需要将数据库的ip
,用户名,密码做对应的修改。而后运行Backend/KGServer.py
,再去刷新前端页面可以看到知识图谱的可视化效果。需要注意的是,我这里还加了模糊搜索功能,需要用到Bert等模型,这块需要增加的代码较多;如果不需要模糊匹配等功能将Backend/Neo4jDataBase.py
中相关的程序接口注释掉即可。相关的模糊匹配计算可以参考这个仓库完成相似度匹配算法,并以HTTP
接口向外提供服务,对该系统功能进行拓展。