![365deb7f774916cb3a484c7244e0aae4.png](https://i-blog.csdnimg.cn/blog_migrate/26a77726f7e394d2f3c8f98e36004435.jpeg)
![792250d66d911b5d80a29273232824fb.png](https://i-blog.csdnimg.cn/blog_migrate/c47b2da07b10d17a6c660112a59c45a6.jpeg)
1、项目背景
为通过项目实战增加对知识图谱的认识,几乎找了所有网上的开源项目及视频实战教程。
果然,功夫不负有心人,找到了中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目QABasedOnMedicaKnowledgeGraph。
项目地址:https://github.com/liuhuanyong/QASystemOnMedicalKG
用了两个晚上搭建了两套,Mac版与Windows版,哈哈,运行成功!!!
从无到有搭建一个以疾病为中心的一定规模医药领域知识图谱,以该知识图谱完成自动问答与分析服务。该项目立足医药领域,以垂直型医药网站为数据来源,以疾病为核心,构建起一个包含7类规模为4.4万的知识实体,11类规模约30万实体关系的知识图谱。 本项目将包括以下两部分的内容:
1、基于垂直网站数据的医药知识图谱构建
2、基于医药知识图谱的自动问答
2、项目环境
2.1 windows系统
搭建中间有很多坑,且行且注意。
配置要求:要求配置neo4j数据库及相应的python依赖包。neo4j数据库用户名密码记住,并修改相应文件。
安装neo4j,neo4j 依赖java jdk 1.8版本以上:
java jdk安装方法可参考:windows系统下安装JDK8,下载地址: https:// download.oracle.com/otn -pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-windows-x64.exe
安装neo4j可参考博文:windows安装neo4j,下载地址: https:// go.neo4j.com/download-t hanks.html?edition=community&release=3.4.1&flavour=winzip
安装python可参考:Windows环境下安装python2.7
根据neo4j 安装时的端口、账户、密码配置设置设置项目配置文件:answer_search.py & build_medicalgraph.py (github下载项目时根据个人需要也可使用git)
数据导入:python build_medicalgraph.py,导入的数据较多,估计需要几个小时。
python build_medicalgraph.py导入数据之前,需要在该文件main函数中加入:
![de5e1cd05652b6691d2dc56883b9a103.png](https://i-blog.csdnimg.cn/blog_migrate/27ba133fecac315df2ba09c0fdafecc0.jpeg)
![d960afb091e3c4650c34172c13ee1885.png](https://i-blog.csdnimg.cn/blog_migrate/3b746fde742dcbb506896e3d708f2255.jpeg)
启动问答:python chat_graph.py
2.2 Mac系统
mac本身自带python、java jdk环境,可直接安装neo4j图数据库,项目运行步骤与windows基本一样。
问题解答:
安装过程中如遇问题可联系Wechat: dandan-sbb。
2.3 Neo4j数据库展示
![07ac4632e963733df2c6ade861331e33.png](https://i-blog.csdnimg.cn/blog_migrate/fb570f4caaeb1affce68c7d883a4b118.jpeg)
2.4 问答系统运行效果
![ed84720a3969faed06b488b46324fda6.png](https://i-blog.csdnimg.cn/blog_migrate/cd4c5830073e63fb83d93e663a0bed90.jpeg)
3、项目介绍
该项目的数据来自垂直类医疗网站寻医问药,使用爬虫脚本data_spider.py,以结构化数据为主,构建了以疾病为中心的医疗知识图谱,实体规模4.4万,实体关系规模30万。schema的设计根据所采集的结构化数据生成,对网页的结构化数据进行xpath解析。
项目的数据存储采用Neo4j图数据库,问答系统采用了规则匹配方式完成,数据操作采用neo4j声明的cypher。
项目的不足之处在于疾病的引发原因、预防等以大段文字返回,这块可引入事件抽取,可将原因结构化表示出来。
![e3b00c6935d2977ef568e14d78d23145.png](https://i-blog.csdnimg.cn/blog_migrate/334c330d549ba665f633dab0c7e31469.jpeg)
3.1 项目目录
.
3.2 知识图谱的实体类型
![9cde34c036efb496eb75fe6ea6505ab8.png](https://i-blog.csdnimg.cn/blog_migrate/c31e6b2ac5b60cfe70c84f3156319819.jpeg)
3.3 知识图谱的实体关系类型
![e00a536f362e1596e9ef63f473b6a065.png](https://i-blog.csdnimg.cn/blog_migrate/f70513402fec24401490bd67d23742c3.jpeg)
3.4 知识图谱的属性类型
![48d3f11111af491b77d32dac09537d21.png](https://i-blog.csdnimg.cn/blog_migrate/05dcb3b9d25838b857e16ed0261d5f73.jpeg)
3.5 问答项目实现原理
![5a60d1b1e3f681271913f339fc0d40a4.png](https://i-blog.csdnimg.cn/blog_migrate/33b13bc48c6a51db15fb161ad711947e.jpeg)
本项目的问答系统完全基于规则匹配实现,通过关键词匹配,对问句进行分类,医疗问题本身属于封闭域类场景,对领域问题进行穷举并分类,然后使用cypher的match去匹配查找neo4j,根据返回数据组装问句回答,最后返回结果。
问句中的关键词匹配:
![2ccc479ad652d4eaac78e81927e0d67b.png](https://i-blog.csdnimg.cn/blog_migrate/8f93d414acc35f7fb1d672d7b461150f.jpeg)
根据匹配到的关键词分类问句
![570341386a4af655a9066453624bf42f.png](https://i-blog.csdnimg.cn/blog_migrate/861cea2bb500e82a1887680255d458a1.jpeg)
问句解析
![0e89fc7084526bd43e3a9c7debc9df4d.png](https://i-blog.csdnimg.cn/blog_migrate/b1a7fe7a1f99dc8123b3d00d1bea7dbd.jpeg)
查找相关数据
![4fd983dc4a5dd2ee221065377b56e34d.png](https://i-blog.csdnimg.cn/blog_migrate/778c7d0550c2a0b713d87f71a774e610.jpeg)
根据返回的数据组装回答
![e297e2fda08da6082e23be8be61973d6.png](https://i-blog.csdnimg.cn/blog_migrate/76d39f65f4e8aee06cb065da4e3dc6b1.jpeg)
3.6 问答系统支持的问答类型
![b0573a7ae611004464e8de6af383b226.png](https://i-blog.csdnimg.cn/blog_migrate/d252f0f34a4052e5ef042f0dd7fe96ca.jpeg)
4、项目总结
基于规则的问答系统没有复杂的算法,一般采用模板匹配的方式寻找匹配度最高的答案,回答结果依赖于问句类型、模板语料库的覆盖全面性,面对已知的问题,可以给出合适的答案,对于模板匹配不到的问题或问句类型,经常遇到的有三种回答方式:
1、给出一个无厘头的答案;
2、婉转的回答不知道,提示用户换种方式去问;
3、转移话题,回避问题;
例如,本项目中采用了婉转的方式回答不知道:
![e15d6ec8459860855956d9fa4c00bf56.png](https://i-blog.csdnimg.cn/blog_migrate/53d8d59f7c4011aef145d2fd6c9cd52b.jpeg)
基于知识图谱的问答系统的主要特征是知识图谱,系统依赖一个或多个领域的实体,并基于图谱进行推理或演绎,深度回答用户的问题,基于知识图谱的问答系统更擅长回答知识性问题,与基于模板的聊天机器人有所不同的是它更直接、直观的给用户答案。对于不能回答、或不知道的问题,一般直接返回失败,而不是转移话题避免尴尬。
整个问答系统的优劣依赖于知识图谱中知识的数量与质量。也算是利弊共存吧!知识图谱图谱具有良好的可扩展性,扩展了知识图谱也就是扩展了问答系统的知识库。如果问句在射程范围内,可轻松回答,但如果不幸脱靶,则体验大打折扣。
从知识图谱的角度分析,大多数知识图谱规模不足,主要原因还是数据来源以及技术上知识的抽取与推理困难。
http://weixin.qq.com/r/qS_uto-EP9JArcvV93q7 (二维码自动识别)
个人博客:http://www.bobinsun.cn
![6d3cf9be41656ef3777f4827315a86da.gif](https://i-blog.csdnimg.cn/blog_migrate/e9498545c6c90e935a99e813446fa191.gif)