前言

人工智能加医疗,有没有搞头?今天给大家介绍一个开源免费的人工智能医生——ChatDoctor
ChatDoctor是一款使用LLaMA模型并结合医学知识进行训练的医疗助手,研究人员先收集了50多万条真实医患对话,然后使用这些数据对LLaMA模型进行微调。
ChatDoctor不仅具备流畅的对话能力,在医疗领域的理解和诊断也达到了很高的水平。
你只需描述你的症状,ChatDoctor就会像真人医生一样询问其他症状与体征,然后给出初步诊断和治疗建议,而且完全开源免费!
当然,ChatDoctor只是一个AI助手,不能完全替代人医生,但在常见病症诊断方面,它已经表现已经非常不错了。

概述

ChatDoctor是一款下一代AI医生模型,基于LLaMA模型。该项目的目标是为患者提供智能且可靠的医疗伴侣,可以回答他们的医疗查询并提供个性化的医疗建议。
ChatDoctor是一个专门设计用于医疗应用的高级语言模型。它已经在大量医学文献上受过训练,深入理解医学术语、程序和诊断。该模型为ChatDoctor的基础,使其能够分析患者的症状和病历,提供准确的诊断和适当的治疗方案。
ChatDoctor模型旨在模拟医生和患者之间的对话,使用自然语言处理(NLP)和机器学习技术。患者可以通过聊天接口与ChatDoctor模型互动,询问有关健康、症状或医疗状况的问题。该模型将分析输入并提供针对患者独特情况的响应。
ChatDoctor模型的一个关键特征是其随着时间的推移学习和适应的能力。随着更多患者与模型互动,它将继续完善其响应并提高其准确性。这意味着随着时间的推移,患者可以期待获得越来越个性化和准确的医疗建议。

摘要

最近在通用领域的大型语言模型(LLM),如ChatGPT,在遵循说明和产生人性化响应方面显示出惊人的成功。但是,这样的语言模型尚未适用于医疗领域,导致响应的准确性较低,无法提供有关医疗诊断、药物等的可靠建议。为了解决这个问题,我们根据在线医疗咨询网站上的10万例实际患者-医生对话微调了我们的ChatDoctor模型。此外,我们向ChatDoctor模型添加了自主知识检索功能,例如,Wikipedia或疾病数据库作为知识大脑。通过使用这些10万例患者-医生对话微调LLM,我们的模型在理解患者需求和提供知情建议方面显示出显著改进。基于Wikipedia和数据库大脑的自主ChatDoctor模型可以实时访问权威信息,并根据此信息回答患者的问题,极大提高了模型响应的准确性,这显示出医疗领域具有低容错率的巨大潜力。

引言

遵循说明的大规模语言模型(LLM)的发展,如ChatGPT,由于在理解说明和生成人性化响应方面取得了惊人的成功,已 attract 注意。这些自回归LLM在预测下一个标记的基础上,在网上规模的自然语言上进行预训练,然后微调以遵循大规模人类说明。同时,它们在各种自然语言处理(NLP)任务上表现出稳健的性能,并推广到未见任务,展示了作为解决自然语言理解、文本生成和会话人工智能方面各种问题的统一解决方案的潜力。然而,尽管具有巨大潜力来转换医疗交流和决策,但在医疗领域探索这种通用域LLM相对较少被探讨\cite{gilson2023does}。原因是现有模型需要专门或详细地学习医疗领域,导致模型经常给出不正确的医疗响应。
通过在医生患者对话的数据上微调大型语言对话模型,模型理解患者需求的能力可以显著提高。此外,为了提高模型的可信度,我们还设计了一个基于Wikipedia和医疗领域数据库的知识大脑,它可以实时访问权威信息,并根据这些可靠信息回答患者的问题,这对容错率较低的医疗领域至关重要。通过广泛的实验,我们发现医生患者对话的微调模型在精度、召回率和F1方面超过ChatGPT。
此外,自主的ChatDoctor模型可以回答最新的医疗问题,如Mpox。由于大型语言模型如ChatGPT处于非开放源代码状态,我们使用了Meta的开源LLaMA。我们首先使用斯坦福大学Alpaca提供的5.2K个遵循说明的数据训练了一般对话模型。然后,我们在收集的医生患者对话数据集上微调该模型。我们的方法有三个主要贡献:
1. 我们为医疗领域的大型语言模型微调设计了一个框架。
2. 我们收集并公开发布了10万例患者-医生对话的数据集,用于微调大型语言模型。该数据集包含用于LLM医疗应用的广泛医疗专业知识。
3. 基于外部知识大脑,我们提出了一种具有在线分析新专业知识能力的自主ChatDoctor模型。

患者-医生对话数据集

微调的第一步是收集患者-医生对话的数据集。在患者-医生对话中,患者对疾病症状的描述通常是口语化和速成的。如果我们手动构建合成的患者-医生对话数据集,它经常会导致 diversify 不足和过度专业化的描述问题,这些描述常常与实际情况脱节。收集真实的患者-医生对话是一个更好的解决方案。
因此,我们从在线医疗咨询网站HealthCareMagic(www.healthcaremagic.com)收集了约10万例真实的医生-患者对话。我们通过手动和自动方式过滤这些数据,删除医生和患者的身份信息,并使用语言工具纠正语法错误,我们将这个数据集命名为HealthCareMagic-100k。
此外,我们从在线医疗咨询网站iCliniq收集了约1万例患者-医生对话来评估我们模型的性能。

基于知识大脑的自主ChatDoctor

配备外部知识大脑,即Wikipedia或我们构建的包含700多种疾病的数据库,ChatDoctor可以更准确地检索相应的知识和可靠来源来回答患者的询问。
在构建外部知识大脑后,我们需要让ChatDoctor自主地检索他需要的知识,这通常可以通过在大型语言模型中构建适当的提示来实现。
为了自动化这个过程,我们为ChatDoctor设计了关键词挖掘提示,以提取相关知识寻求的关键术语。
然后,与术语匹配检索系统从知识大脑中检索得分最高的相关段落。
对于疾病数据库,由于模型不能一次读入所有数据,我们首先让模型以批次方式读取数据,并为自己选择可能有助于回答患者问题的数据条目。
最后,模型选择的所有数据条目都提供给模型以作最终答案。这种方法可以更好地确保患者获得基于可信引用的知情和精确响应。

局限性

ChatDoctor仅用于学术研究,任何商业用途和临床用途都是禁止的。
这个决定有三个因素:
首先,ChatDoctor基于LLaMA,具有非商业许可,所以我们必然继承了这个决定。
其次,模型未经许可用于与医疗相关的目的。
另外,模型尚未设计足够的安全措施,当前模型仍无法保证医疗诊断的完全正确性。

ChatDoctor数据集

来自HealthCareMagic.com的10万例实际患者与医生之间的对话HealthCareMagic-100k
来自icliniq.com的1万例实际患者与医生之间的对话icliniq-10k
5k例由ChatGPT生成的患者与医生之间的对话GenMedGPT-5k疾病数据库
我们的模型首先通过斯坦福Alpaca的数据进行微调,具有一些基本的对话能力Alpaca

设置

在conda环境中安装了PyTorch后运行:

  1. pip install -r requirements.txt

交互演示页面

值得注意的是,我们的模型尚未达到100%准确的输出,请勿将其应用于真实临床场景。
对于想尝试在线演示的人,请注册 Hugging Face 并填写此表单链接。
由于像ChatGPT这样的大型语言模型处于非开源状态,因此我们使用Meta的LLaMA,首先使用斯坦福Alpaca提供的52K指令跟随数据训练了通用对话模型,然后在我们收集的医生-患者对话数据集上微调了该模型。我们方法的主要贡献是三重的:

我们设计了一个用于微调医疗领域中大型语言模型的流程框架。
我们收集了一个包含5,000个生成的医生-患者对话和200,000个真实的患者-医生对话的数据集,以微调大型语言模型。
我们验证了带有医学领域知识的微调二元组具有真正的临床潜力。

医生和病人对话数据集

建立医生和病人对话数据集的第一步是收集作为黄金标准的疾病数据库。因此,我们收集并整理了一个包含约700种疾病及其相关症状、医学检查和建议药物的数据库。为了在学术预算内训练高质量的对话模型,我们将疾病数据库中的每条信息单独输入ChatGPT API作为提示来自动生成指令数据。需要注意的是,我们向ChatGPT API提供的提示包含疾病、症状和药物的黄金标准,所以我们优化过的ChatDoctor不仅能够实现ChatGPT的对话流畅性,而且诊断准确度也更高。最后,我们收集了5K医生和病人对话指令,命名为InstructorDoctor-5K。
生成的对话在确保准确性的同时,对话多样性较低。因此,我们还从基于在线问答的医疗咨询服务网站“Health Care Magic”收集了约100k真实的医生和病人对话。我们手动和自动过滤这些数据,删除医生和病人的姓名,并使用语言工具纠正响应中的语法错误。

项目地址

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