医疗知识图谱工程研究记录

news2024/9/23 13:31:03

医疗诊断知识图谱

本项目是基于知识图谱的知识问答项目。过程为对问句进行解析,形成若干三元组及相关的操作条件,转换为查询语句,查询数据库返回结果。

KBQA方式的问答包括意图分析、标签(实体、操作符)识别、条件体与目标体识别、查询语句生成等几个关键步骤。

https://mp.weixin.qq.com/s/F-_qyHTsPtlrK77JgWidoA

1.意图分析

1)基于词典规则的意图分类

收集一下能明显区分问题类型的关键词集合,对输入的问句进行词语匹配或者设定规则。

如下医疗问题的分类,根据这些关键词分不同类型

image-20220908110817195

2)基于学习模型的意图分类

通过预先对问句进行意图标注,形成一定规模的标注数据集,然后通过构造分类器进行训练,然后得到分类结果。可以用CNN或者LSTM做意图分类。分类包含单分类,也可能包含多标签分类。例如:我今天为啥会头痛,该怎么办,包含“发病原因 和治疗措施 两个意图,需要多标签分类任务来处理。

一 工程1

/work/myCode/KBQA/MedicalKG/QASystemOnMedicalKG-master

源代码来源: https://github.com/liuhuanyong/QASystemOnMedicalKG/tree/master/data

1.1 配置
python3  (mac本地,conda activate python3)
py2neo
pyahocorasick  
1.2 用法
step0: neo4j start (启动neo4j)
step1:nohup python build_medicalgraph.py   (将数据导入neo4j图数据库中,大约需要几小时)
step2:python chatbot_graph.py (启动知识图谱诊断应用)

数据库情况

image-20220920113639717

问答展示:

image-20220920113705105

代码结构

image-20220711170144146

1.3 主要内容

1.对用户输入的query,做问题分类,分类主要靠关键词匹配,匹配到症状,原因,饮食,药物,预防。。等

image-20220711172146744

2.对输入的query,根据问题关键词,将query转为查询语句sql

image-20220711172225999

3.根据查询语句,从图数据库中查询出答案,并调用回复模板来返回。

image-20220711172342691

image-20220711172355927

1.4 存在的问题

1,不支持多轮问答,每轮问答都需要写明问的实体,“感冒怎么治疗” “感冒是什么,怎么治疗” 这种就不行。

2.实体链接不丰富,“头痛”可以支持,“头疼”就不行。

3.代码里写入了太多数据方面的定义,不好扩展到其他领域。

4.不能解决复合问句

二 工程2

/work/myCode/KBQA/MedicalKG/KBQA-for-Diagnosis-main
2.1 源码
https://github.com/wangle1218/KBQA-for-Diagnosis
2.2 用法:
step0: neo4j start (启动neo4j)
step1:nohup python build_kg/build_kg_utils.py    (将数据导入neo4j图数据库中,大约需要几小时)
step2:python start_app.py (启动知识图谱诊断应用)
2.3 主要内容
  1. 将json格式的数据导入图数据库中,此处数据来源就是上一个工程,medical.json

    build_kg/build_kg_utils.py 导入数据脚本
    ./graph_data/medical.json 数据路径
    
  2. 使用分类模型,来判断输入query是闲聊类问题,还是医疗诊断问题。分类模型由sklearn 库中的逻辑回归和gdbt实现,两种模型的预测结果概率值做平均,以此来区分是否是闲聊,以及闲聊的类别

    代码:nlu/sklearn_Classification
    模型训练:train.py 
    模型预测:clf_model.py
    函数:clf_model.predict(text)
    
    /nlu/sklearn_Classification/data/intent_recog_data.txt 中定义了闲聊类别:greet,goodbye,accept等
    
  3. 对诊断类问题,由意图识别模型判断是哪种意图。模型由bert训练

    代码:nlu/bert_intent_recognition
    模型训练:train.py
    模型构建:bert_model.py
    模型预测服务:app.py  基于flask的服务,可以单独运行
    意图类别:label中,细分为:定义,病因,预防,传染性,治愈率,治疗时间等。
    

    意图识别是先搭建flask服务,再从端口获取意图结果

    image-20220711175514706

4.对诊断类问题,获取对应的slot

image-20220920110331743

image-20220920110410067

需要提前标注数据,训练slot模型。模型用bilstm+crf来训练

代码:knowledge_extraction/bilstm_crf
基于knowledge_extraction/bilstm_crf的slot模型训练
模型训练:train.py
服务:app.py
slot标签定义:knowledge_extraction/bilstm_crf/checkpoint/diseases.json

5.对诊断类问题,根据意图和slot,获取答案。此处根据意图置信度做了确认和拒绝回答的处理。

当意图置信度达到一定阈值时(>=0.8),可以查询该意图下的答案
当意图置信度较低时(0.4~0.8),按最高置信度的意图查找答案,询问用户是否问的这个问题
当意图置信度更低时(<0.4),拒绝回答

6.如果是确定的问题,根据slot获取对应的cql语句,然后进行数据库查询,返回答案

cql语句模板定义:config.py

image-20220711180908511

​ 根据组织好的cql语句,在数据库中查询

image-20220711180957232

image-20220711181031243

2.4 其他目录
entity_normalization  实体对齐目录,定义了同一病症不同的说法
faiss_index   一种检索方法,包含数据
knowledge_extraction 知识抽取目录,包含了bert服务部署,bilstm-crf做slot训练,CasRel (??)
nlu/slotgate_slu 基于slotgate的slot训练。包含数据
doc :一些论文介绍
2.5 一些报错:
1.错误1

image-20220712165133106

解决:降低keras的版本

pip install keras==2.3.1
2.错误2

image-20240827143406284

解决

pip install 'h5py<3.0.0' -i https://pypi.tuna.tsinghua.edu.cn/simple
3.错误3:

image-20240827143345230

解决:

该报错的文件中import部分,
import keras  改为  import tensorflow.keras
4.报错4

image-20240827143259049

启动知识图谱服务时候报错,端口不支持

原因分析:

使用python连接neo4j数据库时出现了该问题, 原因是py2neo的版本太高。

解决:

下载低版本(如4.3.0)

pip install py2neo==4.3.0 -i https://pypi.douban.com/simple
5.报错5

image-20240827143318681

原因:numpy版本较老,版本不匹配。

解决:

pip install numpy --upgrade --user

三 其他医疗知识图谱构建结构图

3.1 糖尿病知识图谱

数据:https://tianchi.aliyun.com/dataset/dataDetail?dataId=88836

比赛: https://tianchi.aliyun.com/forum?spm=5176.21852664.0.0.44f867963jprX7#raceId=231687

image-20220907152014327

image-20220907152025749

3.2 中文医疗知识图谱 https://tianchi.aliyun.com/dataset/dataDetail?spm=5176.12282016.0.0.681c6d92qv5NDw&dataId=95414

3.3 医疗知识图谱各个实体解析 https://schema.omaha.org.cn/class/ClinicalFinding  

汇知医学知识图谱数据 http://wiki.omaha.org.cn/pages/viewpage.action?pageId=31424961

病人事件图谱 https://luckyxuli.github.io/peg/#/

**运维行车设备知识图谱 http://openkg.cn/dataset/qm-data** 

中药说明书实体识别数据集 https://tianchi.aliyun.com/dataset/dataDetail?dataId=86819

中医文献问题生成数据集 http://openkg.cn/dataset/tcm-qg

数控机床故障诊断知识图谱 https://github.com/wangrenyisme/Shukongdashi

在线故障诊断平台比赛 http://www.cnsoftbei.com/plus/view.php?aid=353

基于故障诊断的问答系统 https://github.com/LiuYuhanMIO/QA

机械故障数据集 https://github.com/hustcxl/Rotating-machine-fault-data-set

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux2-Linux基础命令

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、Linux的目录结构 Linux的目录结构是一个树型结构 Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘 Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面 练习 请根据语言描述&am…

Linux 2.6 内核进程调度队列

Linux 2.6 内核进程调度队列 运行队列&#xff08;runqueue&#xff09;蓝色区域&#xff08;活动队列&#xff09;queuebitmapnr_active总结&#xff1a;时间片还没有结束的所有进程都按照优先级放在该队列&#xff08;活动队列&#xff09; 红色区域&#xff08;过期队列&…

scrapy框架--快速了解

免责声明:本文仅做分享~ 目录 介绍: 5大核心组件: 安装scrapy: 创建到启动: 修改日志配置:settings.py 修改君子协议配置: 伪装浏览器头: 让代码去终端执行: 数据保存: 1-基于命令 2-基于管道 文档: 介绍: 5大核心组件: Scrapy是一个开源的Python框架&#xff0c…

【3.5】贪心算法-解优势洗牌(类田忌赛马问题)

一、问题 给定两个 大小相等的数组 A 和 B &#xff0c;A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。 返回 A 的任意排列&#xff0c;使其相对于 B 的优势最大化。 二、解题思路 这个问题要求我们重新排列数组A&#xff0c;使得在相同位置上&#xf…

Ubuntu 24.04部署Wordpress

环境&#xff1a; Ubuntu 24.04 PHP 8.1.2-1ubuntu2.18 Nginx/1.18.0 (Ubuntu) WordPress 6.6.1 Mysql 8 文章目录 1. 安装php2. 配置nginx2.1. 安装nginx2.2. 配置 3. 下载wordpress3.1. 配置wordpress 4. mysql配置wordpress数据库和用户4.1. 安装和远程连接4.2. 创建wordpre…

uart16550_ip_spec

用途&#xff1a;允许与调制解调器或其他外部设备进行通信&#xff0c;例如使用串行电缆和RS232协议的另一台计算机。 核心特性&#xff1a; WISHBONE接口&#xff1a;支持32位或8位数据总线模式&#xff08;可选&#xff09;。 FIFO操作&#xff1a;仅支持FIFO&#xff08;先…

惊爆!布偶猫喂养秘籍:希喂、交响乐金罐、尾巴生活适合布偶猫吗?

我家布偶甜美可爱&#xff0c;喜欢撒娇爱粘人&#xff0c;真的特别可爱。不过想养好布偶猫喂食非常重要&#xff0c;喂食方法不对&#xff0c;食物没选择好&#xff0c;都会影响布偶猫的健康与正常生长。今天我就就拿布偶猫的选粮标准来测评三款热门主食罐&#xff0c;让大家更…

基于JAVA的专利资源共享平台

项目介绍 基于JAVA的专利资源共享平台系统是一个集专利信息展示、资源共享、交易服务等功能于一体的综合性平台。该系统利用JAVA语言的强大功能和广泛的生态系统&#xff0c;结合数据库技术、Web开发技术等&#xff0c;为用户提供了一个高效、安全、便捷的专利资源共享和交易环…

天气分析预测系统-气象网

项目介绍 在信息科技蓬勃发展的当代&#xff0c;我们推出了一款基于Python Flask的全国上海气象数据采集、预测和可视化系统。随着气候变化越发引起全球关注&#xff0c;精准的气象数据和可视化展示变得愈发重要。该系统采用先进的技术和创新的功能&#xff0c;满足用户对实时…

html+css+js网页设计 个人博客模版 我的学习经历7个页面

htmlcssjs网页设计 个人博客模版 我的学习经历7个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取…

npm登录

npm 登录 npm login --auth-typelegacy报错 原因 npm源非npm本身源&#xff0c;需要切换&#xff1a; 查看源 nrm ls切换为npm源 nrm use npm重新登录 输入OTP验证后登录成功&#xff1a;

包含结构体的类的大小

看一下简单的例子&#xff0c;一个类声明中包含了一个结构体的声明&#xff0c;在没有定义这个结构体变量的情况下&#xff1a; #include <stdlib.h> #include <stdio.h> #include <malloc.h>class CTest { public:CTest(){}~CTest() {}struct internal{in…

在AMD GPU上使用DBRX Instruct

DBRX Instruct on AMD GPUs — ROCm Blogs 在这篇博客中&#xff0c;我们展示了DBRX Instruct&#xff0c;这是由Databricks开发的一个专家混合大型语言模型&#xff0c;在支持ROCm的系统和AMD GPU上运行。 关于DBRX Instruct DBRX是一个基于Transformer的仅解码大型语言模型…

OpenCV绘图函数(8)填充凸多边形函数fillConvexPoly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 填充一个凸多边形。 函数 cv::fillConvexPoly 绘制一个填充的凸多边形。这个函数比 fillPoly 函数快得多。它可以填充的不仅仅是凸多边形&#…

护眼台灯减蓝光和无蓝光的有区别?眼科医生推荐的护眼台灯

自从疫情以后&#xff0c;”网课“成了一个热门的课程&#xff0c;许多家长会为了孩子的学习进行网课的报名。孩子们的眼睛处于生长期比较脆弱&#xff0c;长时间对着手机&#xff0c;电脑上课&#xff0c;电子产品会产生蓝光&#xff0c;眼睛会受到一定的伤害。护眼台灯减蓝光…

CTFHub-SSRF过关攻略(持续更新中...)

第一题&#xff0c;内网访问 一&#xff0c;打开web/ssrf/内网访问 二&#xff0c;进入页面什么都没有查看一下上一步给的参数 三&#xff0c;输入http://127.0.0.1/flag.php回车显示flag 四&#xff0c;然后复制提交&#xff08;恭喜通关&#xff09; 第二题&#xff0c;伪协…

AI智能大数据分析足球AIAutoPrediction,提高足球比赛预测准确度的新方法

本文摘要&#xff1a;一、I智能大数据分析足球的原理I智能大数据分析足球的原理是利用机器学习和大数据分析技术&#xff0c;对足球比赛的各种数据进行分析和预测。这些数据包括球队历史成绩、球员数据、场地... 一、I智能大数据分析足球的原理 I智能大数据分析足球的原理是利…

视频生成类大模型实现原理以及应用和难点

“ 视频生成属于计算机视觉领域&#xff0c;还包括图像处理等 ” 生成式大模型在文本&#xff0c;图像&#xff0c;视频等方面表现良好&#xff0c;而我们都知道文本生成大模型是基于自然语言处理技术&#xff0c;而视频生成的大模型又是怎么实现的呢&#xff1f; 今天我们就…

学习笔记之JS篇(0828)

Error Lens:报错提示插件 2. 主题&#xff08;One Dark Pro) 3. VSCode自带格式化工具代码缩进字符改为2个字符 4. 代码缩进字符改为2个字符 左右分屏&#xff08;live Server) Win 左右箭头 **学 习 ** 不能只看不动手 不管多简单的代码都要练习 随时暂停视频随时写代码 …

Win10 安装 Rabbitmq

参考文档&#xff1a;https://www.rabbitmq.com/docs/install-windows 一、安装 Erlang 语言 安装 RabbitMQ 需要该语言的支持才能安装 下载地址&#xff1a;https://erlang.org/download/otp_versions_tree.html 点击这里下载最新版本&#xff1a;27.0.1 直接默认 next 更…