1. 引言
随着互联网技术的快速发展,电子商务已经深刻地改变了各行各业的运作模式,其中医疗电商成为近年来的一个重要增长点。医疗电商平台不仅提供了药品、医疗器械的便捷购买渠道,还逐渐向在线医疗咨询、智能问诊等领域扩展[1],使医药服务转变为健康管理服务,从而提高了医药电商的使用率。与此同时,人工智能(AI)技术,为医疗电商平台注入了新的活力和可能性,受益于大规模医疗数据和先进的神经网络模型,人工智能在医学对话领域的应用取得了显著进展[2]。
AI在医学对话系统中的应用正在得到越来越多的关注和研究投入,传统的医学对话系统发展历程分为:专家系统和规则引擎阶段、传统机器学习算法阶段及深度学习阶段。最近,大语言模型(Large Language Model, LLM)取得了重大进展,例如,GPT3 [3]和ChatGPT (OpenAI),它们的对话能力十分出色,能够理解和回答各种问题,甚至在某些领域超越人类。然而,很多LLM主要是用英文语料库训练的,这限制了它们对中文的理解和生成能力,使其在中文环境中直接应用不太理想[4]。阿里云推出的通义千问大模型:Qwen系列[5]和Qen2系列[6]在中文理解和生成等任务上表现优异,超越了大多数开源模型。
尽管LLM有许多优点,但它们并不是专门为医学领域设计的,缺乏医学领域专业知识,因此,使用专业的在线医学问诊数据对LLM进行微调显得尤为重要,微调模型可以使其学习到用于医疗电商的医学知识。
本研究提出了一个医学对话助手模型MedAsst,这是一个专注于中文、为医疗电商平台定制的生成式对话LLM,图1展示了一个基于MedAsst的AI医学对话的例子。我们的模型建立在开源的通义千问大模型Qwen2-7B (76亿个参数)基础上,使用LoRA (LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS)方法[7]在超过147万条的微调数据上进行监督微调(Supervised Fine-Tuning, SFT)。通过与参数相当的开源模型进行比较,评估我们模型在中文医学对话任务上的表现。通过对Qwen2大模型在中文医学对话的研究,本文希望为医疗电商、在线医疗的参与者和研究者提供有益的见解和指导,并促进大语言模型及其微调技术在医疗电商的应用和发展。生成式大模型的研究处于蓬勃发展阶段,通过构建AI agent [8],在预防、诊疗的全流程中给予患者提供建议性的帮助。
Figure 1. A sample MedAsst-based AI medical dialogue
图1. 基于MedAsst 的AI医学对话的一个样例
2. 相关工作
传统的医学对话系统研究中使用的方法包括基于规则的方法、传统机器学习方法和专家系统等。例如,Hayashi [9]试图从医疗数据和人类知识中提取基于规则的表示来进行诊断。Wilson [10]等人提出了一种基于上下文匹配的健康对话系统。Li [11]等人利用机器学习框架,在定制的数据库上训练对话系统来教授医学生解剖学。传统的处理医学对话系统的方法,只能在少数的场景中使用,局限性很大,这些方法甚至只能用在医学对话任务中的小部分模块。
随着深度学习的发展,神经网络模型在对话领域得到广泛应用。例如,颜永[12]等人提出了一种融合双向长短期记忆神经网络和强化学习模型的生成式对话方法,以尝试解决对话系统在回复过程中回答单调的问题。Wang [13]等人提出了一个用于构建智能医疗对话系统的Bert模型,在一些在线电子商务数据集上实验表明,他们的模型在智慧城市中建立智能医疗对话系统很有潜力。马德草[14]等人提出了一种基于实体知识推理的端到端任务型对话系统,他们的方法提高了模型的响应生成和实体预测能力。然而这些方法的应用场景仍旧有较大限制,对话的流畅度也不够高,处理复杂任务的能力较弱。
GPT3 [3]和ChatGPT (OpenAI 2022)等大语言模型(LLM)的显著成就受到了广泛关注,引发了人工智能的新浪潮,尽管OpenAI没有开放其训练策略和权重数据。随着LLaMa [15]等开源LLM的出现,更多的研究机构发布了开源LLM。Google的Gemma团队[16]发布了他们的轻量级Gemma模型,其在语言理解、推理和安全性的基准测试中表现出强大性能。Mistral AI发布了他们的轻量级模型Mistral 7B [17],其在人工和自动化基准测试上都超过了Llama 2 13B。国内阿里巴巴也发布了开源通义千问LLM——Qwen2 [6]系列,与先进的开源语言模型相比,Qwen2总体上超越了大多数开源模型,并在语言理解、语言生成、推理等一系列基准测试中显示出强大的竞争力。因此本研究选择Qwen2作为微调的基础模型。
在需要复杂知识和高精度的医疗问诊领域,大型模型通常表现不佳。不过研究人员使用监督微调等方法取得了重大进展。例如Wang [4]等人基于LlaMa模型进行了监督微调,提出了HuaTuo模型,他们的实验结果表明HuaTuo生成的响应具有更可靠的医学知识。Yang等人基于Llama模型在中文多轮医疗对话数据集CmtMedQA上进行监督微调等训练,提出了Zhongjing模型[18],该模型在复杂对话和主动问询能力上表现很好。然而,大语言模型微调的成本非常高,例如对一个7B的LLM进行全参微调,大约需要120 GB的显存资源。好在Hu等人提出了一种低秩自适应的微调方法——LoRA [7],利用该方法对一个7 B的LLM进行微调,仅需要约20 GB的显存,这种小量级的显存资源即便是医疗电商平台的小型商户也容易获取到。因此本文采用LoRA方法对Qwen2-7B模型进行微调。
3. 医学对话助手模型(MedAsst)的构建
在这一章中我们将介绍我们的中文医学对话助手模型——MedAsst的构建过程。
3.1. 基础模型
Qwen2从根本上是基于Transformer [19]架构构成的大型语言模型,其特点是具有因果掩码的自注意力机制。Qwen2模型的架构包括多个Transformer层,每个层都配备有因果注意力机制和前馈神经网络(FFNs)。Qwen2采用分组查询注意力(Grouped Query Attention, GQA) [20]而不是传统的多头注意力机制,GQA在推理过程中优化了缓存的使用,显著提高了吞吐量。Qwen2包含一系列的大语言模型,参数范围从5亿到720亿,这些模型对研究界开放源代码。本研究中,我们采用了Qwen2-7B来进行构建,其更适用于少量设备资源下的训练。
3.2. 医学问答数据集构建
为了让模型学习到更多医学问诊方面的知识,我们对4个医学数据集进行筛选和处理,来构建高质量的医疗问答数据集。这4个医学数据集分别源自:MedChatZH [21]、Huatuo-26M [22]、CmtMedQA [18]和webMedQA [23]。我们只选取这些数据集中的训练集作为来构建我们的微调数据集,对于每条微调数据集,我们统一处理转换为Alpaca [24]的微调数据样式。其中,多轮医疗问答对话的微调数据示例如图2所示,普通医疗对话的微调数据样例如图3所示。
经过筛选和处理这4个开源数据集后,我们构建了用于微调的医疗问答数据集,其含有超过147万条的中文医学问答数据,该数据集的构成信息如表1所示。
Figure 2. Sample fine-tuned data from a multi-round medical Q&A dialogue
图2. 多轮医疗问答对话的微调数据样例
Figure 3. Sample fine-tuned data for medical dialogue
图3. 医疗对话的微调数据样例
Table 1. Information on the composition of the medical Q&A dataset used for fine-tuning
表1. 用于微调的医疗问答数据集的构成信息
数据来源 |
数据描述 |
数据条数 |
MedChatZH |
医学问答对话,只抽取其中的训练数据集 |
763,629条 |
Huatuo-26M |
医学问答对话,只抽取其中的医学百科问答和微调专用数据 |
588,462条 |
CmtMedQA |
多轮医学问答对话,只抽取其中的训练数据集 |
68,023条 |
webMedQA |
医学问答对话,只抽取其中的训练数据集 |
50,570条 |
构建的医疗问答数据集 |
我们构建的格式统一的医疗问答微调数据集 |
1,470,684条 |
3.3. 监督微调(SFT)
SFT是赋予模型在专业领域对话能力的关键阶段。通过高质量的医患对话数据,该模型可以有效地调用在训练过程中积累的医学知识,从而理解和响应用户的问询。在本研究中,我们使用了LoRA方法对Qwen2-7B模型进行微调。LoRA是一种高效的微调方法,它通过低秩分解来减少参数量,从而降低了训练的计算成本和存储需求。具体实现如下:
在LoRA方法中,预训练模型的权重矩阵
被分解为两个较小的矩阵
和
,从而生成一个新的权重矩阵
:
(1)
其中,
是预训练权重矩阵,
和
是低秩矩阵,且
,
,其中
是输入的维度,
是输出的维度,
是低秩矩阵的秩,通常
。
LoRA的核心在于低秩分解,将权重矩阵分解为两个更小的矩阵,从而降低参数量并提升计算效率。在实际操作中,权重更新部分被限制为低秩矩阵的乘积形式:
(2)
这意味着在训练过程中,模型的参数更新只涉及
和
矩阵,而不直接修改原始的预训练权重矩阵
。
我们使用构建的包含147万条问答对的医疗问答数据集,按照Alpaca的微调数据格式进行处理,确保数据的一致性和标准化。微调时使用的是LLaMA-Factory框架[25],从魔塔社区[26]中加载预训练的Qwen2-7B含76亿参数的模型,并进行模型参数的初始化。微调参数中,输入模型的最大训练数据长度cutoff_len设置为512,批量大小batch_size设置为4,训练轮数epochs设置为3.0。经过多次微调实验后,选择最大学习率为0.0001,学习率从训练开始时为0到100步后线性提升到最大值,到达最大值后,使用余弦衰减策略将学习率平滑下降。
4. 实验结果与分析
4.1. 实验设置与基线模型
我们的实验是在Pytorch 2.1.2上进行的,微调过程中仅使用了一个显存为24 GB的NVIDIA A10 GPU,微调的参数设置如3.3.节中所述。对于实验过程中的所有模型,都是直接从魔塔社区种加载预训练模型,然后在相同的医疗问答数据集上进行微调。微调过程中的参数设置都是一样。
为了评估MedAsst的中文医学对话的有效性,我们选择了4个与MedAsst参数相当的先进大语言模型来进行比较,基线模型详细如下:
LlaMa-3-8B:由Meta发布的80亿参数的指令调优生成式大语言模型,该模型针对对话进行了优化,在常见的行业基准测试中优于许多可用的开源聊天模型。在我们的医疗问答数据集上进行过微调。
Gemma-7B:是Google推出的轻量级、先进的70亿参数开放式模型,非常适合各种文本生成任务,包括问答、总结和推理,仅提供英文版的指令调优变体。在我们的医疗问答数据集上进行过微调。
Mistral-7B:由Mistral AI团队发布的一个具有70亿参数的预训练大语言模型,没有加入任何的调优机制。在我们的医疗问答数据集上进行过微调。
Qwen2-7B:直接从魔塔社区上加载的预训练Qwen2-7B大模型,未经任何微调优化。
4.2. 评测数据与评价指标
我们的测试分为两个部分,一部分是中文多项选择测试,另一部分是在整合的测试数据集上做自动评估实验。
4.2.1. 多项选择题数据与指标
这部分我们的测试中,我们从CMMLU [27]和C-Eval [28]两个中文测试基准中,选取其中医学相关板块的多项选择题来作为测试数据集,整理后共计1415道题,每道题目由一个问题和四个选项组成,其中只有一个选项是正确的,在A’、B’、C’和D’中选择概率最高的选项作为模型的选择。
使用分数指标来衡量模型的知识和推理能力:
(3)
4.2.2. 自动评估实验数据与指标
这部分的测试中,我们处理并整合了MedChatZH、Huatuo-26M、CmtMedQA和webMedQA这四个数据集中的测试数据,得到了一个包含8975条医学对话记录的测试数据集,其中包含了多轮和单轮的问答对话。
为了量化生成的句子和参考句子之间的相似性,使用了BLEU-4度量指标,其评估了n-gram重叠以评估句子级别的流畅性。使用ROUGE-1,ROUGE-2和ROUGE-L这几个指标基于最长公共子序列中的单词匹配来评估模型生成的质量。
4.3. 结果与分析
4.3.1. 多项选择题测试结果与分析
表2显示了所有模型在多项选择题测试中的得分结果。从实验结果可以看出,MedAsst模型在CMMLU和C-Eval多项选择题测试中均取得了最高的平均得分,分别为88.32和91.11,总平均得分达到89.72。与其他基线模型相比,MedAsst在多项选择题测试中表现出显著优势。
Table 2. Results of each model on multiple-choice tests
表2. 各个模型在多项选择题测试上的结果
模型 |
CMMLU平均得分 |
C-Eval平均得分 |
总平均得分 |
LlaMa-3-8B |
42.04 |
54.44 |
48.24 |
Gemma-7B |
24.23 |
27.78 |
26.01 |
Mistral-7B |
35.85 |
53.33 |
44.59 |
Qwen2-7B |
87.02 |
87.78 |
87.40 |
我们的MedAsst |
88.32 |
91.11 |
89.72 |
这主要得益于MedAsst模型在大量医疗问答数据集上的监督微调,通过LoRA方法对Qwen2-7B模型进行优化,使其不仅继承了Qwen2-7B的强大基础能力,还在特定的医疗问答任务上进一步提升了模型的准确性和有效性。Qwen2-7B的取得了87.40的高分,而我们的模型在其基础上得到了进一步的提升。而其他几个模型,在中文医疗领域选择题中的表现则比较差,总平均得分甚至没有达到50分,说明这些模型在应对中文医学任务时表现不理想。MedAsst模型展示了在医疗电商平台中应用大语言模型驱动AI医学对话系统的可行性和有效性。
4.3.2. 自动评估实验结果与分析
这部分的测试主要关注模型的医学问答能力,我们在医学问答测试数据集上对所有模型进行了评估,使用了BLEU-4、ROUGE-1、ROUGE-2和ROUGE-L作为评价指标。表3展示了各个模型在医学问答测试中的表现。
从表3可以看出,我们的MedAsst模型在所有评价指标上都优于其他基线模型,展现出了超强的医学问答能力。MedAsst模型在BLEU-4、ROUGE-1、ROUGE-2和ROUGE-L上的得分分别为6.70、22.80、6.66和18.17,均高于其他基线模型。MedAsst模型的出色表现主要归功于在大量医学问答数据集上的监督微调,使其在医学领域的回答更为准确和流畅。
LlaMa-3-8B模型虽然在通用对话任务上表现优异,但在医学问答测试中得分较低,特别是BLEU-4仅为1.83,ROUGE-L为8.16。这表明LlaMa-3-8B模型在中文医学领域的细粒度理解和生成能力有限。Gemma-7B模型的表现稍好于LlaMa-3-8B,但其在中文医学问答中的表现仍不尽如人意。尽管在我们的医疗问答数据集上进行了微调,Mistral-7B模型在所有指标上的得分也较低。Qwen2-7B模型在各项指标上表现良好,我们的MedAsst是在其基础上微调的,这也表明了他医学问答任务中仍有提升空间。
总体而言,实验结果表明,MedAsst模型通过合理的微调策略,在医学问答任务中展现了最强的性能,显著优于其他参数相当的基线模型。这证明了大语言模型在特定领域进行监督微调的必要性和有效性,为未来在医疗电商平台中的应用提供了有力支持。
为了更直观地展示各模型在中文医学问答测试中的表现,我们绘制了如图4所示的柱状图,该图显示了每个模型在BLEU-4、ROUGE-1、ROUGE-2和ROUGE-L四个评价指标上的得分情况。从图4可以
Table 3. Results of each model on the medical quiz test
表3. 各个模型在医学问答测试上的结果
模型 |
BLEU-4 |
ROUGE-1 |
ROUGE-2 |
ROUGE-L |
LlaMa-3-8B |
1.83 |
20.39 |
5.20 |
8.16 |
Gemma-7B |
6.01 |
22.20 |
5.86 |
17.56 |
Mistral-7B |
5.36 |
21.53 |
5.46 |
16.36 |
Qwen2-7B |
6.03 |
21.82 |
5.83 |
16.17 |
我们的MedAsst |
6.70 |
22.80 |
6.66 |
18.17 |
Figure 4. Scores of the models on the evaluation indicators
图4. 各个模型在评价指标上的得分情况
清楚地看到,MedAsst模型在所有评价指标上均优于其他基线模型,显示出其在医学问答任务中的卓越表现。相比之下,其他模型的得分较低一些。
5. 总结
本文提出了一种基于大语言模型(LLM)的中文医学对话系统模型MedAsst,并通过对比评估了其在中文医学对话任务中的表现。我们以Qwen2-7B模型为基础,通过LoRA方法对其进行监督微调,从而构建了MedAsst模型。为了验证MedAsst的有效性,我们在医学多项选择题和自定义的医学问答数据集上对其进行了全面评测。实验结果表明,MedAsst在BLEU-4、ROUGE-1、ROUGE-2和ROUGE-L四个指标上均优于其他基线模型,尤其在医学问答能力上展现出显著优势。通过与LlaMa-3-8B、Gemma-7B、Mistral-7B和未经微调的Qwen2-7B模型的对比,MedAsst的优异表现证明了在特定领域进行监督微调的必要性和有效性。我们的方法不仅提升了模型在中文医学问答任务中的表现,同时也展示了大语言模型在医疗电商平台中的应用潜力。未来工作将进一步优化模型,提高其在更复杂场景中的应用效果,推动大语言模型在电商医疗领域的实际应用和发展。