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

2024-08-28 04:52

本文主要是介绍医疗知识图谱工程研究记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

医疗诊断知识图谱

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

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=954143.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.chinasem.cn/article/1113785

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。