大模型时代,何时该微调?实践指南与关键考量
首先,必须重申那个根本性问题:在当今模型能力如此强大的背景下,提示词已经可以胜任大量工作,我们为什么仍然需要进行微调?
一、为什么需要微调:超越提示词
当前AI应用开发面临一个现实:许多微调能够完成的任务,似乎完全可以通过精心设计的提示词来实现。这很容易让我们产生一种错觉:提示词和微调在本质上没有太大区别,它们都旨在影响模型的输出预测;如果非要说不同,可能只是微调在特定任务上的定制化能力更强一些。
然而,两者的底层逻辑存在显著差异:提示词本质上是一种“引导”,而微调则是一种“改造”。导致两者泛化能力强弱不同的关键在于,提示词属于输入层面的控制,模型本身的“大脑”并未改变;而微调则是在参数层面进行迁移学习,直接改变了模型的“脑回路”,使其对特定任务的模式变得敏感。
以下几个场景,虽然通常可以使用提示词解决,但在某些特定情况下,微调的必要性便会凸显。
1.1 简单意图识别
以一个管理场景下的意图分类任务为例,目标是将管理口语归类为以下五个意图之一:
- A 目标不清
- B 忙闲不均
- C 管理者精力不足
- D 员工精力不足
- E 沟通迟滞
使用提示词可以轻松处理大部分标准表述:
用户:A组加班到半夜,B组一堆人闲着刷手机
输出:{"label":"B"}
用户:产品目标周周变,大家都不知道先做哪个
输出:{"label":"A"}
在这种主流、规范的表述下,提示词的准确率通常非常高,可能超过95%。然而,当遇到以下复杂情况时,其表现可能大打折扣:
- 表述变异过大:当输入中包含大量方言、口语化表达、行业黑话甚至错别字时,模型理解可能产生偏差。例如:“俺们组肝到秃头,隔壁组摸鱼划水?那还加锤子班?”
- 多重转折:如果一个句子包含了复杂的逻辑转折,模型可能难以准确把握核心意图。例如:“虽然不像以前那么忙了,但是目标天天变,更累了。”
- 边界模糊:当一句话同时涉及多个意图且没有明显倾向性时,不同模型可能给出不一致的答案,影响系统稳定性。例如:“老板口径每天变 vs 岗位职责说不清”。
如果产品在此类场景下表现不稳定,且通过优化提示词无法有效解决,那么微调就该登场了。微调可以通过提供针对性样本,直接“教会”模型如何应对这些边缘情况:
{"text": “俺们组肝到秃头,隔壁组摸鱼划水”, “label”: “B”}
{"text": “虽然不像以前那么忙了,但是目标天天变,更累了”, “label”: “A”}
{"text”: “老板和大伙儿都蔫儿了,干啥都提不起劲”, “label”: “C”} // 此处融合了C和D的表述,需根据明确的定义进行标注
1.2 槽位抽取/关键词提取
这是大模型应用中的常见任务,用于判断一句话中是否出现或否定了多个特定概念。
用户:不是大家偷懒,更像任务拆分有问题
输出:{"present":[], "negated":["管理者长期疲惫影响节奏"]}
用户:A线忙疯了,B线一堆人闲着
输出:{"present":["部分人很忙、部分人很闲"], "negated":[]}
当任务对判断准确率要求极高,且提示词在处理复杂否定句或微妙语义时频繁出错,微调的优势便显现出来。它可以显著提升模型对特定模式(如多重否定、特定黑话否定)的识别精度。
{
"text": “我觉得不是员工精力不足,而是管理者不会分配任务”,
"output": {
"present": [],
"negated": ["管理者精力不足"]
}
}
上述管理场景还算相对简单,因为语言模型本身对这类通用问题有一定认知。但如果需要识别的特定概念是公司内部的黑话或高度专业术语,复杂度将急剧上升。此时几乎不能依赖模型的先验知识,解决方案只有两个:要么在每次提示词中附带详尽的术语解释(成本高且低效),要么就通过微调将这套“新语言”内化到模型中。
1.3 微调是“笨办法”但有时必要
从上述案例可以看出,微调本身也是一种相对“笨重”和直接的方法。它同样有其局限性,例如面对标签定义本身重叠、用户表述自相矛盾或语义极其模糊的场景时,微调模型也可能无能为力。
此外,微调的前期投资回报率通常较低。它更适合处理海量、重复且对准确性有苛刻要求的任务。例如,在万级别的处理量下,1%的错误就意味着上百个客户被误分类,此时的边际收益才能覆盖微调的成本。当数据量不足时,频繁调整提示词或许更为灵活。
在实践中,笔者在槽位抽取任务中选择微调,有时并非纯粹出于准确率的考量,而是为了追求更快的响应速度。通过针对特定任务微调一个轻量级模型,可以在获得可接受精度的同时,实现远超大模型的推理速度,并且完全避开了让大模型去记忆大量专业黑话的难题。当然,在通用性和灵活性上,提示词方案目前仍更具优势。
因此,当面对复杂、独特或高度模糊的分类任务——即常说的意图识别和槽位抽取(关键词提取)——时,微调的价值才真正凸显。
二、意图识别:小模型的挑战
在深入探讨槽位抽取(关键词提取)之前,有必要特别讨论一下意图识别是否能用更小、更高效的模型通过微调来替代大模型。根据个人实践经验,对于复杂场景,答案是比较悲观的。
对于简单的AI问答场景,例如标准的知识库查询,完全可以通过微调一个小模型来高效完成。然而,在诸如医疗AI中的慢病管理系统、或涉及复杂多轮对话的客服系统中,小模型往往力不从心。
原因在于,这些场景对语义的深度理解和上下文连贯性有很高要求。模型需要从可能长达十几轮的对话历史中,精准判断当前用户意图以及系统下一步应该执行什么操作。举例来说:
系统预设了A、B、C、D、E等多个意图,用户可能在对话中随意切换。例如,用户可能先抱怨产品问题(意图A),随即询问优惠信息(意图B),接着又了解新产品功能(意图C),最后又回到投诉流程(意图A)。这种行为在真实交互中极为常见。
又如,在慢病管理对话中,患者可能从症状咨询开始,中途突然询问医保报销细节,然后又问及某种药物的副作用,最后再回到治疗方案的讨论。这种跳跃式的、多意图交织的对话流程,要求模型具备强大的对话状态追踪能力,必须理解整个对话的上下文脉络才能做出正确决策。
综上所述,对于复杂的AI多轮对话项目,仍然建议直接使用能力更强的大模型(或通过API调用),不建议完全依赖小模型微调。一种折中方案是采用级联策略:先用小模型进行初筛,当小模型给出的预测置信度较低时,再触发大模型进行更精确的判断。
回到微调的主题,接下来我们将聚焦于另一个微调大显身手的领域:关键词抽取。
三、概念抽取/多标签分类
关键词提取(或称概念归一化)是一个非常经典且当前需求旺盛的微调场景。其核心任务是将多变、模糊、非结构化的用户口语输入,准确无误地映射到固定、明确、结构化的专业术语体系输出上。
这恰恰命中了微调的核心价值:教会模型一套全新的、特定的“语言”或分类体系。
首先要明确,提示词在这个场景下面临着一个根本性挑战:少量样本学习(Few-shot Learning)难以应对海量标签体系。 提示词当然可以将“刻骨铭心的头疼”、“脑壳痛”、“脑袋嗡嗡的”都映射到“头痛”这个标签。
但问题在于,除了“头痛”,还有“胸痛”、“腹痛”、“关节痛”等成千上万个症状。医学上记录的症状数量非常庞大,常用的医学术语本体(Ontology)包含约1万到3万个实体,若扩展到“临床发现”层面(包含症状、体征、检查结果等),实体数量可达十万级别。
如果为这十万个实体,每个再收集10个常见的口语化表述,那将是一个百万级别的映射表。如此庞大的知识库几乎不可能被完整地塞进提示词的上下文窗口中,即使能塞入,其查找和匹配的效率也会极其低下。
为了使讨论更具体,我们引入一个实际案例:
3.1 员工调查案例
在笔者从事管理咨询期间,经常进行一项称为员工调查的工作。这是一种定期、简短的员工反馈收集机制,旨在持续跟踪团队士气与满意度。
这类调查通常包含开放式问答题,允许员工自由填写文本以表达意见和建议。然而,大量非结构化的文本反馈给后续的量化分析带来了巨大挑战:不同员工可能使用完全不同的措辞来描述相似的问题,导致难以直接进行统计、比较和趋势分析。
为解决这一问题,我们当时实施了一项关键词归一化任务:通过构建AI模型,将员工的自由文本评论自动归类到预先定义好的一组标准化关键词(即主题类别)上。这是一个非常典型的小模型微调应用场景。
3.2 关键词归一化
关键词归一化是许多AI项目的经典任务。在这个场景中,目标是将不同员工在反馈中使用的多样化表述,统一映射到有限的一组标准主题关键词上。
例如:
- “薪水低”、“工资不满意”、“待遇需要提高”等不同说法,都应归入“薪酬与福利”类别。
- “领导沟通不足”、“经理不听取意见”、“上头消息不透明”等,可归为“管理沟通”类别。
这种归一化的直接好处是极大地简化了后续的数据分析流程,并且可以作为一种预处理步骤,为更复杂的提示词工程(例如,基于归类结果生成分析报告)提供清晰、结构化的输入。
3.3 数据治理流程
归一化的前提是拥有一套完整的、唯一的、系统内一致的关键词体系。以一次实际项目为例,我们收集了约8000条员工评论,每条平均长度20-50字,内容涵盖工作环境、薪资福利、职业发展、管理沟通等各方面。
微调前期的数据处理工作流至关重要:
一、数据清洗 这是基础性工作,主要包括数据脱敏、纠正错别字、统一日期/数字格式、去除无关字符等。这部分工作虽然繁琐,但至关重要。
二、核心步骤:构建与归并术语表 这是最关键的一步。所形成的术语表将成为整个系统的结构化知识核心,必须保证其唯一性和准确性。 具体工作包括:收集所有反馈中出现的高频词和短语;进行同义词/近义词归并(例如,将“加班”与“加点”、“工作生活平衡”与“劳逸结合”、“领导”与“老板”进行关联);最终形成一份清晰、互斥、完备的分类体系。随后,基于此术语表制定详细的标注规则,例如要求标注员看到“工资”、“薪水”、“收入”都统一标记为“薪酬与福利”。
三、数据集划分 数据清洗和预处理后,需要将数据划分为训练集、验证集和测试集。一个常见的比例是80%用于训练,10%用于验证,10%用于测试。 在划分时,应采用分层抽样策略,确保每个主要类别在三份数据集中都按大致相同的比例出现,以避免因某些类别在训练集中缺失或不足而导致的模型偏见。
四、数据增强 在基础数据集准备就绪后,可以运用技术手段进行数据增强,以扩增样本量并提升模型鲁棒性。 具体方法包括:基于同义词词典随机替换词语;轻微调整句式(如将主动句改为被动句,或将陈述句改为“我认为…”开头的句式);回译(将文本翻译成另一种语言再译回中文)等。这些方法能在不改变原意的前提下,增加数据的多样性,帮助模型更好地学习语言模式而非记忆特定句子。
无论是微调还是RAG,数据工程始终是AI项目中决定成败的最重要环节。对于大型项目,需要建立严格的质检流程,通常需要专门的标注后台系统或标注工具来保证效率和质量。对于中小型场景,使用智能表格协同办公也能达到不错的效果。最终会形成一份清晰的术语清单。
3.4 术语清单示例
| 类别名称 | 定义说明 (归一化关键词涵盖的主题) | 示例关键词/短语 |
|---|---|---|
| 薪酬与福利 | 有关工资水平、奖金、福利待遇、公平性的反馈。 | 薪资、工资、奖金、补贴、福利、加薪 |
| 职业发展 | 有关培训学习机会、晋升通道、职业成长的反馈。 | 培训、晋升、职业路径、学习机会 |
| 工作与生活平衡 | 有关加班、假期、弹性工作制、工作强度与个人生活平衡的反馈。 | 加班、休假、996、工作强度 |
| 管理支持 | 有关直属上级和高层管理的领导力、沟通、决策支持的反馈。 | 领导、主管、经理、管理层、沟通 |
| 团队协作 | 有关同事之间合作、团队氛围、人际关系的反馈。 | 同事、团队合作、氛围、帮忙 |
| 公司愿景与文化 | 有关公司文化、使命愿景、价值观以及员工认同感的反馈。 | 企业文化、愿景、价值观、认同 |
| 沟通透明度 | 有关公司内部信息沟通、决策透明度、反馈渠道的反馈。 | 信息透明、沟通、反馈机制 |
| 工作环境 | 有关办公环境、设备设施、后勤支持(如食堂、班车)的反馈。 | 办公室环境、设备、网络、食堂 |
| 制度与流程 | 有关公司规章制度、流程规范、审批效率的反馈。 | 流程繁琐、制度、审批、规则 |
| 认可与激励 | 有关员工认可、表彰、激励机制(如绩效奖励、晋升机会)的反馈。 | 表彰、激励、绩效奖金、晋升机会 |
| 客户导向 | 有关为客户服务、用户反馈、产品质量等影响员工工作的反馈。 | 客户反馈、产品质量、用户抱怨 |
| 其他 | 无法归入上述明确类别的其他问题反馈。 | (例如涉及个人特殊情况的建议) |
上表中每个类别都有明确的边界定义。需要注意的是,有些类别之间可能存在天然关联(如“管理支持”与“沟通透明度”)。在标注时,应遵循“就事论事”的原则,根据反馈文本直接提及的主题进行分类,避免因类别关联而进行过度推断。例如,“领导没有及时分享公司战略”应主要标记为“沟通透明度”,而不额外标记“管理支持”,以保持标签的独立性和清晰度。这些规则必须在标签定义阶段就予以明确。真实业务场景中,术语体系可能会有更复杂的层级关系,本例仅为简化说明。
3.5 任务定义
数据准备完毕后,即可明确微调任务。本场景实质上是一个多标签文本分类任务:输入是一段员工的开放式反馈文本,输出是该文本所涉及的一个或多个预定义类别(关键词)。 与单标签分类不同,多标签分类允许一条反馈对应多个主题。例如,反馈“薪资不高,加班又多,希望领导合理安排工作”应同时被标记为“薪酬与福利”、“工作与生活平衡”和“管理支持”。
至此,业务需求和数据基础已基本明确,接下来将进入微调实施环节。但在开始之前,必须慎重思考一个关键问题:究竟选择哪种模型进行微调?
四、微调模型的选择
如果无脑选择,可以直接使用像Qwen-32B这样的强大生成式模型。但针对本文讨论的“关键词提取/多标签分类”任务,这可能并非最优解。
近年来,基座模型(尤其是生成式大语言模型)发展迅猛,但专门为理解任务设计的编码器模型(如BERT系列)在文本分类领域依然保持着强大竞争力。一篇颇具影响力的批判性综述论文《Are We Really Making Much Progress in Text Classification? A Comparative Review》指出:在文本分类领域,许多新提出的复杂模型所宣称的“巨大进步”可能被高估了。经过大规模系统对比,一些经典的、相对简单的模型(如基于BERT的模型)的性能常常被低估,它们往往能够达到甚至超越许多新模型在标准基准上的表现。
我们的任务目标是多标签分类,即模型需要为每个类别输出独立的概率。从模型架构上看,像BERT这类编码器模型本质上是为理解、表征和分类任务而设计的;而生成式大语言模型(LLM)则是在其文本生成能力之上,“模拟”分类任务,存在一定的架构不匹配。论文数据和业界实践均表明,BERT类模型在各类分类任务上通常能取得顶尖性能,并且其训练和推理效率远超同等效果的LLM,部署成本也低数个数量级。
基于以上考量,在本次实践中,我们选择使用RoBERTa-wwm-ext,这是一个由哈工大发布的、基于BERT架构优化的中文预训练模型,参数量约为1.1亿。出于演示目的,我们选择了这个较小的版本,实际生产中可以选择性能更强的变体。
五、具体微调实践
具体的微调过程涉及许多专业术语和参数,例如:
- 全参数微调
- 参数高效微调(如LoRA)
- 学习率及其调度策略
- 批次大小
- 训练轮数
- 早停机制
- 权重衰减等。
这些参数在大家实际操作时会逐渐熟悉,此处不展开详述。但有一个核心概念必须理解:
5.1 理解“拟合”
“拟合”是训练过程中的核心概念,尤其对于旨在完成特定任务的微调而言。可以将其类比为学生备考:
- 欠拟合:学生没有认真复习,只看了目录,结果无论是做过的习题(训练集)还是新考题(测试集)都答不好。这说明模型没有学到数据背后的规律。原因可能是模型容量太小、数据特征不足或训练方法不当。
- 过拟合:学生没有理解知识点,而是死记硬背了所有习题的答案。考试时遇到原题能得满分,但只要题目稍有变化(测试集),就完全不会。这说明模型只是记住了训练数据的噪音和特定模式,而没有掌握泛化能力。原因通常是训练数据量不足、噪声过多或模型过于复杂。
简而言之,当模型效果不佳时,首要的解决思路往往是审视和改进数据。随后,便可进入实际的训练环节。
5.2 实际训练过程
高质量数据的获取始终是微调的难点。目前主流方法有三种:
- 人工标注:质量高,但成本昂贵、效率低。
- 大模型生成:效率高、规模大,但质量不稳定。
- 大模型生成 + 人工审核/修正:在效率和质量间取得平衡,是目前较常见的方案。
由于无法使用真实业务数据,我们将使用AI生成一些示例数据来演示流程。我们可以利用一些开源工具(例如 ConardLi 的相关项目)从文档中自动生成问答对,以快速构建数据集。

以下是一些生成的训练数据样例(类别已简化):
{"text": “系统经常卡死,沟通效率低”, “labels”: [“TOOLING_ISSUE”, “COMMUNICATION”]}
{"text”: “网络不稳定,压力很大”, “labels”: [“TOOLING_ISSUE”, “WORKLOAD”]}
{"text”: “发展渠道不开放,补贴取消了”, “labels”: [“CAREER_GROWTH”, “COMPENSATION”]}
初始训练 (小数据集)
- 数据集规模:
- 训练集:1008条
- 验证集:100条
- 测试集:100条
- 总计:1208条
- 训练参数:
- 训练轮数:2
- 学习率:1e-5
- 批次大小:8
- 权重衰减:0.05
(相关代码和数据量较大,此处不展示,可参考后续提供的Git仓库。)
训练过程监控如下图所示:

5.3 训练结果分析
训练完成后的评估指标和预测示例如下:

输入:加班太多了
输出:COMPENSATION: 0.532; CAREER_GROWTH: 0.407; WORKLOAD: 0.392; TOOLING_ISSUE: 0.306; COMMUNICATION: 0.216; MANAGER_SUPPORT: 0.196
输入:加班
输出:COMPENSATION: 0.502; WORKLOAD: 0.447; CAREER_GROWTH: 0.366; TOOLING_ISSUE: 0.331; COMMUNICATION: 0.211; MANAGER_SUPPORT: 0.196
输入:加班像常态
输出:COMPENSATION: 0.461; WORKLOAD: 0.362; CAREER_GROWTH: 0.360; TOOLING_ISSUE: 0.291; COMMUNICATION: 0.221; MANAGER_SUPPORT: 0.190
从结果看:模型学到了一些关联,但效果不理想。 主要问题有两个:
- 类别边界模糊:模型未能清晰区分不同类别,可能是因为样本量不足或各类别样本数量不均衡。
- 标签分布偏差:对于“加班”这类输入,模型给出的概率分布在多个标签上,且与预期(应更集中在
WORKLOAD上)有偏差,说明学习方向出现了偏差。
因此,我们决定增加训练数据量,并尝试调整学习率和训练轮数。
5.4 增加训练数据后的训练
- 扩增后的数据集规模:
- 训练集:5317条
- 验证集:661条
- 测试集:672条
- 总计:6650条
- 调整后的训练参数:
- 训练轮数:3
- 学习率:2e-5
- 批次大小:16
- 权重衰减:0.01
训练结果如下:

然而,从训练损失和验证损失的曲线对比发现,模型出现了过拟合:训练损失持续下降,但验证损失在后期开始上升。这意味着模型过度记忆了训练集的特性,泛化能力不足。

注:过拟合的一个重要原因往往是训练数据集本身的质量或代表性不足。
5.5 再次训练:优化策略
为了提高泛化能力,我们整合了更多数据,并调整了训练策略:
- 最终数据集规模:
- 训练集:8539条
- 验证集:1176条
- 测试集:1199条
- 优化后的训练参数(旨在减少过拟合):
- 训练轮数:从3轮减少到2轮
- 学习率:从2e-5降低到1e-5
- 批次大小:从16减少到8
- 权重衰减:从0.01增加到0.05
- 新增策略:
- 更强的正则化(通过权重衰减)。
- 早停机制:当验证集损失在连续几个epoch内不再下降时,提前终止训练。
再次进行全参数微调的结果:


上述是全参数微调的结果。接下来,我们尝试使用更高效的 LoRA(Low-Rank Adaptation)微调 方法进行对比。
5.6 LoRA微调实验
- 数据集(同前):
- 训练集:8539条
- 验证集:1176条
- 测试集:1199条
- LoRA训练参数:
- 训练轮数:2轮
- 学习率:5e-4 (LoRA通常使用更高的学习率)
- 批次大小:32
- 权重衰减:0.01
训练过程监控:

5.7 实验小结
我们将几次主要实验的关键指标汇总如下:

我们针对“加班”相关的一系列输入,测试了不同微调方法下模型对WORKLOAD标签的预测概率:

从有限的测试结果来看,LoRA微调在本例中表现出了相对最佳的效果和稳定性。但必须强调,这种简单测试只能反映模型在特定输入上的部分行为。模型最终的性能上限,严重依赖于训练数据的质量和规模。本例中使用的数据质量有限,因此结果仅供参考。
六、模型评测简介
最后,简要讨论一下模型评测。上述基于少数样例的测试显然不够系统。行业内部已有较为成熟的模型评估体系,但其实施效果同样受限于一个核心难题:获取高质量、有代表性的评测数据非常困难。
构建有效的评测体系需要回答几个核心问题:
6.1 评测集从何而来?
可以依赖人工标注或公开数据集(如MMLU、CMMLU、C-Eval、GSM8K等),但一旦涉及具体垂直领域,公开数据往往捉襟见肘。此时,必须深入行业,针对性地构建能够评估目标能力的数据集。
6.2 如何量化模型能力?
- 分类任务:使用准确率、精确率、召回率、F1分数等。
- 文本生成任务:使用BLEU、ROUGE、BERTScore等自动化指标评估生成文本与参考文本的相似度。
- 问答任务:可采用精确匹配(Exact Match)或模糊匹配(Token-level F1)。
- 语言模型基础能力:使用困惑度(Perplexity)来衡量模型对文本序列的预测能力。
6.3 评测应涵盖哪些维度?
- 知识与理解能力:通用知识与领域知识。
- 任务专项能力:在目标任务(如分类、摘要、翻译)上的表现。
- 鲁棒性:对抗噪声、对抗样本、输入变化的能力。
- 效率:推理速度、内存占用、计算成本。
6.4 评估方式有哪些?
- 自动化评测:快速、可大规模进行,适用于标准任务。
- 人工评估:耗时费力,但对生成内容的质量、连贯性、事实准确性等主观维度的评估不可或缺。
- 混合评估:先通过自动评测筛选,再对关键样本进行人工复核,是常见的组合策略。
6.5 常用评测工具
- OpenCompass(清华大学)
- HELM(斯坦福大学)
- LM Evaluation Harness(EleutherAI)
- 其他领域特定的评测基准。
模型评测本身是一个宏大课题,此处不再展开。对于中文场景,OpenCompass 是一个功能全面且活跃的开源评测框架,值得推荐。
七、结语
让我们回到最初的问题:模型已经如此强大,为什么还要进行微调?
因为真实的业务需求往往不是追求更华丽、更具创意的回答,而是要求将模糊、多变的口语化输入,转化为稳定、低延迟、可管理、可解释的结构化输出。
在影响模型输出的几种主要技术手段中,提示词工程、RAG和微调并非相互对立,而是适用于不同场景的工具:
- 能用提示词解决的问题,优先使用提示词。
- 需要融合最新、外部知识的任务,考虑使用RAG。
- 当面对固定的专业术语体系、丰富的口语化变体、对准确率和成本有双重苛刻要求时,微调才是值得考虑的解决方案。
同时,必须清醒认识到,无论是RAG还是微调,都不是“银弹”。它们无法从根本上解决数据质量低下、标注不一致、业务逻辑本身模糊等问题。应对这些挑战,需要的是扎实的数据治理内功和深刻的业务理解,而非单纯的技术“招式”。
希望本文的探讨,能够帮助你在技术选型时勾勒出一幅更清晰的地图。