这是 阿拉灯神丁Vicky 的第 23 篇文章

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-thanks.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函数中加入:

build_medicalgraph.py

启动问答python chat_graph.py

2.2 Mac系统

mac本身自带python、java jdk环境,可直接安装neo4j图数据库,项目运行步骤与windows基本一样。

2.3 Neo4j数据库展示

2.4 问答系统运行效果

3、项目介绍

该项目的数据来自垂直类医疗网站寻医问药,使用爬虫脚本data_spider.py,以结构化数据为主,构建了以疾病为中心的医疗知识图谱,实体规模4.4万,实体关系规模30万。schema的设计根据所采集的结构化数据生成,对网页的结构化数据进行xpath解析。

项目的数据存储采用Neo4j图数据库,问答系统采用了规则匹配方式完成,数据操作采用neo4j声明的cypher。

项目的不足之处在于疾病的引发原因、预防等以大段文字返回,这块可引入事件抽取,可将原因结构化表示出来。

3.1 项目目录

.
├── README.md
├── __pycache__      \\编译结果保存目录
│   ├── answer_search.cpython-36.pyc
│   ├── question_classifier.cpython-36.pyc
│   └── question_parser.cpython-36.pyc
├── answer_search.py
├── answer_search.pyc
├── build_medicalgraph.py    \\知识图谱数据入库脚本
├── chatbot_graph.py    \\问答程序脚本
├── data
│   └── medicaln.json \\本项目的全部数据,通过build_medicalgraph.py导neo4j
├── dict
│   ├── check.txt    \\诊断检查项目实体库
│   ├── deny.txt      \\否定词库
│   ├── department.txt  \\医疗科目实体库
│   ├── disease.txt    \\疾病实体库
│   ├── drug.txt      \\药品实体库
│   ├── food.txt      \\食物实体库
│   ├── producer.txt    \\在售药品库
│   └── symptom.txt    \\疾病症状实体库
├── document
│   ├── chat1.png    \\系统运行问答截图01
│   ├── chat2.png      \\系统运行问答截图01
│   ├── kg_route.png    \\知识图谱构建框架
│   ├── qa_route.png    \\问答系统框架图
├── img    \\README.md中的所用图片
│   ├── chat1.png
│   ├── chat2.png
│   ├── graph_summary.png
│   ├── kg_route.png
│   └── qa_route.png
├── prepare_data
│   ├── build_data.py    \\数据库操作脚本
│   ├── data_spider.py    \\网络资讯采集脚本
│   └── max_cut.py      \\基于词典的最大向前/向后脚本
├── question_classifier.py    \\问句类型分类脚本
├── question_classifier.pyc
├── question_parser.py    \\问句解析脚本
├── question_parser.pyc

3.2 知识图谱的实体类型

3.3 知识图谱的实体关系类型

3.4 知识图谱的属性类型

3.5 问答项目实现原理

本项目的问答系统完全基于规则匹配实现,通过关键词匹配,对问句进行分类,医疗问题本身属于封闭域类场景,对领域问题进行穷举并分类,然后使用cypher的match去匹配查找neo4j,根据返回数据组装问句回答,最后返回结果。

问句中的关键词匹配:

根据匹配到的关键词分类问句

问句解析

查找相关数据

根据返回的数据组装回答

3.6 问答系统支持的问答类型

4、项目总结

基于规则的问答系统没有复杂的算法,一般采用模板匹配的方式寻找匹配度最高的答案,回答结果依赖于问句类型、模板语料库的覆盖全面性,面对已知的问题,可以给出合适的答案,对于模板匹配不到的问题或问句类型,经常遇到的有三种回答方式:

1、给出一个无厘头的答案;

2、婉转的回答不知道,提示用户换种方式去问;

3、转移话题,回避问题;

例如,本项目中采用了婉转的方式回答不知道:

基于知识图谱的问答系统的主要特征是知识图谱,系统依赖一个或多个领域的实体,并基于图谱进行推理或演绎,深度回答用户的问题,基于知识图谱的问答系统更擅长回答知识性问题,与基于模板的聊天机器人有所不同的是它更直接、直观的给用户答案。对于不能回答、或不知道的问题,一般直接返回失败,而不是转移话题避免尴尬。

整个问答系统的优劣依赖于知识图谱中知识的数量与质量。也算是利弊共存吧!知识图谱图谱具有良好的可扩展性,扩展了知识图谱也就是扩展了问答系统的知识库。如果问句在射程范围内,可轻松回答,但如果不幸脱靶,则体验大打折扣。

从知识图谱的角度分析,大多数知识图谱规模不足,主要原因还是数据来源以及技术上知识的抽取与推理困难。

个人博客:www.bobinsun.cn

题图

医疗知识图谱问答系统探究(一)相关推荐

  1. 系统架构设计师与系统分析师历年实体分析与解答下载_医疗知识图谱问答系统探究(一)...

    这是 阿拉灯神丁Vicky 的第 23 篇文章 1.项目背景 为通过项目实战增加对知识图谱的认识,几乎找了所有网上的开源项目及视频实战教程. 果然,功夫不负有心人,找到了中科院软件所刘焕勇老师在git ...

  2. 医疗知识图谱问答系统(python neo4j)

    这是中科院软件所刘焕勇老师在github上的一个开源项目 地址:http:// https://github.com/liuhuanyong/QASystemOnMedicalKG 本项目构建了以疾病 ...

  3. 基于医疗知识图谱的问答系统源码详解

    承接上一篇系统搭建和遇到的问题,本篇解析系统功能的实现,并做了部分修改. 项目是找的中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目QABasedOnMedicaKno ...

  4. 知识图谱入门2-1:实践——基于医疗知识图谱的问答系统

    注:欢迎关注datawhale:https://datawhale.club/ 系列: 知识图谱入门一:知识图谱介绍 知识图谱入门2-1:实践--基于医疗知识图谱的问答系统 知识图谱入门2-2:用户输 ...

  5. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part5-完结):信息检索与结果组装

    前序文章: [知识图谱]实践篇--基于医疗知识图谱的问答系统实践(Part1):项目介绍与环境准备 [知识图谱]实践篇--基于医疗知识图谱的问答系统实践(Part2):图谱数据准备与导入 [知识图谱] ...

  6. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part2):图谱数据准备与导入

    前序文章: [知识图谱]实践篇--基于医疗知识图谱的问答系统实践(Part1):项目介绍与环境准备 背景 前文已经介绍了该系统的环境准备.下面介绍图谱数据获取,数据主要从:http://jib.xyw ...

  7. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part4):结合问题分类的问题解析与检索语句生成

    前序文章: [知识图谱]实践篇--基于医疗知识图谱的问答系统实践(Part1):项目介绍与环境准备 [知识图谱]实践篇--基于医疗知识图谱的问答系统实践(Part2):图谱数据准备与导入 [知识图谱] ...

  8. “基于医疗知识图谱的问答系统”代码解析(一)

    "基于医疗知识图谱的问答系统"代码解析(一) build_medicalgraph.py -建立医疗知识图谱的代码解析 "基于医疗知识图谱的问答系统"代码解析( ...

  9. 菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(二)(搭建系统)

    上接菜哥学知识图谱(通过"基于医疗知识图谱的问答系统")(一) 3.搭建项目2 被小学生拖累连跪5把,近期不搞了- 继续搭建项目.先把neo4j启动起来. 编辑build_medi ...

最新文章

  1. debian卸载php_在Debian10上安装PHP的方法
  2. LaTeX 笔记:NFSS 那点事儿
  3. 看漫画学python 豆瓣_各种表示“看”的词语
  4. Wi-Fi 6 与 5G 相比哪个更快?
  5. linux路由内核实现分析(三)---路由查找过程
  6. Android智能电视应用程序开发浅谈(二)
  7. mysql的逻辑备份和恢复
  8. rabbitmq取消自动重连_RabbitMQ面试题
  9. Matlab2018a破解出现licensing error:-8523
  10. python提取国家和地区信息
  11. 防火墙基础:ISA Server 防火墙客户端和Forefront TMG 客户端介绍
  12. 高考数学47分学计算机,从57分到高考数学131分,4个月的时间我竟创造了这个传奇!...
  13. 关于pandas的时间序列中的freq频率参数如何设置的官方参考说明【以date_range方法中的freq参数举例】
  14. 初学larval 第一篇(大神绕道哦,针对新手友好的一篇)
  15. 浏览器收藏夹整理及无效链接批量删除
  16. SkyWalking安装配置,ElasticSearch存储,nexus私有maven库进行SkyWalking客户端探针的打包和拉取
  17. Redis队列实现Java版秒杀系统(无脚本、可用于生产)
  18. 【Kaldi 新手入门】手把手教你搭建简易英文数字ASR系统
  19. mysql禁止索引_MYSQL挟制使用索引和禁止使用索引_mysql
  20. python控制excel打印_九、Python 操作excel(一)

热门文章

  1. H.264与AVS视频标准核心技术比较
  2. 在线预览pdf文件(pdfJS)
  3. 学习英文-学以致用【场景:看美剧】
  4. 怎么找属于自己最优的2B增长模型?
  5. Ubuntu20.04 安装python3.7
  6. 静态网页入门讲解,制作属于你自己的网页(一)
  7. 通过第三方jar实现中文转换为拼音
  8. 三百个好用的免费软件名单[转]
  9. QQ邮箱添加企业邮箱与企业邮箱添加QQ邮箱
  10. swi-prolog安装及使用(基于)