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

news2024/12/23 20:41:44

文章目录

  • 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.coloradmin.cn/o/1646908.html

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

相关文章

[Flutter]创建一个私有包并使用

在Flutter中创建一个自己的私有组件&#xff08;通常称为包或库&#xff09;&#xff0c;并通过Dart的包管理工具pub进行使用。 一、创建一个新的Flutter包 1.使用命令行创建 使用Flutter命令行工具来创建一个新的包&#xff1a; $ flutter create --templatepackage my_pri…

ECS弹性云服务器居然这么好用。

引言 在过去的十年里&#xff0c;云计算从一个前沿概念发展为企业和开发者的必备工具。传统的计算模型通常局限于单一的、物理的位置和有限的资源&#xff0c;而云计算则通过分布式的资源和服务&#xff0c;为计算能力带来了前所未有的"弹性"。 云弹性服务器——为什…

N9048B PXE EMI 测试接收机,1 Hz 至 44 GHz

​ _EMI_ N9048B EMI 测试接收机 1 Hz 至 44 GHz Keysight N9048B PXE 是一款符合标准的 EMI 测试接收机&#xff0c;配有射频预选器和 LNA 设计。其实时扫描&#xff08;RTS&#xff09;功能有助于您缩短总体测试时间&#xff0c;轻松执行无间隙的信号捕获和分析。 特点 …

【人工智能基础】GAN与WGAN实验

一、GAN网络概述 GAN&#xff1a;生成对抗网络。GAN网络中存在两个网络&#xff1a;G&#xff08;Generator&#xff0c;生成网络&#xff09;和D&#xff08;Discriminator&#xff0c;判别网络&#xff09;。 Generator接收一个随机的噪声z&#xff0c;通过这个噪声生成图片…

视频改字祝福 豪车装X系统源码uniapp前端小程序源码

视频改字祝福 豪车装X系统源码uniapp前端小程序源码&#xff0c;创意无限&#xff01;AI视频改字祝福&#xff0c;豪车装X系统源码开源&#xff0c;打造个性化祝 福视频不再难&#xff01; 想要为你的朋友或家人送上一份特别的祝福&#xff0c;让他们感受到你的真诚与关怀吗&am…

若依前后端分离部署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/; }

Rust Course学习(编写测试)

如果友友你的计算机上没有安装Rust&#xff0c;可以直接安装&#xff1a;Rust 程序设计语言 (rust-lang.org)https://www.rust-lang.org/zh-CN/ Introduce 介绍 Testing in Rust involves writing code specifically designed to verify that other code works as expected. It…

leetcode-岛屿数量-99

题目要求 思路 1.使用广度优先遍历&#xff0c;将数组中所有为1的元素遍历一遍&#xff0c;遍历过程中使用递归&#xff0c;讲该元素的上下左右四个方向的元素值也置为0 2.统计一共执行过多少次&#xff0c;次数就是岛屿数量 代码实现 class Solution { public:int solve(vec…

AWS宣布推出Amazon Q :针对商业数据和软件开发的生成性AI助手

亚马逊网络服务&#xff08;AWS&#xff09;近日宣布推出了一项名为“Amazon Q”的新服务&#xff0c;旨在帮助企业利用生成性人工智能&#xff08;AI&#xff09;技术&#xff0c;优化工作流程和提升业务效率。这一创新平台的推出&#xff0c;标志着企业工作方式的又一次重大变…

AIGC-音频生产十大主流模型技术原理及优缺点

音频生成(Audio Generation)指的是利用机器学习和人工智能技术&#xff0c;从文本、语音或其他源自动生成音频的过程。 音频生成行业是AIGC技术主要渗透的领域之一。AI音频生成行业是指利用人工智能技术和算法来生成音频内容的领域。按照输入数据类型不同可以分为&#xff1a;根…

multipass launch失败:launch failed: Remote ““ is unknown or unreachable.

具体问题情况如下&#xff1a; C:\WINDOWS\system32>multipass launch --name my-vm 20.04launch failed: Remote "" is unknown or unreachable.​C:\WINDOWS\system32>multipass lsNo instances found.​C:\WINDOWS\system32>multipass startlaunch fail…

[信息收集]-端口扫描--Nmap

端口号 端口号的概念属于计算机网络的传输层&#xff0c;标识这些不同的应用程序和服务而存在的。通过使用不同的端口号&#xff0c;传输层可以将接收到的数据包准确地传递给目标应用程序。 80&#xff1a;HTTP&#xff08;超文本传输协议&#xff09;用于Web浏览器访问网页 …

【论文泛读】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 数据驱动的坐标发现与方程发现算法。 想回答的问题很简单&#xff0c;“如何根据数据写方程”。 想想牛顿的处境&#xff0c;如何根据各种不同物体下落的数据&#xff0c;写出万有引力的数学公式的。这篇文章就是来做这件事的。当然&#xff0c;这篇论文并没有…

一文带你了解多数企业系统都在用的 RBAC 权限管理策略

前言 哈喽你好呀&#xff0c;我是 嘟老板&#xff0c;今天我们来聊聊几乎所有企业系统都离不开的 权限管理&#xff0c;大家平时在做项目开发的时候&#xff0c;有没有留意过权限这块的设计呢&#xff1f;都是怎样实现的呢&#xff1f;如果现在脑子里对于这块儿不够清晰&#…

作为全栈工程师,如何知道package.json中需要的依赖分别需要什么版本去哪里查询?

作为前端工程师&#xff0c;当你需要确定package.json中依赖的具体版本时&#xff0c;可以通过以下方法来查询&#xff1a; NPM 官网查询&#xff1a; 访问 npm 官网&#xff0c;在搜索框中输入你想查询的包名。在包的页面上&#xff0c;你可以看到所有发布过的版本号&#xff…

[leetcode] 63. 不同路径 II

文章目录 题目描述解题方法动态规划java代码复杂度分析 相似题目 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为…

PHP ASCII码的字符串用mb_convert_encoding 转utf-8之后不生效

检测数据类型是ascii,转码之后再检测还是utf-8没生效 private function toUTF8($str){$encode mb_detect_encoding($str, array("ASCII",UTF-8,"GB2312","GBK",BIG5,LATIN1));if ($encode ! UTF-8) {$str1 mb_convert_encoding($str, UTF-8, …

原生轮播图(下一页切换,附带指示器)

下面是目录结构&#xff1a; index.html <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" c…

迅雷永久破解

链接&#xff1a;https://pan.baidu.com/s/1ZGb1ljTPPG3NFsI8ghhWbA?pwdok7s 下载后解压 以管理员身份运行绿化.bat&#xff0c;会自动生成快捷方式&#xff0c;如果没有可以在program中运行Thunder.exe

车牌检测识别功能实现(pyqt)

在本专题前面相关博客中已经讲述了 pyqt + yolo + lprnet 实现的车牌检测识别功能。带qt界面的。 本博文将结合前面训练好的模型来实现车牌的检测与识别。并用pyqt实现界面。最终通过检测车牌检测识别功能。 1)、通过pyqt5设计界面 ui文件如下: <?xml version="1…