HuatuoGPT,朝向驯服语言模型成为医生
来源:互联网
时间:2026-05-31 18:31:09
# HuatuoGPT:当ChatGPT遇上真实医生的临床智慧
医疗领域正在经历一场由大语言模型驱动的变革。但一个关键问题始终悬而未决:ChatGPT这样的通用模型,在医生诊室里能派上多大用场?答案是——远远不够。
## 摘要
本文介绍HuatuoGPT,一个专为医疗咨询设计的大型语言模型。其核心思路并不复杂:在监督微调阶段,同时引入ChatGPT的蒸馏数据和医生的真实临床数据。ChatGPT的回复通常详细、有条理、信息量大,但在综合诊断等环节上,它和真正的医生之间存在一道鸿沟。而医生的真实数据恰恰能填补这个缺口——它能把那些被蒸馏数据宠坏了的大语言模型“驯服”得像个真正的医生。
为了发挥两种数据的优势,我们构建了一个奖励模型,通过RLAIF(基于AI反馈的强化学习)让模型朝着两个方向对齐:既保留ChatGPT的表达能力,又学习医生的诊断思维。在评估方面,我们设计了包括自动指标和人工评估在内的全面方案。实验结果表明,HuatuoGPT在GPT-4评估、人工评估以及多个医疗基准数据集上,均取得了开源大语言模型中的最佳成绩。更值得注意的是,通过引入真实数据和RLAIF,蒸馏后的模型(即HuatuoGPT)在大多数场景下甚至超过了它的“老师”——ChatGPT本身。
代码、数据和模型均已开源,在线演示也已对外开放。
## 1 引言
### 医学与大语言模型的交汇
医学是人类生存的基石,但也是一门高度依赖经验的学科。经验丰富的医生和新手之间的差距,有时是生与死的距离。随着ChatGPT、DALLE这样的生成式AI出现,经验驱动的行业迎来了一个变革性时代。智能医学——或者说“数据驱动医学”——已经是一个不可阻挡的趋势,尽管随之而来的伦理问题同样不容忽视。
语言,在医生、研究人员和患者之间的互动中扮演着关键角色。巧合的是,大语言模型恰恰是以语言为驱动的。这为两者之间的结合提供了巨大的想象空间——通过在线方式,让全世界的人们能够平等地获取高质量的医疗资源。考虑到医疗资源在国家间、甚至一国内部都存在着巨大差异,这种技术有潜力从根本上缓解这些不平衡。每天,在欠发达地区,有数千人因医疗资源匮乏、救治不及时或费用高昂而失去生命,这令人心痛。LLM4Med有望改变这一现状。
### ChatGPT真的够用吗?
答案很直接:不够。
根据近期的研究,观察发现无论是ChatGPT还是GPT-4,在医学这样的垂直领域里表现都相对平庸。一个可能的原因是标注者在医学知识上的熟练度不足。此外,在线医学还面临着定制化和本地化的挑战——中医和西医的差异、印度医学和其他医学体系的差异,都不是一个通用模型能轻松应对的。把用户的医疗数据托付给私营公司也引发了隐私方面的担忧,私有部署的需求日益凸显。一个完全开源且具有商业可行性的医学ChatGPT,对个人福祉将大有裨益。
### LLM4Med能做什么?
LLM4Med的潜在用途覆盖了医疗咨询、分诊、诊断、开药、解读医疗报告等场景。简而言之,任何医疗或健康信息都可以整合到在线聊天过程中。这种模式的优势显而易见:
* **成本效益**:在线服务多个用户的边际成本,远低于服务单个用户的成本。这种可扩展性让模型训练完成后能以极低的成本大规模推广。
* **缓解医院拥堵**:最近的大流行病突显了医院过度拥挤的风险——许多人即使不需要紧急治疗也会涌向线下。在线问诊能有效分流,为医院减压。
* **克服心理障碍**:有些人因恐惧或迷信而逃避就医,这在中文里叫“讳病忌医”。在线聊天环境可能为这些人提供一个更舒适、更安全的空间。
### 我们在中国的实践:HuatuoGPT
中国的医疗不平等问题相当突出。一线城市与偏远地区的医疗条件差异显著——上海的平均预期寿命大约82岁,而贵州等经济相对落后的地区,这一数字显著下降到73岁。
我们的新模型命名为“HuatuoGPT”,以纪念那位传奇的古代名医华佗。与以往很多直接从真实医疗数据训练的语言模型不同,一个更简单的做法是从ChatGPT蒸馏数据——这能让模型快速学会流畅聊天和生成格式规整的回答。但在医疗领域,这条路行不通:
* ChatGPT在中文医疗场景下的表现并不理想。
* 出于伦理和安全考虑,ChatGPT会拒绝进行诊断和开药。
* ChatGPT无法像医生一样行动——即使患者的信息不足以做出判断,它也很少追问,而医生一定会问更多细节。ChatGPT给出的常常是泛泛的回应,而非专业的判断。
* 由于自回归模型的固有属性,ChatGPT很难避免编造信息。
为了解决这些问题,HuatuoGPT的核心思路是:在监督微调(SFT)阶段,同时使用来自医生的真实数据和来自ChatGPT的蒸馏数据。这两种数据都包含医疗指令数据和医疗对话数据。蒸馏数据让模型学会遵循指令和流畅对话;而真实医疗数据不仅注入医学知识,更重要的是教会模型像医生一样进行诊断、开药,提供精准的信息。这两种数据的互补性会在第2节详细讨论。
为了整合两种数据的优势、同时规避各自的短板,我们在SFT阶段之后设计了一套基于AI反馈的强化学习(RLAIF)方法。这套机制奖励那些既对患者友好(从ChatGPT学到的内容丰富、表达清晰、能遵循指令),又像专业医生一样诊断(从医生那里学到的专业和互动式问诊)的回复。技术上,我们用大语言模型对生成的回复打分,评估依据包括正确性、信息丰富度、逻辑一致性和诊断能力,从而使模型与ChatGPT和医生的优势对齐。
在评估方面,我们精心设计了一套涵盖自动评估和人工评估的方案。在自动评估中,使用GPT-4作为裁判,HuatuoGPT在来自CBLUE的100个问题(涵盖十种不同的医疗意图)上持续优于现有的中文医疗模型。更令人印象深刻的是,在大多数评估案例中,HuatuoGPT的表现超过了GPT-3.5-turbo。在多轮对话评估中,我们的模型在20个科室中超过60%的情况下明显优于ChatGPT。此外,HuatuoGPT在CmedQA、webmedQA和Huatuo26M等多个医疗基准数据集上均实现了最先进的性能。
为了确保评估的完整性和准确性,我们还纳入了人工评估,包括单轮和多轮对话场景。结果与自动评估一致,进一步证实了模型性能的可靠性。
### HuatuoGPT的核心贡献
* 第一个使用RLAIF同时利用真实数据和蒸馏数据(包括指令和对话数据)优势的医疗语言模型。
* 首批在医疗大语言模型领域进行系统性评估的工作之一。
* 人工评估显示,HuatuoGPT优于现有的开源大语言模型和ChatGPT(GPT-3.5-turbo),其性能最接近真实医生。
* 训练数据、代码、HuatuoGPT模型和奖励模型均已开源。
## 2 动机
### 跟人学,还是跟ChatGPT学?
纯粹从真实的医患对话中训练语言模型是一种常见的做法。但这存在一个核心问题——低质量数据。真实世界的回复可能信息量不足、简短、表达晦涩,而且不同数据之间存在的价值观冲突也未解决。与单纯从人类学习相比,这样训练出来的模型往往不够令人满意,尤其是和ChatGPT相比。
最近的研究倾向于从ChatGPT蒸馏模型,无论是通过模仿ChatGPT对单轮指令的回应,还是通过与人类互动聊天来学习。通过蒸馏,模型可以迅速获得令人印象深刻的指令遵循能力和流畅的对话技巧。此外,ChatGPT蒸馏出的数据多样性强、生成速度快,可以覆盖各种医疗对话——涵盖不同的疾病、症状和治疗方式。这种广泛性和多样性极大地提高了模型的泛化能力。
### 在医学领域,两个都要学
然而,从ChatGPT蒸馏的做法可能并不适合医学领域。原因在于ChatGPT的回复与医生的回复之间存在着根本性差距。蒸馏数据的质量可能起伏不定,表现为生成对话中的错误或模糊信息。与之对比,从真实医患互动中收集的真实数据,提供了实际医疗场景中不可或缺的视角——它准确反映了患者的真实意图分布,并包含了医生的准确诊断。真实数据的核心优势在于高度的准确性和专业性。
**医生的回复**:当患者咨询医生时,医生的回答通常展现出专业性,能针对个性化需求给出方案。他们擅长询问症状并给出准确诊断。但由于时间限制,医生的回复往往是非正式的、简洁的,有时甚至不连贯。初步研究发现,仅从医患互动数据训练会导致两个问题:第一,模型无法流畅地遵循各种指令或聊天;第二,回复简短、表达不佳、有时信息不足,对患者不够友好。
**ChatGPT的回复**:相比之下,ChatGPT通常生成信息丰富、表达清晰、逻辑严谨的回复。但它常常倾向于列举多种可能性,给出一般性、高层次的建议。它不会主动提问来引导患者描述症状,因此缺乏生成专业回复所需的患者输入。总而言之,它的回复缺乏医生所具备的上下文理解能力,结果就是——抽象的回应,对患者帮助有限。
### 我们的解决方案
综合这些挑战,我们决定把蒸馏数据(来自ChatGPT)和真实数据(来自医生)的优势结合起来。目标是让医疗大语言模型表现得像真正的医生——不仅提供详细、信息丰富、表达清晰的内容,还能进行准确且互动式的诊断,就像医生通常会追问问题一样。我们的方法首先在监督微调阶段混合蒸馏数据和真实数据,然后使用RLAIF来发挥两种数据的优势,同时减轻各自的弱点。
## 3 方法论
我们的方法通过两阶段训练策略,整合医生和ChatGPT的特点:先使用混合数据做监督微调,再通过AI反馈强化学习来提升回复质量。
### 使用混合数据的SFT
第一阶段,我们使用蒸馏数据和真实数据的混合,赋予模型医生般的专业性同时保持对患者友好的表达。在每个数据类别中,我们都收集了指令数据和对话数据,使模型既具备遵循指令的能力,又能进行互动式诊断。
**从ChatGPT蒸馏的指令**:遵循指令自我生成方法,我们构建了一套医疗指令数据,目的是让模型能够遵循用户的医疗指令。不同于以往的是,我们采用自上而下的方式创建更自然、更全面的回复。我们设计了一个分类体系,基于角色和使用场景收集或手动创建种子指令,然后用自我指令方法分别生成指令。最后将所有种子指令混合并再次执行自我指令,以获取更多样化的指令集。
**来自医生的真实指令数据**:真实指令数据来源于医生和患者之间的问答。医生的回复具有专业性、相关性高且简洁。我们对真实的医患问答对进行精炼,进一步提高单轮指令数据的质量和可靠性。
**从ChatGPT蒸馏的对话**:通过让两个ChatGPT分别扮演医生和患者角色,使用精心设计的提示词来生成合成对话。基于患者的背景和医生的最终诊断,两个ChatGPT逐轮生成对话内容。这样生成的回复通常信息丰富、详细、表达清晰且风格一致——对患者友好。
**来自医生的真实对话**:从真实场景中收集的医患对话,医生的回复往往需要多种能力——长程推理、提问引导患者描述症状等。但这类数据有时过于简洁和口语化。为了解决这个问题,我们利用语言模型基于原始内容进行增强和精炼,获得高质量的真实对话数据集。
### 使用AI反馈的强化学习
在SFT阶段,我们引入了多样化的数据集,使HuatuoGPT能够模仿医生的问诊和诊断策略,同时保留大语言模型回复的丰富性、逻辑性和连贯性。为了进一步调整模型生成的偏好,我们提出使用RLAIF来提高回复质量。
之前的研究引入了RLHF(基于人类反馈的强化学习)来让大语言模型与人类偏好对齐,但成本高昂,需要大量时间和人力。而后续研究证明,通过精心设计的提示,AI能够模仿人类偏好,为生成的回复给出相对一致的评分。受这些方法启发,我们设计了一套新流程,迫使模型生成信息丰富、逻辑严谨的回复,同时不偏离医生的诊断标准。
**奖励模型**:我们训练了一个奖励模型,使其与医生和大语言模型的特点对齐。使用真实指令和对话作为训练数据,从微调后的模型中采样多个回复。对于多轮对话,我们提供对话历史,让模型回复向医生对齐。这些回复由大语言模型(如ChatGPT)评分,考量标准包括信息性、连贯性、是否符合人类偏好以及基于给定医生诊断的事实准确性。然后使用这些配对的回复数据来训练奖励模型。
**强化学习**:在强化学习过程中,通过当前策略从给定查询中采样多个不同的回复。每个回复都通过奖励模型获得奖励分数。为了确保模型不会偏离初始状态太远,我们加入了经验估计的KL惩罚项。输入查询从剩余的SFT混合数据中去除重复并采样,在确保输入多样性的同时保留模型在单轮指令和多轮对话场景中的回复偏好。
## 4 实验
### 训练细节
我们的模型使用PyTorch实现,采用Accelerate和trlx包,以Bloomz-7b1-mt作为基础架构。利用ZeRO-3将模型分布在8个A100 GPU上进行训练。在监督微调中,学习率设为2e-5,批大小128,最大上下文长度2048。所有模型训练3个epochs,保留验证集上表现最好的权重。在强化学习中,只更新最后两层参数,总步数16,000,学习率8e-6。此外,为了增强模型在通用领域的对话和指令遵循能力,我们加入了中文指令数据(中文Alpaca数据集)和对话数据(ShareGPT),让模型能更有效地理解和生成在多种对话场景中的回复。
### 自动评估
**医学基准**:我们选择了三个现有的中文医学问答数据集——cMedQA2、webMedQA和Huatuo-26M,并与现有基线进行比较。cMedQA2包含108,000个问题和203,569个答案;webMedQA是从在线健康咨询网站收集的,包含63,284个问题;Huatuo-26M是目前最大的中文医学问答数据集,包含来自在线医疗咨询、知识库和百科全书的2600万对问答对。
**使用GPT-4评估**:我们针对不同意图的单轮问题和来自不同科室的多轮对话进行了自动化评估。
对于单轮问题,我们从CBLUE中的KUAKE-QIC验证集中提取了100个问题,涵盖10种意图(疾病诊断、病因分析、治疗方案、医疗建议、指标解释、疾病描述、后果描述、预防措施、疗效、医疗费用)。这些问题最初由ChatGPT评分,并经过人工筛选。对于多轮问题,我们使用了100个真实患者病例,覆盖20个科室。将这些病例提供给扮演患者的ChatGPT,与每个医生模型互动以获得诊断结果。
我们发现,使用GPT-4作为裁判来审查模型输出质量是有效的。我们提示它考虑医生般的语言、症状询问能力、治疗建议和处方的效果和可靠性,以及对患者的帮助程度。给定问题以及两个模型对应的答案,GPT-4先比较每个输出的优点并分析对患者的帮助程度,然后分别为每个回复评分。
我们主要比较了HuatuoGPT与两个最受欢迎的通用模型(ChatGPT和GPT-4)以及两个最具代表性的中文医疗大语言模型(BenTsao和DoctorGLM)。对于单轮问题,与所有四个模型进行比较;对于多轮对话,由于GPT-4的调用限制,只与DoctorGLM和GPT-3.5-turbo进行比较。
结果显示,在单轮问题评估中,根据GPT-4的评估,HuatuoGPT在所有类别中都比BenTsao和DoctorGLM表现更好。与GPT-3.5-turbo相比,HuatuoGPT在三个类别(指标解释、疾病诊断、医疗费用)中表现更佳,在两个类别(疗效、疾病描述)中表现相似。当然,在几乎所有类别中HuatuoGPT仍然不如GPT-4,但在两个类别(疗效、医疗费用)中达到了与GPT-4相似的性能。在多轮对话评估中,HuatuoGPT在超过60%的案例中总体性能超过了GPT-3.5-turbo。
### 人工评估
我们使用了100个KUAKE-QIC问题作为单轮测试集,并从自动评估中随机抽取了50个患者病例用于多轮对话的人工评估。评估由真正的医学专家进行,考虑三个核心方面:
* **诊断准确性**:评估模型在诊断患者症状时的准确性和全面性。
* **治疗建议准确性**:评估治疗建议的准确性和适当性,是否符合医学知识。
* **药物知识和处方准确性**:评估对药物的理解及处方建议的准确性。
医生被要求对不同的回复提供评估,每条回复严格打乱和匿名化。结果显示,HuatuoGPT在与BenTsao、DoctorGLM的对抗中表现非常出色,甚至略微超过了ChatGPT。多轮评估的结果更令人印象深刻——对DoctorGLM的胜率高达86%,对ChatGPT也达到了58%。这表明HuatuoGPT在患者咨询场景中具有更突出的交互式诊断能力。
## 5 讨论
### 消融研究
我们探索了两种数据类型对模型的影响。训练了两个不同的模型,分别只使用真实数据和只使用蒸馏数据。只使用真实数据的模型倾向于向患者提出澄清性问题,表现像真正的医生——但回复简短、内容不够有条理。只使用蒸馏数据的模型则生成了有条理、详细且信息丰富的内容——但更侧重于提供建议而不是做出诊断决定,更像一个“非医生的朋友”。
我们还比较了是否使用RLAIF的变种。不使用RLAIF的模型没有向患者提出额外问题,这可能是因为训练数据偏向于ChatGPT数据,而真实数据被忽视了。而使用RLAIF的HuatuoGPT可以通过向患者提出后续问题来获得更准确的诊断,真正像医生一样发挥作用。
### 局限性
需要强调的是,基于生成的医疗咨询存在潜在风险。最大的担忧在于验证生成内容的准确性和正确性的挑战。在医疗领域,误导信息的传播可能带来严重的伦理影响。尽管生成式问答已经展现出前景,但在生物医学领域的实际部署尚未完全准备就绪。在将这些模型部署到实际应用之前,必须谨慎行事。需要进一步的研究和完善,提高准确性,建立强大的准确性检查和错误更正机制。只有通过仔细审查和不断改进,才能最小化基于生成的医疗问答所关联的风险和伦理问题。
## 6 相关工作:医学领域的大语言模型
医学领域的语言模型一直是研究热点。早期的模型主要是基于GPT-2系列模型在域内继续预训练。BioMedLM是针对生物医学的特定领域大语言模型,在Pile数据集的PubMed摘要和PubMed Central部分上进行训练,包含约500亿个令牌。BioGPT则是中型的GPT-2模型,在官方PubMed网站收集的医疗数据上预训练。
近年来,许多研究尝试使用指令微调来增强大语言模型的医学咨询能力。MEDALPACA是在Medical Meadow上训练的LLaMA模型;ChatDoctor是在HealthCareMagic-100k数据集上训练的医学LLM,具有自主知识检索能力;Baize-healthcare是Baize的一个变体,在医疗数据上微调;Visual Med-Alpaca在LLaMA-7B模型上使用生成的数据集微调,并融入了视觉模态;Med-PaLM2基于PaLM2并在MultiMedQA上微调,达到了专家级别的医学问答水平。
在中国,DoctorGLM是基于ChatGLM训练的中文医学LLM;BenTsao是知识增强型中文医学LLM,通过ChatGPT API从CMeKG生成指令;MedicalGPT-zh是基于ChatGLM-6B LoRA的中文医学通用模型。
## 7 结论
本文提出了一套完整的方法,通过利用互补的数据源并融入AI反馈,使用强化学习训练了一个可靠且具有对话能力的医疗保健模型。这种方法解决了单纯依赖真实数据或合成数据的局限,创造了一个结合两种数据源优势的模型。通过不断根据反馈优化回复,模型在保持医疗应用所需可靠性的同时,提升了对话能力。这一领域的进一步研究,对于推进医疗领域的人工智能、改善患者结果,具有巨大的潜力。
## 附录:方法细节
### A.1 从ChatGPT蒸馏指令
遵循此前的工作,我们使用自我指令从ChatGPT生成指令,手动构建医疗种子指令。与原始的自我指令不同,我们生成了角色增强指令,用于生成带有角色设定的回复。例如,让模型假设自己是一位经验丰富的医生,对患者耐心且全面回答,语气温柔亲切——如果患者信息不足,要反问相关问题,诊断结束时还会给予额外建议。
### A.2 来自医生的真实指令
我们从网络收集真实的问答数据,抽样一组高质量的问答对用于训练。每一对问答都由大语言模型进行精炼,确保医生般温柔的语调和更详细的回复风格。
### A.3 与医生的真实对话
我们分别设定了患者和医生的角色提示。患者提示让AI以患者身份向智能医生咨询,确保多轮问诊过程简洁自然。医生提示则让AI扮演经验丰富的医生,对患者耐心回答、温柔亲切,主动追问以获取足够信息,做出诊断后给出额外详细建议。
### A.4 获取AI反馈的提示
我们设计了标准化的提示词,基于对话历史、用户问题、标准答案,从准确性、简洁性和与标准答案的相似性出发,对两个AI响应进行1到10分的评分。这为奖励模型的训练提供了可靠的人工标注替代方案。