4. 本草[原名:华驼(HuaTuo)]-基于中文医学知识的LLaMA微调模型

    项目简介

    项目开源了经过中文医学指令精调/指令微调Instruction-tuning Large Language Models With Chinese Medical Knowledge) 的LLaMA-7B模型。通过医学知识图谱和GPT3.5 API构建了中文医学指令数据集,并在此基础上对LLaMA进行了指令微调,提高了LLaMA在医疗领域的问答效果。

    此外,项目还尝试利用GPT3.5 API将医学文献中的【结论】作为外部信息融入多轮对话中,在此基础上对LLaMA进行了指令微调。

    同时,也提供了基于中文Alpaca大模型(https://github.com/ymcui/Chinese-LLaMA-Alpaca)进行指令微调的模型。

    目前项目只开放针对”肝癌”单个疾病训练的模型参数。在未来,还计划发布融入文献结论的医学对话数据集,并且会针对“肝胆胰”相关16种疾病训练模型。

    项目一直处于不断更新中, 2023年8月初,项目开源的经过中文医学指令精调/指令微调(Instruct-tuning) 的大语言模型集,包括LLaMA、Alpaca-Chinese、Bloom、活字模型(哈工大自然语言处理研究所发布的活字通用大模型https://github.com/HIT-SCIR/huozi)等。

    项目由哈尔滨工业大学社会计算与信息检索研究中心健康智能组创建, 于2023年3月发布,原名华驼,2023年5月更名为本草。

    基于相同的数据,团队还训练了医疗版本的ChatGLM模型: ChatGLM-6B-Med

    论文及开源地址

    项目github地址:

    https://github.com/SCIR-HI/Huatuo-Llama-Med-Chinese

    论文地址:

    HuaTuo (华驼): Tuning LLaMA Model with Chinese Medical Knowledge

    https://larxiv.org/pdf/2304.06975.pdf

    数据集构建

    采用了公开和自建的中文医学知识库,主要参考了cMeKG(https://github.com/king-yyf/CMeKG_tools)。 医学知识库围绕疾病、药物、检查指标等构建,字段包括并发症,高危因素,组织学检查,临床症状,药物治疗,辅助治疗等。

    知识库示例如下:

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

    项目利用GPT3.5接口围绕医学知识库构建问答数据,设置了多种Prompt形式来充分利用知识。

    指令微调的训练集数据示例如下:

    “问题:一位年轻男性长期使用可卡因,突然出现胸痛、呕吐、出汗等症状,经检查发现心电图反映心肌急性损伤,请问可能患的是什么疾病?治疗方式是什么?”

    回答: 可能患的是心肌梗塞,需要进行维拉帕米、依普利酮、硝酸甘油、ß阻滞剂、吗啡等药物治疗,并进行溶栓治疗、低分子量肝素、钙通道阻滞剂等辅助治疗。此外需要及时停用可卡因等药物,以防止病情加重。”

    项目提供了模型的训练数据集,共计八千余条; 同时收集了2023年关于肝癌疾病的中文医学文献,利用GPT3.5接口围绕医学文献多轮问答数据, 在·./data_literature/liver_cancer.json中提供了其中的1k条训练样例。

    一个样本示例如下:

    如果要采用自己的数据集微调Lalama,需要按照./data/llama_data.json的格式构建自己的数据集,并运行微调脚本 ./scripts/finetune.sh

    模型训练

    项目在一张A100-SXM-80GB显卡上进行了训练,训练总轮次10轮,耗时约2h17m。batch_size=128的情况下显存占用在40G左右。预计3090/4090显卡(24GB显存)以上显卡可以较好支持,根据显存大小来调整batch_size。

    模型训练超参设置和实验过程可以参考wandb的链接:

    https://wandb.ai/thinksoso/llama_med/runs/a5wgcnzt/overview?workspace=user-thinksoso

    模型效果

    下面是输出的一个简要的效果对比:

    作者将融入医学领域知识的模型与其它几个模型进行了对比分析。 在医疗问答任务中引入了新评估指标SUS,分别代表:安全性可用性流畅性。其中,安全性维度评估生成的响应是否存在误导用户、对用户健康构成危险的潜在因素,例如错误的药物建议;可用性维度评估生成的响应是否反映了医疗专业知识;流畅性维度则评估生成模型作为语言模型的能力。

    项目构建了一个中文对话场景的医疗问诊测试集,并将HuaTuo与其他三个基准模型进行了比较。为了评估模型性能,项目招募了五名具有医学背景的专业医师,在SUS三个维度上评估模型的安全性、可用性和流畅性。SUS刻度从1(不可接受)到3(好),其中2表示可接受的响应。平均SUS得分如下表4所示。尽管LLaMA获得了最高的安全得分,但其响应常常缺乏信息且重述问题,导致可用性得分低。另一方面,HuaTuo模型显着提高了知识可用性,同时没有太多地牺牲安全性。

    开放程度

    目前是给出了数据集的构建方法介绍,以及微调后的模型权重:

    • 提供了对LLaMA进行指令微调的LoRA权重文件
      • 基于医学知识库
      • 基于医学文献
    • 提供了对Alpaca进行指令微调的LoRA权重文件
      • 基于医学知识库
      • 基于医学文献

    后来也陆续也给出了对Bloom、活字模型微调的LoRA权重文件

    给出了如何微调训练模型的代码及参考数据集,数据集构建程序等并没有开放。

    项目的介绍也可以参考论文介绍及代码解读:

    https://zhuanlan.zhihu.com/p/626536996

    https://zhuanlan.zhihu.com/p/631732569