深度学习实战54-基于ChatGLM2大模型构建智能自助用药问答系统与药物智能管理实战的应用

news2024/11/19 16:41:30

大家好,我是微学AI,今天给大家介绍一下深度学习实战54-基于ChatGLM2大模型构建智能自助用药问答系统与药物智能管理实战的应用。 随着人工智能技术的发展,我们的生活在许多方面都得到了改善。医疗领域也不例外。本文将介绍如何利用大模型(例如ChatGLM2-6b,百川,通义千问)构建一个智能自助用药问答系统与智能管家。该系统旨在提供更有效、安全和便捷的个性化药物管理服务,以提高患者的生活质量和健康状况。
在这里插入图片描述

一、应用背景

在当今社会,人们对医疗健康问题越来越关注,但由于时间、地点等因素限制,患者无法及时获得医生的指导和帮助。此外,许多老年人和慢性病患者需要长期服药,但他们可能会忘记服药或混淆不同类型的药物,需求咨询与问答与他们沟通。因此, 智能自助用药管理系统具有广阔的应用前景。

二、创新功能点介绍

1. 自动识别与分析处方

我们的系统可以通过AI技术对用户上传的处方进行图像识别和语义理解。例如,当用户拍摄并上传一张处方图片时,系统会自动扫描并解析出药品名称、剂量以及服用方式等信息。这一功能不仅可以减少手动输入错误,还能大大提高用户在管理多种药物时的便利性。

实际场景示例:李先生是一个高血压患者,需要定期服用多种药物。他可以将医生开具的处方拍照上传到我们的系统中,系统会自动读取并记录各种药物及其使用方法,传输到系统中,并记录下药品使用情况,整理数据输入大模型。

2. 药物互动检查

系统使用知识图谱技术检查用户正在使用或计划使用的所有药物之间是否存在可能危险的相互作用。如果发现有潜在风险,系统会立即提醒用户,并建议他们寻求医生建议。
后台构建了药物相互作用知识图谱,帮助用户快速提示药物之间的危险因素。

实际场景示例:若李先生新添加了一种抗抑郁药,在保存后,系统立即发现这款新加入的抗抑郁药与他原本正在服用的某种高血压药可能产生不良反应。于是, 系统马上向李先生发送警告,并建议他咨询医生。

3. 智能提醒

根据用户设定或从处方中获取到的信息,我们的智能提醒功能可帮助用户按时正确地服用各类荐品。它可以自动设置提醒时间,并根据个人需求进行调整。

实际场景示例:李先生需要每天早晚各服用一次某种心脏病治疗荐品。由于工作繁忙, 李先生经常忘记按时服用, 系统就会在设定时间(比如早上7点和晚上7点)向李先生发送提示消息.

4. 药效反馈跟踪

我们还收集并分析用户对各类推介产品效果反馈数据,并根据数据进行持续优化和改进服务质量。这些信息都已经输入大模型,通过与模型对话进行提醒与减少风险。

实际场景示例:李先生在使用一段时间的药物后,可以在我们的系统中为这款药品打分和写下他的使用感受。这些信息将被用于改进我们的产品和服务,以更好地满足用户需求。

三、利用智能自助数据微调大模型

1.药品数据整理

为了使我们基于ChatGLM2-6b构建出来的智能自助用药管理系统更加适应实际需求,并且可以处理具体问题,我们需要使用真实世界中收集到的数据对模型进行微调。以下是一些样例数据:

prescription_iddrug_namedosagefrequencystart_dateend_datepatient_feedback
001阿莫西林500mg每日三次2023-01-052023-02-05胃部不适
002糖尿病药10mg每日一次2023-02-15--
003阿托伐他汀20mg每晚一次2023-01-152023-04-15效果显著
004降脂药_40mg每日一次2023-03-01-_ _偶有恶心
005奥美拉唑_ _20mg_每日一次__2023-03-05不限__胃部舒适
006抗抑郁药_ _50mg_每日两次___2023-02-10不限___偶有失眠
007维生素D_1000IU_每周两次_2023-01-30不限无显著改善

2.模型加载代码

import torch
from transformers import AutoTokenizer,AutoConfig, AutoModel, BitsAndBytesConfig

model_name_or_path = 'THUDM/chatglm2-6b' 
bnb_config=BitsAndBytesConfig(
            load_in_4bit=True,
            bnb_4bit_compute_dtype=torch.float16,
            bnb_4bit_use_double_quant=True, #QLoRA 设计的 Double Quantization
            bnb_4bit_quant_type="nf4", #QLoRA 设计的 Normal Float 4 量化数据类型
            llm_int8_threshold=6.0,
            llm_int8_has_fp16_weight=False,
        )
tokenizer = AutoTokenizer.from_pretrained(
    model_name_or_path, trust_remote_code=True) # cache_dir='./' 缓存到当前工作路径

model = AutoModel.from_pretrained(model_name_or_path,
                quantization_config=bnb_config,
                trust_remote_code=True)  # cache_dir='./'

模型测试:

text = '高血压主要的症状是什么'
response,history= model.chat(tokenizer,query=text,history=[])
print(response)

生成文本:

高血压(也称为高血压症或高血压)的主要症状包括:
高血压的典型症状是高血压,通常表现为持续的头痛、头晕、心悸、气短、耳鸣、视力模糊、失眠等。
高血压可能导致心绞痛或心肌梗塞,因此在某些情况下,高血压可能会引起严重的胸痛或呼吸困难。
高血压还可能导致动脉硬化和心血管疾病,如心肌炎、心律失常、中风等。
高血压的症状因个体差异、血压水平、心血管健康状况和病情严重程度而异,因此有些人可能没有明显的症状。

3.专项个人数据微调方案

添加大量用户专项数据,这里举个样例数据介绍:

keyword = '我的病情与药情况是什么样'

description = '''您目前患有高血压,糖尿病,慢性肾病,冠心病,目前用药情况:使用倍他乐克每天一次,硝苯地平每天一次,二甲双胍缓释片每天一次,我将根据您的病情给出病情管理方案,时刻关注您的用药情况'''

#对prompt使用一些简单的数据增强的方法,以便更好地收敛。
def get_prompt_list(keyword):
    return [f'{keyword}', 
            f'本人叫**,{keyword}?',
            f'{keyword},详细说一下?',
            f'介绍一下{keyword}',
            f'告诉我{keyword}?',
            f'想知道{keyword}',
            f'说一下{keyword}?',
           ]

data =[{'prompt':x,'response':description} for x in get_prompt_list(keyword) ]
dfdata = pd.DataFrame(data)
display(dfdata) 

4.大模型微调技巧:QLoRA

LoRA(Low Rank Adaption)是一种能够相比全参微调可以大幅节约训练时间和显存,同时微调效果基本可以相当于全参微调的算法。他其实是低秩适配方法, LoRA的思想非常简单,有些像SVD奇异值分解的想法。
在这里插入图片描述
而QLoRA并没有对LoRA的逻辑作出修改,而是通过将预训练模型量化为4-bit以进一步节省计算开销。QLoRA可以将650亿参数的模型在单张48 GB GPU上微调并保持原本16-bit微调的性能。QLORA的主要技术为:
(1)新的数据类型4-bit NormalFloat(NF4);
(2)双重量化(Double Quantization);
(3)分页优化器(Paged Optimizers)。其中分页优化器指在训练过程中显存不足时自动将优化器状态移至内存,需要更新优化器状态时再加载回来。

QLoRA中的量化过程:
NF4基于分位数量化构建而成,该量化方法使得使原数据经量化后,每 个量化区间中的值的数量相同。具体做法是对数据进行排序并找出所有 k k k分之一位数组成数据类 型(Data type)。对于 4 − b i t 4-bit 4bit来说, k = 2 4 = 16 k=2^4=16 k=24=16。然而该过程的计算代价对于大语言模型的参数来说是不可接受的。考虑到预训练模型参数通常呈均值为0的高斯分布,因此可以首先对一个标准高斯分布 N ( 0 , 1 ) N(0,1) N(0,1)按上述方法得到其 4 − b i t 4-bit 4bit分位数量化数据类型,并将该数据类型的值缩放至 [ − 1 , 1 ] [-1,1] [1,1]。随后将参数也缩放至 [ − 1 , 1 ] [-1,1] [1,1]即可按通常方法进行量化。该方法存在的一个问题是数据类型中缺少对0的表征,而0在模型参数中有着表示填充、掩码等特殊含义。接着分别对标准正态分布的非负和非正部分取分位数并取它们的并集,组合成最终的数据类型F4。

四、模型微调应用

import torch
from transformers import AutoTokenizer,AutoConfig, AutoModel, BitsAndBytesConfig

model_name_or_path = 'chatglm2-6b-medical'
config = AutoConfig.from_pretrained(model_name_or_path, trust_remote_code=True)
bnb_config=BitsAndBytesConfig(
            load_in_4bit=True,
            bnb_4bit_compute_dtype=torch.float16,
            bnb_4bit_use_double_quant=True, #QLoRA 设计的 Double Quantization
            bnb_4bit_quant_type="nf4", #QLoRA 设计的 Normal Float 4 量化数据类型
            llm_int8_threshold=6.0,
            llm_int8_has_fp16_weight=False,
        )
tokenizer = AutoTokenizer.from_pretrained(
    'THUDM/chatglm2-6b' , trust_remote_code=True) # cache_dir='./' 缓存到当前工作路径

model = AutoModel.from_pretrained(model_name_or_path,
                config=config,
                quantization_config=bnb_config,
                trust_remote_code=True)  # cache_dir='./'

text = '现在我的病情与药情况是什么样,详细说一下?'
response,history= model.chat(tokenizer,query=text,history=[])
print(response)

输出结果:
您目前患有高血压,糖尿病,慢性肾病,冠心病,目前用药情况:使用倍他乐克每天一次,硝苯地平每天一次,二甲双胍缓释片每天一次,我将根据您的病情给出病情管理方案,时刻关注您的用药情况。

text = '我用的的几种药,详细介绍一下?'
response,history= model.chat(tokenizer,query=text,history=[])
print(response)

输出结果:
1.倍他乐克(Betaloc)是一种β受体阻滞剂,主要用于治疗高血压、心绞痛和心律失常等心血管疾病。它的主要成分是美托洛尔(Metoprolol)。倍他乐克通过阻断β受体,减慢心率、降低血压和减少心脏的收缩力,从而达到控制心血管疾病症状的目的。
2.硝苯地平(Nitrendipine)是一种钙通道阻滞剂,属于二氢吡啶类药物。它主要用于治疗高血压和心绞痛。硝苯地平通过抑制细胞膜上的L型钙通道,阻断钙离子进入细胞,从而放松血管平滑肌,扩张血管,降低外周血管阻力,降低血压。
3.二甲双胍缓释片(Metformin Extended-Release Tablets)是一种口服降糖药物,广泛用于治疗2型糖尿病。它的主要成分是二甲双胍(Metformin),通过提高组织对葡萄糖的摄取和利用,减少肝脏对葡萄糖的合成,降低血糖水平。缓释片剂型使药物在胃肠道中缓慢释放,提供持续的药效,有助于控制血糖的稳定性。

以上是系统调取倍他乐克、硝苯地平、二甲双胍缓释片用药介绍数据。

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

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

相关文章

【Python自动化测试】mock模块基本使用介绍

mock简介 py3已将mock集成到unittest库中为的就是更好的进行单元测试简单理解,模拟接口返回参数通俗易懂,直接修改接口返回参数的值官方文档:unittest.mock --- 模拟对象库 — Python 3.11.4 文档 mock作用 解决依赖问题,达到解…

软件测试/测试开发 | AI大模型应用开发实训营来啦~ 大模型学习资料免费领

因为 AIGC 持续火热,越来越多的企业都需要借助大模型来为自己的业务赋能,也就是产出适合自己公司业务情况的智能化产品,这是目前程序员必须要面对的难题和挑战。如果要在企业内部落地相关引用,就需要员工具备响应的大模型应用开发…

LCR 101. 分割等和子集——力扣——背包问题、动态规矩

问题描述 代码展示 class Solution:def canPartition(self, nums: List[int]) -> bool:if len(nums) < 1:return Falsetotal_sum sum(nums)if total_sum % 2 ! 0: # 总和为奇数&#xff0c;无法分成两个相等的子集return Falsetarget_sum total_sum // 2dp [[False]…

el-tooltip内容换行显示

效果图&#xff1a; html: <div class"rules-tooltip flex-center"><el-tooltip class"item" effect"dark" placement"bottom-start"><div slot"content" v-html"tipsContent"></div>&l…

工具篇 | WSL使用入门教程以及基于WSL和natApp内网穿透实践 - 对比VMWare

介绍 在开发工具中&#xff0c;Windows Subsystem for Linux (WSL) 和 VMWare 它们都可以实现了在 Windows 上运行 Linux系统。 文章概览 WSL Vs VMWare 我们将简单比对 WSL 和 VMWare&#xff0c;在性能、资源消耗等方面的差异&#xff0c;以协助您做出更加明确的选择。 …

专业级操作,如何快速批量虚化多个视频的背景边框

如果你是一名视频编辑爱好者&#xff0c;或者是一名需要处理大量视频素材的专业人士&#xff0c;那么你可能会对如何快速处理和虚化视频的背景边框感到困惑。这里&#xff0c;我们就为你提供一种方法&#xff0c;使用固乔剪辑助手工具&#xff0c;你可以轻松实现批量虚化多个视…

ATA-8000系列射频功率放大器——应用场景介绍

ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W&#xff0c;饱和输出功率最大1000W。增益数控可调&#xff0c;一键保存设置&#xff0c;提供了方便简洁的操作选择&#xff0c;可与主流的信号发生器配套使用&#xff0c;实现射频信号的放大。 图&#xff1a;ATA-8000系…

Kubernetes基本概念简介

零 引入 在传统的应用程序部署中&#xff0c;需要手动配置和管理服务器、网络和存储等基础设施&#xff0c;并且随着应用程序规模的增长&#xff0c;管理复杂性也会大大增加。Kubernetes通过自动化和抽象化的方式&#xff0c;解决了这些挑战&#xff0c;使得应用程序可以以一种…

sdk下载慢的解决办法

Android studio版本&#xff1a;为Android Studio 4.1.1&#xff0c; 先完成Android Studio软件安装&#xff0c;打开Android Studio&#xff0c;点击File -> settings->Android SDK&#xff0c;按照开发需要安装sdk platform、SDK Tools工具。 sdk下载慢解决办法 1、…

Nuxt 菜鸟入门学习笔记六:路由

文章目录 路由 Routing页面 Pages导航 Navigation路由参数 Route Parameters路由中间件 Route Middleware路由验证 Route Validation Nuxt 官网地址&#xff1a; https://nuxt.com/ 路由 Routing Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目&#xff1a;Event Extraction as Question Generation and Answering 论文来源&#xff1a;ACL2023 论文链接&#xff1a;Event Extraction as Question Generation and Answering - ACL Anthology 代码链接&#xff1a;GitHub - dataminr-ai/Event-Extraction-as-…

PowerDsigner 数据库逆向pdm数模 常见数据库连接问题

本文章记录本人在使用powerdsigner工具&#xff0c;反向工程生成项目数据库表结构以及表关系的过程中遇到的两个常见问题。 问题1&#xff1a;Could not Initialize JavaVM 问题2&#xff1a;Non SQL Error : Could not load class oracle.jdbc.OracleDriver 环境&#xff1…

枚举enum

使用enum关键字定义提供枚举类的对象&#xff0c;多个对象用逗号分开&#xff0c;结尾用分号结束提供构造方法&#xff0c;给属性赋值使用public statiac final来修饰是属性提供get方法提供toString方法 public enum Season {SPRING("春天", "春暖花开"),…

都用HTTPS了,还能被查出浏览记录?

最近&#xff0c;群里一个刚入职的小伙因为用公司电脑访问奇怪的网站&#xff0c;被约谈了。他很困惑 —— 访问的都是HTTPS的网站&#xff0c;公司咋知道他访问了啥&#xff1f; 实际上&#xff0c;由于网络通信有很多层&#xff0c;即使加密通信&#xff0c;仍有很多途径暴露…

达梦数据库使用杂记

1、DM管理工具打开后一片白 这是因为上一次把对象导航窗口手动关闭了&#xff0c;后面再重新打开时默认就不显示了&#xff1b; 只需要到窗口-视图-对象导航 打开即可 2、 查询语句需要带表空间名&#xff0c;如&#xff1a;select * from "表空间名"."表名&…

混合IT基础设施的安全挑战与缓解策略

自从“身份是新的边界”这句格言问世以来&#xff0c;公司已经开始扩展他们的能力和运营&#xff0c;超越了基于本地、办公室基础设施的范围。采用云原生技术意味着组织正在寻求扩大传统工作流程&#xff0c;而无需投入时间和资源来建立物理数据中心和其他硬件基础设施。 身份…

2023版 STM32实战4 滴答定时器精准延时

SysTick简介与特性 -1- SysTick属于系统时钟。 -2- SysTick定时器被捆绑在NVIC中。 -3- SysTick可以产生中断,且中断不可屏蔽。 SysTick的时钟源查看 通过时钟树可以看出滴答的时钟最大为72MHZ/89MHZ 通过中文参考手册也可以得到这个结论 代码编写&#xff08;已经验证&a…

苹果曾考虑基于定位控制AirPods Pro自适应音频

在一次最近的采访中&#xff0c;苹果公司的高管Ron Huang和Eric Treski透露&#xff0c;他们在开发AirPods Pro自适应音频功能时&#xff0c;曾考虑使用GPS信号来控制音频级别。这个有趣的细节打破了我们对AirPods Pro的固有认知&#xff0c;让我们对苹果的创新思维有了更深的…

十三,打印辐照度图

上节HDR环境贴图进行卷积后&#xff0c;得到的就是辐照度图&#xff0c;表示的是周围环境间接漫反射光的积分。 现在也进行下打印&#xff0c;和前面打印HDR环境贴图一样&#xff0c;只是由于辐照度图做了平均&#xff0c;失去了大量高频部分&#xff0c;因此&#xff0c;可以…

unity 限制 相机移动 区域(无需碰撞检测)

限制功能原著地址&#xff1a;unity限制相机可移动区域&#xff08;box collider&#xff09;_unity限制相机移动区域_manson-liao的博客-CSDN博客 一、创建限制区域 创建一个Cube&#xff0c;Scale大小1&#xff0c;添加组件&#xff1a;BoxCollder&#xff0c;调整BoxColld…