一个厉害的中医GPT,AI老中医开源了!
大家好,我是 Jack。
大模型 fine-tune,在各个领域百花齐放。
今天介绍一个医学领域 fine-tune 得到的大模型,Huatuo-LLaMA。
我们都知道,OpenAI 最新的 GPT 都没有开源,自从 FaceBook(Meta)开源了 LLaMA 的预训练模型之后,基于 LLaMa fine-tune 得到的大模型开始多了起来。
Huatuo-LLaMA 就是其之一,属于医学领域的模型。
一、Huatuo-LLaMA
我们都知道,LLaMA 有着 7B(70亿) 到 65B(650亿) 量级的参数量。
作者团队出于训练成本的考虑,选择了模型参数量相对较少的 LLaMA-7B 作为 HuaTuo 的基础模型,在此基础上进行 instruct tuning,获得指令微调的大模型。
基础模型,就是 Base LLM(Large Language Model),它有着续写的能力,比如给一个开头,Base LLM 能够根据提供的开头续写内容。
但是 Base LLM 不能理解对话,你问它问题,它不会回答。为了让大模型具有理解问题的能力,就需要在 Base LLM 的基础上,进行 instruct tuning,进而得到 Instruction LLM。
好了,Huatuo-LLaMA 大致的训练原理说明白了,它就是一个基于中文的医学数据在 LLaMA-7B 开源模型基础上,instruct tuning 得到的模型。
作者团队参考 cMeKG,采用公开和自建的中文医学知识库构建训练数据。
医学知识库围绕疾病、药物、检查指标等构建,字段包括并发症,高危因素,组织学检查,临床症状,药物治疗,辅助治疗等。
知识库示例如下:
{"中心词": "偏头痛", "相关疾病": ["妊娠合并偏头痛", "恶寒发热"], "相关症状": ["皮肤变硬", "头部及眼后部疼痛并能听到连续不断的隆隆声", "晨起头痛加重"], "所属科室": ["中西医结合科", "内科"], "发病部位": ["头部"]}
然后利用 GPT3.5 接口围绕医学知识库构建问答数据,丰富 Prompt 的提问形式。
指令微调的训练集数据示例如下:
"问题:一位年轻男性长期使用可卡因,突然出现胸痛、呕吐、出汗等症状,经检查发现心电图反映心肌急性损伤,请问可能患的是什么疾病?治疗方式是什么?"
"回答: 可能患的是心肌梗塞,需要进行维拉帕米、依普利酮、硝酸甘油、ß阻滞剂、吗啡等药物治疗,并进行溶栓治疗、低分子量肝素、钙通道阻滞剂等辅助治疗。此外需要及时停用可卡因等药物,以防止病情加重。"
这个数据就构建好了。
然后利用 LLaMa 开源的 finetune 代码,就能进行训练了。
#!/bin/bash
exp_tag="e1"
python finetune.py \
--base_model 'decapoda-research/llama-7b-hf' \
--data_path './data/llama_data.json' \
--output_dir './lora-llama-med-'$exp_tag \
--prompt_template_name 'med_template' \
--micro_batch_size 128 \
--batch_size 128 \
--wandb_run_name $exp_tag
具体的训练过程,可以看下代码。
项目地址:
https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese
作者团队在一张 A100-SXM-80GB 显卡上进行了训练,训练总轮次 10 轮,耗时约 2h17m。
batch_size 为 128 的情况下显存占用在 40G 左右。预计 3090/4090 显卡( 24GB 显存)以上显卡可以较好支持,根据显存大小来调整 batch_size。
二、效果
Example1:
输入:小张最近感觉身体不适,出现心悸、气促等症状。体检发现心脏扩大、搏动减弱。
回答: 小张可能患有心肌炎,建议尽快到医院进行检查和治疗。治疗方案包括药物治疗和手术治疗。
Example2:
输入: 麻风病和儿童哮喘的病因是否一致?
回答: 不一致,麻风病的病因是麻风杆菌感染,而儿童哮喘的病因是喂养不良、吸烟等因素。
Example3:
输入: 一位患者出现了持续性的胀痛和黄疸,经影像学检查后确诊为肝胆管结石病,应该采取哪些治疗方案?
回答: 针对肝胆管结石病,治疗方案包括手术治疗、药物治疗和辅助治疗等。具体治疗方案需要根据患者的具体情况而定。
三、最后
因为训练数据有限,并且生成效果还有一定的随机性,因此无法保证 Huatuo-LLaMA 输出答案的准确性。
不过这个项目用于学术研究,还是够用的,对于大模型 fine-tune 感兴趣的小伙吧,不妨看一看。
之前跟大家说的教学视频,我已经录制完成了,还要再剪辑一下。
手把手带大家一起训练一个中文的 Base LLM,预计 18 号发布到 B 站,时长在 20~30 分钟,现场写 Bug,哈哈。
好了,今天就聊这么多吧,我是 Jack,我们下期见!
微信扫码关注该文公众号作者