查看原文
其他

中文医疗大模型的2W1H分析

zhpmatrix KBQA沉思录 2024-04-15

        围绕中文医疗大模型,之前应用侧讨论过的文章,包括关于hippocratic.ai和glass.health的产品讨论《ChatGPT在医疗NLP场景的应用》《记一次ChatGPT的应用探索与实践》《ChatGPT在医疗行业的探索与实践》是一次更大范围的思考尝试,模型侧讨论的文章,包括《关于医疗LLM的随笔》等。

        经过过去一段时间的实践和探索,这篇文章将进一步思考这件事情背后的Why,What和How。

为什么要做中文医疗大模型?这里可以分为三个子问题。分别是:

为什么要做大模型?

为什么要做中文大模型?

为什么要做中文医疗大模型?

在《Scaling Laws for Neural Language Models》这篇文章中讨论到关于语言模型的性能的scaling laws(以ce loss作为基准),loss与模型大小,数据集大小和用于训练的计算总量呈幂律分布。意味着做大模型,很有可能能够解决很多的问题。

实际上,在ChatGPT之前,大模型的工作已经在展开。ChatGPT是将大模型的概念真正意义上传输到几乎每一个用户身上。

针对中文大模型,国外团队做的multilingual的大模型,比如ChatGPT已经具备足够好的中文能力,至今没有国内的某一个团队能够持平。可能的原因包括:

(1)ChatGPT的训练数据中存在中文-英文的平行语料

(2)如果说ChatGPT的推理能力来自代码学习,那么中文推理能力则与代码注释相关

(3)multilingual条件下跨语种迁移能力

所谓中文医疗大模型,是相比ChatGPT这种通用大模型之外的,专用行业大模型的一个具体实现。那么,ChatGPT直接用在医疗行业有什么问题?

(1)特定问题下,效果不符合预期。实际上,即使非特定问题下,ChatGPT也具有各种各样的效果问题,但并不妨碍依然是一个足够强大的模型。特定问题的特点是:专业壁垒高,业务属性强,强知识依赖

(2)没有支持私有化部署的大模型。ChatGPT是公有服务调用,但是医疗数据不能出医院,意味着无法直接调用ChatGPT的服务能力。

因此,效果和安全正是中文医疗大模型要解决的核心问题。除此之外,如果非要加一条,那就是提升研发效能。在大模型时代之前,一个问题的解决可能依赖N个模型,进入大模型时代,理论上N个问题,只需要一个模型。

至于股价提振,占坑圈地等动机并不在本文的讨论范围之内。

那么中文医疗大模型到底是什么?

讨论这个问题时的感觉和两年多以前讨论CDSS是什么很接近。延续之前的思路,尝试从功能范围来考虑,而功能范围取决于要支撑的业务场景。回到传统的算法价值链路,一种是直接面向具体业务场景,提供一个具有较强业务属性的算法能力;另一种是作为一个中间能力,带来间接业务价值。类比业务算法和中台算法。以智能分诊的场景为例,给定Query,通过分类给出挂号科室,是前者;为了更好地实现分诊,利用信息抽取服务抽取Query中的症状实体和属性是后者。这里的问题是:如果前者足够强,是不是就不需要后者了?理论上是的,但是直觉告诉我们还是需要后者的能力能够在其他地方使用,比如知识图谱的构建。

换一个角度,假设今天已经有一个中文医疗大模型,业务上会怎么使用?可能的方式包括:

(1)技术改造。已经有一套算法的服务体系在支撑线上应用,采用大模型实现服务体系在点上的能力的替换,实现更好地效果提升。

(2)技术升级。实现基于大模型技术的全面技术重构。

(1)和(2)的思路是用新技术解决老问题,那么新技术自然要解决新问题?如下:

(3)新技术应用。比如开始实质性推进文本改写,辅助写作等类型的任务。

从这个角度看,(3)比较接近上文中的前者,(1)和(2)更加接近后者。由此,可以得到中文医疗大模型的概貌,如下图所示。

这里需要强调的是,对话也许并不是大模型的必备能力,虽然GPT-3.5通过Chat的能力得到了ChatGPT,但是这并不能形成事实上的标准。

围绕具体任务组件,可能的一种实现是:针对每个任务采用高效微调的方法,在预测时对不同任务调用不同的高效微调模块(比如LoRA等)。

进一步的,会不会是这样?


回归价值本身,对于多数场景下,用户更加关心地是问题有没有得到解决,至于解决的方法是不是中文医疗大模型,也许并不重要。在主流叙事的背景下,有了更好,如果没有,理论上问题也不大。但是,对于新问题要得到解决,大概率技术侧还是会落在大模型的方向上。

以上讨论只是一个非常粗浅的理解,需要持续思考并完善。有了中文医疗大模型的概貌,接下来需要讨论的是,

怎么做

首先看下已经有的工作。

商汤的商量-大医[1]。基于海量医学知识真实医患互动对话数据构建,支持导诊、问诊、健康咨询、辅助决策等多场景多轮会话。暂没有访问方式,故不做讨论。

DoctorGLM[2]。基于ChatGLM-6B的中文问诊模型。主要技术思路如下:


抛开效果不谈,这里的技术点包括:将英文医患对话数据翻译为中文对话数据,通过抽取组件完成对Query的结构化,强化Prompt的表达能力,理论上进一步提升模型输出效果。数据侧,获取一定数量的中文医患对话数据,在今天并不困难。

MedicalGPT-zh[3]。中文医疗对话语言模型,基于ChatGLM-6B的模型。抛开效果不谈,这个工作比较有启发的地方在于训练数据的构建。数据集分为两个部分,分别是知识问答和情景对话。知识问答的数据是基于中文医疗共识和临床指南,采用self-instruct的方式构建的共计28个科室的数据。情景对话基于ChatGPT采用自动化的构建方式,覆盖16种常见情景,包括治疗方案,预防措施等。具体如下:


本草[4]。之前的名字叫做华驼。该工作共有两个版本,分别是基于中文医疗知识的ChatGLM模型和LLaMa模型。暂且不谈效果,这里比较有启发的是训练数据集的构建。包含两种方式,一种方式是采用self-instruct的方式,利用知识图谱,构建问答语料。知识图谱的数据如下:

{"中心词": "偏头痛", "相关疾病": ["妊娠合并偏头痛", "恶寒发热"], "相关症状": ["皮肤变硬", "头部及眼后部疼痛并能听到连续不断的隆隆声", "晨起头痛加重"], "所属科室": ["中西医结合科", "内科"], "发病部位": ["头部"]}

最后得到用于指令微调的数据如下:

"问题:一位年轻男性长期使用可卡因,突然出现胸痛、呕吐、出汗等症状,经检查发现心电图反映心肌急性损伤,请问可能患的是什么疾病?治疗方式是什么?" 回答: 可能患的是心肌梗塞,需要进行维拉帕米、依普利酮、硝酸甘油、ß阻滞剂、吗啡等药物治疗,并进行溶栓治疗、低分子量肝素、钙通道阻滞剂等辅助治疗。此外需要及时停用可卡因等药物,以防止病情加重。"

另一种方式是收集2023年关于16种疾病的中文医学文献(比如肝癌等),利用GPT3.5接口,采用文献的【结论】部分作为上下文,生成围绕医学文献的多轮问答数据。如下:

ChatDoctor[5]。英文版,一个基于LLaMA的在医疗领域的大模型。ChatDoctor首先基于Alpaca的数据集微调了LLaMA,因此也可以认为是将Alpaca作为基础模型,另外构建了200k+15k+5k的患者和医生的对话数据作为微调数据。在国内,一种是人工构造数据,另外一种非人工的对话数据获取可以使用好大夫等网站的问诊数据,如果对标ChatDoctor,大概率能够获取相同数量级的数据。训练流程和上述的工作类似,如下:

在预测阶段,根据输入,首先会通过检索知识大脑(比如知识图谱)和维基百科,获取相关的知识,之后将相关知识和输入通过构建精巧的Prompt作为模型的输入,返回最终的预测结果。这个阶段和DoctorGLM存在异曲同工之妙。

LMFlow[6]。英文版,基于PubMedQA和MedMCQA构建了instruction数据集,使用8*A100,微调约16个小时得到LLaMA-33B(LoRA)模型,在医疗问题上的效果优于ChatGPT。基于对话构建数据集的时候,需要思考当前数据集是否适合构建instruction,比如第一届智能对话诊疗评测比赛的数据是否能用?如何使用?作为对比,CBLUE中的医学段落检索的任务数据在使用的时候似乎更加地直接,其他的数据集需要进一步思考。

Baize[7]。英文版。模型调优的数据来自Quora和Medical对话,基于LLaMA-7B微调得到。

Med-PaLM[8]。英文版,Google的工作。在PaLM的基础上加了instruction prompt tuning,具体工作见《Large Language Models Encode Clinical Knowledge》,不是很常见。

Visual-Med-Alpaca[9]。英文版,在文本侧,基于gpt-3.5 turbo和human共同合作构建的指令数据集。支持多模态的问答,不过多模态并非通过一个主干模型完成,而是采用类似于Visual ChatGPT和HuggingGPT一样的方式,通过整合已有视觉模型来共同完成。预测流程如下所示:


CAMEL[10]。英文版,采用LLaMA-7B,在mimic-iii和mimic-iv上做了预训练,同时构建了17个指令微调阶段的NLP任务。流程如下:

BianQue[11]。中文版,采用ChatYuan,基于中文医疗问答指令与多轮问询对话混合数据集做指令微调得到,拟在强化AI系统的问询能力,从而达到模拟医生问诊的过程。技术上适用于之前的文章中讨论的hippocratic.ai中的医生模拟的功能。

QiZhenGPT[12]。中文版,基于LLaMA-7B,训练数据包括真实医患知识问答数据(疾病、药品、检查检验、手术、预后、食物等)和药品知识数据库(通过问题模版的方式构建)。在项目介绍中的一个产品细节很有启发,如下:

通过在模型的输出结果中增加关键实体的链接,进一步在模型的输出侧丰富了信息的上下文。

HuatuoGPT[13]。中文版,采用问诊语料,做了RLHF阶段的工作,基础模型分别基于ChatGLM-6B/Bloom/LLaMa完成。

ChatMed[14]。中文版,基于LLaMA-7B模型作为基座模型,数据包含两个部分,分别是网络爬取用户问诊数据,基于ChatGPT回答。和以知识图谱为基础,采用基于实体的self-instruct技术得到。

MedQA-ChatGLM[15]。中文版,基于ChatGLM模型作为基座模型。

如果想要了解更多相关的信息,推荐阅读焕勇的文章《也看垂直领域大模型微调落地》

从上述工作可以看到,基本上采用了对话的范式来做医疗领域的大模型,同时数据构建上倾向于通过gpt-3.5 turbo的接口实现自动化的构建。此外,中文领域的医疗大模型倾向于首先基于chatglm-6b来做,其次是llama系列的工作。

大多数工作评测下来,做的比较粗糙,效果也比较一般。在技术路线上,类比ChatGPT,多数工作并非ChatGPT原创,但是通过无数软硬细节的打磨和整合,加之产品和商业的串联,实现了各个角度上的成功。对于中文医疗大模型怎么做这件事情,目前倾向于同样的思路:技术架构相似,胜负在于对细节的思考和处理

从上图可以看到,整体的流程基本同ChatGPT相似,包含三个阶段,分别是:预训练阶段,指令微调阶段,强化学习阶段。在阶段的优先级选择上,指令微调>预训练>强化学习。从左到右,ROI依次降低。是不是觉得很简单?实则未必。看一下在训练过程中可能需要的问题,如下:

  • 如何构建大模型的评估体系?

  • 预训练和指令微调的数据构建和任务训练的差异性在哪里?

  • 什么时候发生模型记忆性遗忘,如何避免?

  • 模型常见的参数选择策略是什么?

  • 如何实现支持更长上下文,比如32K?

  • 中文词典要不要进行改造,怎么做中文词典扩充与剪裁?

  • 如何做显存占用估计?

  • 如何让模型输出的结果更加地结构化以直接用于应用?

  • 怎么做可以提升模型输出的质量?

  • 多机多卡能跑起来吗?

  • 模型推理的cost是什么?如何实现模型推理加速?

  • 如何降低模型的部署成本?

  • ......

是的,如果基于开源工作展开,甚至找不到一个好用的Pipeline,需要做各种改造和优化。

那么,这波热潮会以什么方式结束?

回顾之前的文章,我们讨论到整体上的大机会存在于三个方向,分别是应用,模型和基础设施。一般而言,一项新技术的发展大概符合以下的趋势规律:

我们现在所处的位置大概处于黄色✨的位置,未来一定会存在技术热度的下降,之后会存在一个进入稳定健康发展阶段的技术拐点,这个拐点和技术发展最早期水平之间的距离,其实就是短期内可以追求的实际的价值区间。至于长期可以追求的价值区间的大小,取决于这波热度能够冲击出的价值边界有多大?这篇文章中我们有过讨论。

从算法的角度来讲,以ChatGPT为代表的大模型技术,实实在在的带来了技术价值增益,进一步提升了技术的天花板。但是如果技术的发展无法显著驱动场景的发现和展开,那么就无法带来实际的业务价值增益。无论怎样,从现在对整个方向的观察来看,不同于以往,业务价值的增益其实也是实实在在的。那么,生命力能否持续,也许接下来就需要看技术和业务的整合带来的增益能够冲到多高的水平了。

参考链接

[1]https://techday.sensetime.com/shangliang

[2]https://github.com/xionghonglin/DoctorGLM

[3]https://github.com/MediaBrain-SJTU/MedicalGPT-zh

[4]https://github.com/SCIR-HI/Med-ChatGLM

[5]https://github.com/Kent0n-Li/ChatDoctor

[6]https://github.com/OptimalScale/LMFlow

[7]https://github.com/project-baize/baize-chatbot

[8]https://arxiv.org/pdf/2212.13138.pdf

[9]https://cambridgeltl.github.io/visual-med-alpaca/

[10]https://starmpcc.github.io/CAMEL/

[11]https://github.com/scutcyr/BianQue

[12]https://github.com/CMKRG/QiZhenGPT

[13]https://github.com/FreedomIntelligence/HuatuoGPT

[14]https://github.com/michael-wzhu/ChatMed

[15]https://github.com/WangRongsheng/MedQA-ChatGLM

扫码加笔者好友,茶已备好,等你来聊,

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存