大模型_基于医疗领域用lora微调ChatDoctor模型

文章目录

  • ChatDoctor
    • 目标
    • 方法
    • 结果
    • 结论
    • 收集和准备医患对话数据集
    • 创建外部知识数据库
    • 具有知识大脑的自主聊天医生的开发
    • 模型培训
    • 结果
    • 数据和模型:
  • 微调
  • 推理


ChatDoctor

目标

这项研究的主要目的是通过创建一个在医学建议中具有更高准确性的专业语言模型,来解决在诸如ChatGPT等流行的大型语言模型(LLM)的医学知识中观察到的局限性。

方法

我们通过使用来自广泛使用的在线医疗咨询平台的100000个医患对话的大型数据集来调整和完善大型语言模型元人工智能(LLaMA)来实现这一点。为了尊重隐私问题,这些对话被清理并匿名。除了模型的改进,我们还引入了一种自主的信息检索机制,使模型能够访问和利用维基百科等在线来源的实时信息以及精心策划的离线医疗数据库的数据。

结果

将模型与真实世界的医患互动进行微调,显著提高了模型了解患者需求和提供知情建议的能力。通过为该模型配备从可靠的在线和离线来源进行的自主信息检索,我们观察到其响应的准确性有了显著提高。

结论

我们提出的ChatDoctor代表了医学LLM的重大进步,表明在理解患者询问和提供准确建议方面有了重大改进。鉴于医疗领域的高风险和低容错性,这种提供准确可靠信息的增强不仅有益,而且至关重要。

收集和准备医患对话数据集

完善我们的模型的第一步涉及管理一个包括患者与医生互动的数据集。通常,患者用随意的、有点肤浅的语言描述自己的症状。如果我们试图像Alpaca一样综合生成这些对话,可能会导致过于具体的描述,其多样性和与现实世界的相关性有限。因此,我们选择收集真实的医患对话,从在线医疗咨询网站HealthCareMagic收集了约10万次此类互动。数据是手动和自动过滤的。具体来说,我们自动过滤掉了太短的对话,其中大多数都没有回答任何具有实际意义的问题。我们手动过滤了有错误的回复内容。为了维护隐私,我们删除了任何识别医生或患者的信息,并使用LanguageTool纠正任何语法错误。该数据集被标记为HealthCareMagic100k,如图1所示。我们还从另一个独立的在线医疗咨询网站iCliniq获得了大约1万次额外的对话,以测试我们模型的性能。iCliniq数据集是以分层方式随机选择的,以确保在各种医学专业中的代表性。还确保所选数据不包含可识别的患者信息,严格遵守隐私和道德标准。
在这里插入图片描述

创建外部知识数据库

LLM通常预测序列中的下一个单词,导致对问题的潜在不准确或错误回答(幻觉)。此外,该模型的输出在一定程度上是不可预测的,这在医学领域是不可接受的。然而,如果这些模型能够基于可靠的知识数据库生成或评估响应,则其准确性可以显著提高,如下图一所示。因此,我们策划了一个数据库(如下图二所示),包括疾病、其症状、相关的医学测试/治疗程序和潜在的药物。该数据库是ChatDoctor的外部和离线知识大脑。该数据库可持续更新,无需模型再培训,可针对特定疾病或医学专业进行定制。我们利用MedlinePlus构建了这个疾病数据库,但也可以使用其他可靠的来源。此外,像维基百科这样的在线信息源可以补充我们自主模型的知识库。值得注意的是,维基百科可能不是一个完全可靠的数据库,但我们的框架可以很容易地扩展到更可靠的在线数据库,如声誉良好的学术期刊。
在这里插入图片描述

在这里插入图片描述

具有知识大脑的自主聊天医生的开发

借助外部知识大脑,即维基百科或我们的自定义疾病数据库,ChatDoctor可以通过检索可靠的信息来更准确地回答患者的询问。在建立外部知识大脑后,我们设计了一种机制,使ChatDoctor能够自主检索必要的信息来回答问题。这是通过构建适当的提示来输入ChatDoctor模型来实现的。具体来说,我们设计了关键词挖掘提示(下图一),作为ChatDoctor从患者查询中提取关键术语以进行相关知识搜索的初始步骤。基于这些关键词,使用术语匹配检索系统从知识大脑中检索排名靠前的信息。给定LLM的单词限制(标记大小),我们将要阅读的文本划分为相等的部分,并根据关键词点击次数对每个部分进行排名。然后,ChatDoctor模型依次读取前N个部分(在我们的研究中使用了五个),通过提示选择并总结相关信息(下图二)。最终,模型处理并编译所有知识条目,以生成最终响应(下图三)。这种信息检索方法确保患者收到有可靠来源支持的准确、知情的回复,并可作为ChatDoctor根据先前知识生成的回复的验证方法。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

模型培训

我们使用Meta的可公开访问的LLaMA-7B模型[14]开发了ChatDoctor模型,该模型仅使用具有解码器结构的Transformers。尽管LLaMA模型具有相对适中的70亿个参数,但在几个NLP基准中,其性能与更大的GPT-3模型(具有1750亿个参数)相当。这种性能增强是通过使训练数据多样化而不是增加网络参数来实现的。我们使用HealthCareMagic-100k的对话,根据Stanford Alpaca[5]的训练方法对LLaMA模型[15]进行了微调。该模型首先根据Alpaca的数据进行了微调,以获得基本的会话技能,然后在HealthCareMagic-100k上使用6*A100 GPU进行了三个小时的进一步改进。训练过程遵循这些超参数:总批量为192,学习率为2×10−5,3个时期,最大序列长度为512个令牌,预热比为0.03,没有权重衰减。

结果

为了评估自主ChatDoctor模型的熟练程度,我们使用各种现代医学查询对其进行了测试。其中包括一个与“猴痘”(简称猴痘)有关的问题,如图7所示。猴痘最近于2022年11月28日被世界卫生组织(世界卫生组织)指定为猴痘,这使其成为一个相对新颖的术语。虽然ChatGPT无法提供令人满意的回应,但由于其自主知识检索功能,ChatDoctor能够从维基百科中提取有关猴痘的相关信息,并提供准确的答案。同样,如图8所示,对于更一般的医学查询,如“Otitis”,ChatDoctor能够在检索相关知识后提供可靠的响应。在另一个例子中,我们的模型在自主检索相关信息后,准确地解决了关于“Daybue”的问题,该药物于2023年3月获得了美国食品药品监督管理局的批准,证明了其优于ChatGPT,如图所示。
在这里插入图片描述

在这里插入图片描述

数据和模型:

1.聊天医生数据集:
您可以下载以下训练数据集

来自HealthCareMagic.com HealthCareMagic-100k的10万次患者和医生之间的真实对话。

来自icliniq.com icliniq-10k的患者和医生之间的10k真实对话。

5k生成了来自ChatGPT GenMedGPT-5k和疾病数据库的患者和医生之间的对话。

我们的模型首先根据Stanford Alpaca的数据进行了微调,使其具有一些基本的会话能力。羊驼链接

微调

下载项目地址

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

切换项目路径

cd ChatDoctor

切换chatdoctor环境

source activate
conda env list
conda activate chatdoctor

全量微调(官方版本)

torchrun --nproc_per_node=4 --master_port=<your_random_port> train.py \--model_name_or_path <your_path_to_hf_converted_llama_ckpt_and_tokenizer> \--data_path ./HealthCareMagic-100k.json \--bf16 True \--output_dir pretrained \--num_train_epochs 1 \--per_device_train_batch_size 4 \--per_device_eval_batch_size 4 \--gradient_accumulation_steps 8 \--evaluation_strategy "no" \--save_strategy "steps" \--save_steps 2000 \--save_total_limit 1 \--learning_rate 2e-6 \--weight_decay 0. \--warmup_ratio 0.03 \--lr_scheduler_type "cosine" \--logging_steps 1 \--fsdp "full_shard auto_wrap" \--fsdp_transformer_layer_cls_to_wrap 'LLaMADecoderLayer' \--tf32 True

用lora微调(官方版本)

WORLD_SIZE=6 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5 torchrun --nproc_per_node=6 --master_port=4567 train_lora.py \--base_model './weights-alpaca/' \--data_path 'HealthCareMagic-100k.json' \--output_dir './lora_models/' \--batch_size 32 \--micro_batch_size 4 \--num_epochs 1 \--learning_rate 3e-5 \--cutoff_len 256 \--val_set_size 120 \--adapter_name lora

用lora微调(本项目实际运行版本)

nohup python train_lora.py \--base_model '/data/sim_chatgpt/llama-7b-hf' \--data_path 'chatdoctor5k.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 \>> log.out 2>&1 &

在这里插入图片描述

推理

修改chat.py

load_model("/data/sim_chatgpt/chatdoctor")

执行文件

python3 chat.py

在Patient处输入: Doctor, I have been experiencing sudden and frequent panic attacks. I don’t know what to do.
在这里插入图片描述

后面再接着问
在这里插入图片描述

若遇见该类错误:ImportError: LlamaConverter requires the protobuf library but it was
not found in your environment.

执行该代码操作试下即可解决

pip install protobuf==3.19.0

学习的参考资料:

ChatDoctor项目地址
ChatDoctor: A Medical Chat Model Fine-Tuned on a Large Language Model Meta-AI (LLaMA) Using Medical Domain Knowledge
ChatDoctor: A Medical Chat Model Fine-tuned on LLaMA Model using Medical Domain Knowledge
基于医疗领域数据微调LLaMA——ChatDoctor模型

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

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

相关文章

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代&#xff0c;随着人们购物习惯的转变&#xff0c;传统的实体商店已经无法满足人们日益增长的在线购物需求。因此&#xff0c;基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的运动用品商城项目应运而生&#xff0…

最原理的一集——Mathtype公式编号设置(Mathtype7.8+Word)

版本 Mathtype7.8Office2019 Word 读完本文你将会 随心所欲&#xff0c;想怎么给公式编号就怎么给公式编号&#xff0c;想从(X.1)开始&#xff0c;就从(X.1)开始大概了解Mathtype公式设置原理给作者点赞 如果你想自己跟着文章做的话 请不要在自己的论文里边直接操作&#…

【6D位姿估计】数据集汇总 BOP

前言 BOP是6D位姿估计基准&#xff0c;汇总整理了多个数据集&#xff0c;还举行挑战赛&#xff0c;相关报告被CVPR2024接受和认可。 它提供3D物体模型和RGB-D图像&#xff0c;其中标注信息包括6D位姿、2D边界框和2D蒙版等。 包含数据集&#xff1a;LM 、LM-O 、T-LESS 、IT…

Python数据清洗与可视化实践:国际旅游收入数据分析

文章目录 概要整体流程名词解释NumPyPandasMatplotlibre 技术细节数据清洗可视化 小结 概要 在本篇博客中&#xff0c;我们将通过一个实际的案例&#xff0c;演示如何使用Python进行数据清洗和可视化&#xff0c;以分析国际旅游收入数据。我们将使用Python中的Pandas库来进行数…

磐石云最版本使用教程

磐石云外呼系统是一款集成了呼叫平台、电话线路和话术系统的软件&#xff0c;旨在提高企业的电话营销效率。以下是磐石云外呼系统的基本操作步骤&#xff1a; 安装和配置&#xff1a; 首先需要在Linux操作系统上安装磐石云外呼系统&#xff0c;通常需要至少4核CPU、8GB内存以及…

软件设计师-应用技术-数据库设计题2

基础知识及技巧&#xff1a; 1. 数据库设计过程&#xff1a; 四个阶段&#xff1a;需求分析、概念结构设计、逻辑结构设计、物理设计。每个阶段的产物&#xff1a; 需求分析&#xff1a;数据流图、数据字典、需求说明书。概念结构设计&#xff1a;ER模型逻辑机构设计&#xf…

设计模式之传输对象模式

在编程江湖里&#xff0c;有一种模式&#xff0c;它如同数据的“特快专递”&#xff0c;穿梭于系统间&#xff0c;保证信息的快速准确送达&#xff0c;它就是——传输对象模式&#xff08;Data Transfer Object, DTO&#xff09;。这不仅仅是数据的搬运工&#xff0c;更是提升系…

设置定位坐标+请按任意键继续

设置定位坐标 目的 在编程和游戏开发中&#xff0c;设置定位坐标的目的是为了确定对象在屏幕或游戏世界中的具体位置。坐标通常由一对数值表示&#xff0c;例如 (x, y)&#xff0c;其中 x 表示水平位置&#xff0c;y 表示垂直位置。设置定位坐标的目的包括&#xff1a; 1. **精…

如何快速掌握DDT数据驱动测试?

前言 网盗概念相同的测试脚本使用不同的测试数据来执行&#xff0c;测试数据和测试行为完全分离&#xff0c; 这样的测试脚本设计模式称为数据驱动。(网盗结束)当我们测试某个网站的登录功能时&#xff0c;我们往往会使用不同的用户名和密码来验证登录模块对系统的影响&#x…

软考之零碎片段记录(二十九)+复习巩固(十七、十八)

学习 1. 后缀式&#xff08;逆波兰式&#xff09; 2. c/c语言编译 类型检查是语义分析 词法分析。分析单词。如单词的字符拼写等语法分析。分析句子。如标点符号、括号位置等语言上的错误语义分析。分析运算符、运算对象类型是否合法 3. java语言特质 即时编译堆空间分配j…

引领智算变革,九章云极DataCanvas公司激活油气行业新质生产力

近日&#xff0c;“2024中国石油石化企业信息技术交流大会暨油气产业数字化转型高峰论坛”在京成功举办&#xff0c;九章云极DataCanvas公司携“油气行业AI智算服务全栈解决方案”震撼亮相&#xff0c;为油气行业数智化转型和新质生产力发展提供领先的技术视角和前瞻实战经验分…

C++手写协程项目(协程实现线程结构体、线程调度器定义,线程挂起函数、线程切换函数、线程恢复函数、线程结束函数、线程结束判断函数,模块测试)

协程结构体定义 之前我们使用linux下协程函数实现了线程切换&#xff0c;使用的是ucontext_t结构体&#xff0c;和基于这个结构体的四个函数。现在我们要用这些工具来实现我们自己的一个线程结构体&#xff0c;并实现线程调度和线程切换、挂起。 首先我们来实现以下线程结构体…

python安装问题及解决办法(pip不是内部或外部命令也不是可运行)

pip是python的包管理工具&#xff0c;使python可在cmd&#xff08;命令行窗口&#xff0c;WinR后输入cmd&#xff09;中执行 针对 “pip不是内部或外部命令也不是可运行” 问题&#xff0c;需要在安装的时候将python添加到环境变量中 上图第三个选项必须勾选才能在cmd中使用pi…

LLVM的ThinLTO编译优化技术在Postgresql中的应用

部分内容引用&#xff1a;https://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html LTO是什么&#xff1f; 链接时优化&#xff08;Link-time optimization&#xff0c;简称LTO&#xff09;是编译器在链接时对程序进行的一种优化。它适用于以文件为单位编译…

触摸OpenNJet,感悟云原生

小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性&#xff0c;加快开发和部署速度&#xff0c;降低成本&#xff0c;提升整体的效率和竞争力。通过采用云原生技术&a…

mysql使用索引。并未命中

今天在给项目看板查询语句增加索引的时候&#xff0c;发现了一个很有趣的问题。如下&#xff1a; 我这样创建索引&#xff0c;就可以使用&#xff0c;但是我另外一个查询语句&#xff0c;需要使用到factory_id和plan_start_date。于是我就移动了索引顺序&#xff0c;这样遵守左…

若依前后端分离部署nginx

1、v.sj 2、生产环境修改 3、退出登录修改 4、路由改为hash模式 5、nginx配置 location /gldhtml/ {alias D:/java/tool/nginx-1.19.6/project/jxal/html/; } location /jxal/ {proxy_pass http://localhost:8081/; }

蓝牙连接手机播放音乐的同时传输少量数据,那些蓝牙芯片可以实现呢

简介 蓝牙连接手机播放音乐的同时连接另一蓝牙芯片传输少量数据&#xff0c;那些蓝牙芯片可以实现呢&#xff1f; 这个需求&#xff0c;其实就是双模的需求 简单描述就是:播放音乐的同时&#xff0c;还可以连接ble&#xff0c;进行数据的传输。二者同时进行&#xff0c;互不…

标准IO学习

思维导图&#xff1a; 有如下结构体 struct Student{ char name[16]; int age; double math_score; double chinese_score; double english_score; double physics_score; double chemistry_score; double bio_score; }; 申请该结构体数组&#xff0c;容量为5&#xff0c;初始…

uniapp 应用闪退、崩溃异常日志捕获插件(可对接网络上报)插件 Ba-Crash

应用闪退、崩溃异常日志捕获插件&#xff08;可对接网络上报&#xff09; Ba-Crash 简介&#xff08;下载地址&#xff09; Ba-Crash 是一款uniapp应用闪退、崩溃异常日志捕获插件&#xff0c;支持对接网络上报、设置提示等等&#xff0c;方便对一些远程问题、原生问题进行分…