ChatGLM-Med,HuaTuo,ChatDoctor

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.rhkb.cn/news/102329.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode150道面试经典题-- 二叉树的最大深度(简单)

1.题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 2.示例 3.思路 深度优先遍历 一个二叉树要查询到最大深度&#xff0c;可以将问题转为从根节点出发&#xff0c;查看左右子树的最大深度&am…

【核磁共振成像】傅里叶重建

目录 一、傅里叶重建二、填零三、移相四、数据窗函数五、矩形视野六、多线圈数据重建七、图像变形校正八、缩放比例九、基线校准 长TR&#xff0c;长TE&#xff0c;是T2加权像&#xff1b; 短TR&#xff0c;短TE&#xff0c;是T1加权像&#xff1b; 长TR&#xff0c;短TE&#…

TCP滑动窗口

为什么会有滑动窗口 在计算机网络中&#xff0c;数据通常被分成小块&#xff08;也叫数据段&#xff09;在网络中传输&#xff08;为什么会被分成小块&#xff0c;请了解拥塞窗口和流量控制&#xff09;。这些小块可能会在传输的过程中遇到延迟、丢失或乱序等问题。为了保证数据…

Mybatis之动态SQL及映射结果(带你了解动态SQL的魅力)

目录 前言 一、Mybatis之动态SQL 1. 简介 2. 作用及重要性 3. 应用场景 二、动态SQL讲解 1. 原生使用工具类&#xff08;BaseDao&#xff09;的SQL 2. 运用动态SQL编写方法 2.1 Mybatis动态SQL的常用标签 2.2 Mybatis动态SQL的常用函数 2.3 案例展示 if标签的运用 f…

angular中如何定义一个全局组件?

需求&#xff0c;我们需要新建一个navBreadcrumb的全局组件。这是一个面包屑导航&#xff0c;在不同的页面引入时传入一个路由数组即可。 第一步&#xff1a;我们新建这个组件&#xff1a; ng g c navBreadcrumb ng g m navBreadcrumb----------nav-breadcrumb.module-------…

AMBA总线协议(8)——AHB(六):分割传输

一、前言 在之前的文章中&#xff0c;我们重点介绍了AHB传输的仲裁&#xff0c;首先介绍了仲裁相关的信号&#xff0c;然后分别介绍了请求总线访问&#xff0c;授权总线访问&#xff0c;猝发提前终止&#xff0c;锁定传输和默认主机总线&#xff0c;在本文中我们将继续介绍AHB的…

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读

论文《LoRA: Low-Rank Adaptation of Large Language Models》阅读 BackgroundIntroducitonProblem StatementMethodology Δ W \Delta W ΔW 的选择 W W W的选择 总结 今天带来的是由微软Edward Hu等人完成并发表在ICLR 2022上的论文《LoRA: Low-Rank Adaptation of Large Lan…

交叉编译 libzdb

参考博客&#xff1a;移植libzdb3.2.2到arm_configure: error: no available database found or s_酣楼驻海的博客-CSDN博客 编译时间 2023-08-23 libzdb 下载&#xff1a; 源码访问如下&#xff1a; https://bitbucket.org/tildeslash/libzdb/src/master/ git 下载链接 …

低代码开发ERP:精打细算,聚焦核心投入

企业数字化转型已经成为现代商业环境中的一项关键任务。如今&#xff0c;企业面临着日益激烈的竞争和不断变化的市场需求。在这样的背景下&#xff0c;数字化转型不仅是企业生存的必然选择&#xff0c;也是取得竞争优势和实现可持续发展的关键因素。 在数字化转型的过程中&…

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务

[oneAPI] 基于BERT预训练模型的英文文本蕴含任务 Intel DevCloud for oneAPI 和 Intel Optimization for PyTorch基于BERT预训练模型的英文文本蕴含任务语料介绍数据集构建 模型训练 结果参考资料 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0…

3D数据转换工具HOOPS Exchange概览

HOOPS Exchange SDK是一组C软件库&#xff0c;使开发团队能够快速为其应用程序添加可靠的2D和3D CAD导入和导出功能。这允许访问广泛的数据&#xff0c;包括边界表示&#xff08;BREP&#xff09;、产品制造信息&#xff08;PMI&#xff09;、模型树、视图、持久ID、样式、构造…

使用 MATLAB 和 Simulink 对雷达系统进行建模和仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Redis多机实现

Background 为啥要有多机--------------1.容错 2.从服务器分担读压力。 主从结构一大难题------------如何保障一致性&#xff0c;对这个一致性要求不是很高&#xff0c;因为redis是用来做缓存的 同时我们要自动化进行故障转移-------哨兵机制&#xff0c;同时哨兵也可能cra…

使用mysql:5.6和 owncloud 镜像,构建一个个人网盘。

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 拉取mysql:5.6和owncloud的镜像和生成实例 [rootlocalhost ~]# docker pull mysql:5.6 [rootlocalhost ~]# docker pull ownclound [rootlocalhost ~]# docker run -d --name mydb1 --env MYSQL_ROOT_PASSWO…

智慧工地:安防监控EasyCVR智慧工地视频监管风险预警平台的应用

智慧工地方案是一种结合现代化技术与工地管理实践的创新型解决方案。它通过实时监控、数据分析、人工智能等技术手段&#xff0c;使工地管理更加高效、智能化。在建设智慧工地的过程中&#xff0c;除了上述提到的利用物联网技术实现设备互联、数据采集及分析以外&#xff0c;还…

python - 编程中【工厂模式】和【单例模式】区别以及代码示例详解

一. 概念 工厂模式和单例模式都是面向对象编程中常用的设计模式。 工厂模式&#xff08;FactoryPattern&#xff09;&#xff1a;是一种创建型模式&#xff0c;它提供了一种方法来创建对象&#xff0c;而不需要暴露对象的创建逻辑。这种模式通过定义一个工厂类&#xff0c;通…

远程端口转发 实践 如何将物理机某一端口的服务转发到vps上,使得外网能访问到

以本机1470端口&#xff08;我的sqli-labs&#xff09;与vps的9023端口为例。 SSH基本的连接命令是&#xff1a; ssh usernamehostname这里牵扯到了两台主机&#xff0c;一是执行命令、运行SSH客户端的主机&#xff0c;我们称为本地主机A【Host A】&#xff1b;二是接收连接请…

小程序运营方式有哪些?如何构建小程序运营框架?

​如今&#xff0c;每个企业基本都做过至少一个小程序&#xff0c;但由于小程序本身不具备流量、也很少有自然流量&#xff0c;因此并不是每个企业都懂如何运营小程序。想了解小程序运营方式方法有哪些&#xff1f; 在正式运营小程序前&#xff0c;了解小程序的功能与企业实际经…

Heikin Ashi最简单的一种烛台移动平均线

是不是每次进行交易的时候&#xff0c;市场上的各种新闻真真假假&#xff0c;搞的交易者每次都分不清楚&#xff0c;今天FPmarkets澳福给各位投资者推荐一种交易策略——“Heikin Ashi” “Heikin Ashi”只通过四个参数构建&#xff1a;开盘价、收盘价、最高价和最低价(最大和…

ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 开题报告内容&#xff1a;&#xff08;研究现状、目的意义&#xff1b;基本内容、研究方法、参考文献等。&#xff09; 研究现状 国外…