Skip to content

基于知识图谱的医疗问答系统设计与实现

misakivv/KGQA-Medical

Repository files navigation

KGQA-Medical

一、项目概述

1、项目名称

基于知识图谱的医疗问答系统设计与实现

2、系统架构

基于知识图谱的医疗问答系统框架图

3、构建时序图

基于知识图谱的医疗问答系统构建时序图

4、项目简介

本项目构建了一个高可用的医疗知识图谱问答系统,涵盖从数据存储到智能交互的全链路技术体系。

  • 在基础设施层,基于 Kubernetes 部署 Neo4j 分布式集群,通过 Shell 脚本自动化安装 1 master + 2 node 架构,结合 CSI Driver 实现 data/logs/conf 等目录的动态持久化存储,并利用 Helm 参数化模板(values.yaml)实现多环境配置适配,最终通过 LoadBalancer 暴露服务接口,保障知识图谱的高可用性与扩展性。
  • 在数据层,开发医疗网页爬虫提取 19 类疾病字段,通过 XPath+re 模块清洗后以 JSON 格式标准化存储,并构建 build_medicalgraph.py 脚本将结构化数据导入 Neo4j,定义疾病/科室/治疗等节点及关系类型,同步设计 D3.js 兼容的数据转换逻辑,实现力导向图的可视化对接。
  • 在业务层,创新性提出分层式问答引擎:通过 Aho-Corasick 自动机实现 14 类问句分类与实体识别,语义解析器动态生成 Cypher 查询模板支持复杂关系检索,并通过结果去重与模板填充优化答案可读性(如“{疾病}的症状包括:{症状列表}”)。
  • 在应用层,采用 Flask 构建 RESTful API(/ask 接口),前端通过 Fetch 异步请求实现问答交互,集成 iframe 动态加载 Neo4j Browser、D3.js 可视化界面及问答面板,结合 CSS Grid/Flex 响应式布局与 GSAP 动画优化用户体验,并通过 Webpack 资源压缩、Live2D 看板娘、Aplayer 音乐组件等增强功能交互性,最终形成具备知识可视化、智能问答与多终端适配的医疗知识服务系统。

二、系统知识图谱规模

1、知识图谱实体类型

实体类型 中文含义 实体数量 举例
Check 诊断检查项目 3,353 支气管造影;关节镜检查
Department 医疗科目 54 整形美容科;烧伤科
Disease 疾病 8,807 血栓闭塞性脉管炎;胸降主动脉动脉瘤
Drug 药品 3,828 京万红痔疮膏;布林佐胺滴眼液
Food 食物 4,870 番茄冲菜牛肉丸汤;竹笋炖羊肉
Producer 在售药品 17,201 通药制药青霉素V钾片;青阳醋酸地塞米松片
Symptom 疾病症状 5,998 乳腺组织肥厚;脑实质深部出血
Total 总计 44,111 约4.4万实体量级

2、知识图谱实体关系类型

实体关系类型 中文含义 关系数量 举例
belongs_to 属于 8,844 <妇科,属于,妇产科>
common_drug 疾病常用药品 14,649 <阳强,常用,甲磺酸酚妥拉明分散片>
do_eat 疾病宜吃食物 22,238 <胸椎骨折,宜吃,黑鱼>
drugs_of 药品在售药品 17,315 <青霉素V钾片,在售,通药制药青霉素V钾片>
need_check 疾病所需检查 39,422 <单侧肺气肿,所需检查,支气管造影>
no_eat 疾病忌吃食物 22,247 <唇病,忌吃,杏仁>
recommand_drug 疾病推荐药品 59,467 <混合痔,推荐用药,京万红痔疮膏>
recommand_eat 疾病推荐食谱 40,221 <鞘膜积液,推荐食谱,番茄冲菜牛肉丸汤>
has_symptom 疾病症状 5,998 <早期乳腺癌,疾病症状,乳腺组织肥厚>
acompany_with 疾病并发疾病 12,029 <下肢交通静脉瓣膜关闭不全,并发疾病,血栓闭塞性脉管炎>
Total 总计 294,149 约30万关系量级

3、知识图谱属性类型

属性类型 中文含义 举例
name 疾病名称 喘息样支气管炎
desc 疾病简介 又称哮喘性支气管炎...
cause 疾病病因 常见的有合胞病毒等...
prevent 预防措施 注意家族与患儿自身过敏史...
cure_lasttime 治疗周期 6-12个月
cure_way 治疗方式 "药物治疗","支持性治疗"
cured_prob 治愈概率 95%
easy_get 疾病易感人群 无特定的人群

三、构建过程

  • 首先就是k8s集群的自动化部署,具体参考Centos7.9 使用 Kubeadm 自动化部署 K8S 集群(一个脚本)
  • 其次是数据源的获取,具体脚本在Scraping for Medical Data目录下,里面一个是爬虫的一个是将获取到的数据转换为可视化所需的格式
  • 数据获取到之后就是知识图谱数据导入build_medicalgraph.py文件
  • 同时可视化的部分在visualization目录下,使用vscode的Go Live插件即可在浏览器上运行
  • 整体网站部分在index.html文件。其智能问答模块需要启动app.pychat_graph.py文件
  • 里面AplayrerLive2D的组件都是本地部署
  • 目前系统还不算太完善,后续有时间再优化

四、结果展示

1、知识图谱可视化-圆圈模式

知识图谱可视化-圆圈模式

2、知识图谱可视化-文字模式

知识图谱可视化-文字模式

3、系统首页展示

系统首页展示

4、系统问答界面展示

系统问答界面展示

四、声明

  • 此系统是基于刘焕庸老师的QABasedOnMedicaKnowledgeGraph开源项目基础上修改
  • QASystemOnMedicalKG

About

基于知识图谱的医疗问答系统设计与实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published