ChatGLM-Med,HuaTuo,ChatDoctor

news2025/1/11 3:52:46

ChatGLM-Med:基于中文医学知识的ChatGLM模型微调
HuaTuo:基于中文医学知识的LLaMA微调模型
ChatDoctor:基于常见医疗数据微调的LLaMA

目录

  • ChatGLM-Med
  • HuaTuo
  • ChatDoctor

ChatGLM-Med

模型为ChatGLM-6B,微调数据集为:医学知识图谱结合GPT3.5构建的中文医学指令数据集。基于相同的数据,训练LLaMA得到HuaTuo。

ChatGLM-Med的环境与ChatGLM-6B的环境一致。采用了公开和自建的中文医学知识图谱,主要参考了cMeKG(https://github.com/king-yyf/CMeKG_tools)。 KG围绕疾病、药物、检查指标等构建,字段包括并发症,高危因素,组织学检查,临床症状,药物治疗,辅助治疗等。知识图谱示例如下:

{
"中心词": "偏头痛", 
"相关疾病": ["妊娠合并偏头痛", "恶寒发热"], 
"相关症状": ["皮肤变硬", "头部及眼后部疼痛并能听到连续不断的隆隆声", "晨起头痛加重"], 
"所属科室": ["中西医结合科", "内科"], 
"发病部位": ["头部"]
}

利用GPT3.5围绕医学知识库构建问答数据,设置了多种Prompt形式来充分利用知识。指令微调数据集示例为:

问题: "一位年轻男性长期使用可卡因,突然出现胸痛、呕吐、出汗等症状,经检查发现心电图反映心肌急性损伤,请问可能患的是什么疾病?治疗方式是什么?"
回答: "可能患的是心肌梗塞,需要进行维拉帕米、依普利酮、硝酸甘油、ß阻滞剂、吗啡等药物治疗,并进行溶栓治疗、低分子量肝素、钙通道阻滞剂等辅助治疗。此外需要及时停用可卡因等药物,以防止病情加重。"

ChatGLM-Med的微调步骤如下(支持使用自己的数据集在ChatGLM-6B上微调),这里使用的是上面展示的数据集,首先获取ChatGLM-Med项目:

$ git clone https://github.com/SCIR-HI/Med-ChatGLM

参照https://github.com/THUDM/ChatGLM-6B,将原始模型参数放入model目录下。然后就可以执行指令微调:

$ sh scripts/sft_medchat.sh

根据实际情况调整batch size等超参,默认为ChatGLM-Med使用的参数。训练显存建议选择32G及以上。

如果想用自己的数据集继续指令微调(Instruct-tuning)ChatGLM,需要构建与data目录中训练集类似的文件格式进行。可以参照ChatGLM-Instruct-Tuning(https://github.com/thinksoso/ChatGLM-Instruct-Tuning)。

这里直接下载ChatGLM-Med微调后的模型:https://drive.google.com/drive/folders/1ZQSN56DloRGQ-Qj7IwzY4jV3ZHKMe9Bc,在infer.py中修改模型路径:

import torch
from transformers import AutoTokenizer, AutoModel
from modeling_chatglm import ChatGLMForConditionalGeneration
tokenizer = AutoTokenizer.from_pretrained(
    "/data/temp/ChatGLM-Med/", trust_remote_code=True)
model = ChatGLMForConditionalGeneration.from_pretrained(
    "/data/temp/ChatGLM-Med").half().cuda()
while True:
    a = input("请输入您的问题:(输入q以退出)")
    if a.strip() == 'q':
        exit()
    response, history = model.chat(tokenizer, "问题:" + a.strip() + '\n答案:', max_length=256, history=[])
    print("回答:", response)

HuaTuo

首先获取项目:

$ git clone https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese

用ChatGLM-Med相同的数据,微调LLaMA-7B,此外,HuaTuo收集了2023年关于肝癌疾病的中文医学文献,利用GPT3.5围绕医学文献的【结论】构建多轮问答数据。在data_literature/liver_cancer.json中提供了其中的1k条训练样例:

[
{"instruction": " <user>: 我听说免疫疗法是治疗晚期肝癌的一种很有效的方法,真的吗? <bot>: 是的,免疫疗法是一种新兴的治疗方法,它可以提高人体免疫系统对癌细胞的反应能力。对于晚期肝癌患者,免疫疗法已证明具有很高的治疗效果。 <user>: 但是,这是否适用于所有的肝癌患者?", 
"output": "不是所有的肝癌患者都适合进行免疫疗法。根据患者的临床表现和病情,医生会对患者进行评估,从而选择最适合的治疗方案。", 
"input": ""},
...
{"instruction": " <user>: 你好,请问你知道大黄虫丸治疗原发性肝癌的作用机制吗? <bot>: 对于大黄虫丸在原发性肝癌治疗中的作用机制,目前还没有明确的研究结果。但是,根据一些与其成份相关的研究,大黄含有大黄素等成分,可通过调节肝细胞凋亡、增殖等方式抑制肿瘤细胞的生长和扩散,达到一定的治疗效果。 <user>: 那这项研究中观察组的总有效率为什么高于对照组呢? <bot>: 观察组使用了大黄虫丸辅助肝动脉栓塞术进行治疗,相对于对照组仅仅行肝动脉栓塞术,大黄虫丸可能通过增强治疗的综合效果,促进肝癌的消退和治愈。同时,大黄虫丸可能还能够增强肝细胞的代谢和排毒能力,从而改善肝功能指标。 <user>: 这项研究中肝功能指标的差异对患者的治疗效果有何影响?", 
"output": "肝功能是评估患者病情和预后的重要指标,肝动脉栓塞术等治疗可能会对肝功能产生影响。观察组在治疗期间使用大黄虫丸进行辅助治疗,减轻了肝功能指标的恶化,可能对患者的长期预后产生积极的影响。", 
"id": 924, 
"input": ""}

直接获取已经训练好的LoRA权重:

$ git clone https://huggingface.co/thinksoso/lora-llama-med

上面是基于医学知识图谱构建指令再微调后的LoRA权重,还有基于医学文献的LoRA权重,基于医学文献的模型分为单轮或多轮脚本:

#基于医学知识库
$ bash ./scripts/infer.sh

#基于医学文献
#单轮
$ bash ./scripts/infer-literature-single.sh

#基于医学文献
#多轮
$ bash ./scripts/infer-literature-multi.sh

以基于医学知识库为例,修改 scripts/infer.sh 中的路径如下:

python infer.py \
    --base_model '/data/temp/llama-7b-hf' \
    --lora_weights '/data/temp/huatuo/lora-llama-med' \
    --use_lora True \
    --instruct_dir './data/infer.json' \
    --prompt_template 'med_template'

在基于医学知识图谱的HuaTuo微调指令数据集中,没有特别考虑多轮对话的history,所以,基于医学文献生成多轮对话数据后,能提高HuaTuo的多轮对话能力。


ChatDoctor

ChatDoctor是使用LLaMA模型并结合医学知识进行训练的医疗助手,研究人员先收集了50多万条真实医患对话,然后使用这些数据对LLaMA模型进行微调。用户只需描述症状,ChatDoctor就会像真人医生一样询问其他症状与体征,然后给出初步诊断和治疗建议。ChatDoctor是英文的医学问答LLM

fig1

ChatDoctor微调数据集包括:

  • 来自HealthCareMagic.com的10万例实际患者与医生之间的对话HealthCareMagic-100k(https://drive.google.com/file/d/1lyfqIwlLSClhgrCutWuEe_IACNq6XNUt/view
  • 来自icliniq.com的1万例实际患者与医生之间的对话icliniq-10k(https://drive.google.com/file/d/1ZKbqgYqWc7DJHs3N9TQYQVPdDQmZaClA/view
  • 5k例由ChatGPT生成的患者与医生之间的对话GenMedGPT-5k(https://drive.google.com/file/d/1nDTKZ3wZbZWTkFMBkxlamrzbNz0frugg/view)和疾病数据库(https://github.com/Kent0n-Li/ChatDoctor/blob/main/format_dataset.csv

首先获取项目:

$ git clone https://github.com/Kent0n-Li/ChatDoctor

项目中提供了两种微调方式:一种是全量微调,一种是基于lora的微调,我们使用LoRA在HealthCareMagic-100k上微调,占用显存11GB:

python train_lora.py \
  --base_model '/data/temp/llama-7b-hf' \
  --data_path 'HealthCareMagic-100k.json' \
  --output_dir './lora_models/' \
  --batch_size 1 \
  --micro_batch_size 1 \
  --num_epochs 1 \
  --learning_rate 3e-5 \
  --cutoff_len 256 \
  --val_set_size 120 \
  --adapter_name lora

然后用微调后的模型进行推理:

$ python chat.py

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

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

相关文章

uniapp使用uni.chooseLocation()打开地图选择位置

使用uni.chooseLocation()打开地址选择位置&#xff1a; 在Uniapp源码视图进行设置 添加这个属性&#xff1a;"requiredPrivateInfos":["chooseLocation"] ​ </template><view class"location_box"><view class"locatio…

repair taillights

自己修理汽车尾灯&#xff0c;可以根据型号去某宝买个回来自己安装&#xff1a;

【前端从0开始】JavaSript——js基础语法

1. JS基础语法 1.1. JS概念 JavaScript 是用于实现用户交互、动态控制文档的外观和内容, 动态控制浏览器操作、创建cookies等网页行为的跨平台、跨浏览器的由浏览器解释执行的客户端脚本语言。 js文档 1.2. 特点 是基于对象的弱类型语言 弱类型语言: 某一个变量被定义类型…

HDLBits-Verilog学习记录 | Verilog Language-Vectors(1)

文章目录 11.vectors | vector012.vectors in more detail | vector113.Vector part select | Vector214.Bitwise operators | Vectorgates15.Four-input gates | Gates416.Vector concatenation operator | Vector317.Vector reversal 1 | Vectorr18. Replication operator | …

石油和天然气行业如何实现数字化转型和工业4.0

石油和天然气行业的数字化转型正面临着前所未有的挑战和机遇。尽管过去相对滞后&#xff0c;这个复杂而庞大的行业正逐渐意识到数字化的紧迫性&#xff0c;以应对市场变化、降低运营成本、提高效率和确保可持续性。然而&#xff0c;数字化转型的进程并非一帆风顺&#xff0c;行…

字节跳动基于DataLeap的DataOps实践

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 本文根据 ArchSummit 全球架构师峰会&#xff08;深圳站&#xff09;来自抖音数据研发负责人王洋的现场分享实录整理而成&#xff08;有删减&#xff09;&#xff0…

高能预警!企业出海如何玩转数字营销?

现阶段&#xff0c;企业纷纷步入数字营销的浪潮。然而&#xff0c;数字营销并非一项易事。它需要企业在多个方面进行深入思考和全面规划。数字营销虽具有广阔的发展前景&#xff0c;但企业需投入大量精力和资源&#xff0c;才能实现可持续发展和成功。 其实&#xff0c;营销的…

Scikit-learn强化学习代码批注及相关练习

一、游戏介绍 木棒每保持平衡1个时间步&#xff0c;就得到1分。每一场游戏的最高得分为200分每一场游戏的结束条件为木棒倾斜角度大于41.8或者已经达到200分。最终获胜条件为最近100场游戏的平均得分高于195。代码中env.step&#xff08;&#xff09;&#xff0c;的返回值就分…

超全!年薪40w项目经理都在用的10个管理工具

大家好&#xff0c;我是老原。 今天的文章&#xff0c;当然还是干货为主。 这期给你安利一些免费、好用、高效、简洁的项目管理工具&#xff0c;这些工具都非常适合从事项目的打工人使用。 其实对于工作比较久的职场人来说&#xff0c;会有一个思维惯性&#xff0c;就是对免…

聚焦重要数据价值丨DolphinDB 降采样算法介绍

1. 绪论 在真实的业务场景中&#xff0c;时间序列数据具有以下特点&#xff1a; 采集频率&#xff08;秒级甚至毫秒级&#xff09;高&#xff0c;导致数据量非常庞大。数据价值密度低。 对数据进行合理的降采样不仅极大地可以降低系统压力、节约存储成本&#xff0c;同时也可…

基于Redhat8.5 部署zabbix5.4

仓库配置 本地源配置 mount /dev/sr0 /mnt //先挂载vim /etc/fatab //编辑挂载文件 以便于开机自动挂载/dev/sr0 /mnt iso9660 defaults 0 0mount -a 编辑yum 仓库 vim /etc/yum.repo.d/redhat.repo[BaseOS] namebaseos baseurlfile:///mnt/BaseOS gpgcheck0[AppS…

时空智友企业流程化管控系统文件上传漏洞

时空智友企业流程化管控系统文件上传漏洞 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现小龙poc检测脚本测试连接 六、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的…

Java“牵手”快手商品详情数据,根据商品ID获取快手商品详情数据接口,快手API接口申请指南

快手小店怎么查看宝贝详情 快手小店作为快手平台上的一个电商服务&#xff0c;让很多卖家可以方便地在快手上开设店铺&#xff0c;销售自己的商品。如果你是快手小店的卖家&#xff0c;你可能会想知道如何查看自己的宝贝详情&#xff0c;以便更好地管理自己的店铺。下面就让我…

2.文章复现《热电联产系统在区域综合能源系统中的定容选址研究》(附matlab程序)

0.代码链接 1.简述 光热发电是大规模利用太阳能的新兴方式&#xff0c;其储热系 统能够调节光热电站的出力特性&#xff0c;进而缓解光热电站并网带来的火电机组调峰问题。合理配置光热电站储热容量&#xff0c;能够 有效降低火电机组调峰成本。该文提出一种光热电站储热容 量配…

原生JS实现拾色器功能

没事儿干&#xff0c;写一个拾色器&#xff0c;原生 JS 实现&#xff0c;先看效果图&#xff1a; 一、写页面 <div class"circle"></div>.circle {width: 200px;height: 200px;border: 1px #999 solid;margin: 200px 0 0 200px;border-radius: 50%;back…

rust库学习-env_logger(actix-web添加彩色日志、rust添加彩色日志 )

文章目录 介绍actix-web启用彩色日志crate地址&json格式日志 我们在进行rust的web开发时&#xff0c;如果不指定日志&#xff0c;就不会有输出&#xff0c;非常不友好 这里我们使用env_logger进行日志打印 介绍 env_logger 需要配合 log 库使用, env_logger 是 Rust 社区…

23年5月软考电子版证书已上线!

首先恭喜一下&#xff0c;5月软考考试通过的小伙伴们&#xff0c;几个月的辛苦耕耘&#xff0c;终于得到了回报&#xff01;即日起&#xff0c;23年5月软考电子版证书已上线&#xff01;可以登录网址自行下载了&#xff01; 2023年5月软考电子版证书查询打印方法一&#xff1a…

USB Type-C端口集成式ESD静电保护方案 安全低成本

Type-C端口是根据USB3.x和USB4协议传输数据的&#xff0c;很容易受到电气过载&#xff08;EOS&#xff09;和静电放电&#xff08;ESD&#xff09;事件的影响。由于Type-C支持随意热插拔功能&#xff0c;其内部高集成度的芯片&#xff0c;更容易受到人体静电放电的伤害和损坏。…

【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?

文章目录 前言什么是二分查找算法1.二分查找1.1 题目要求1.2 做题思路1.3 Java代码实现 2.在排序数组中查找元素的第一个和最后一个位置2.1 题目要求2.2 做题思路2.3 Java代码实现 3.搜索插入位置3.1 题目要求3.2 做题思路3.3 Java代码实现 4.x的平方根4.1 题目要求4.2 做题思路…

2023年中,量子计算产业现状——

2023年上半年&#xff0c;量子计算&#xff08;QC&#xff09;领域取得了一系列重要进展和突破&#xff0c;显示出量子计算技术的快速发展和商业应用的不断拓展。在iCV TAnk近期发表的一篇报告中&#xff0c;团队从制度进步、产业生态、投融资形势、总结与展望四个方面对量子计…