一.什么情况下考虑微调
首先应该明确的是,在大语言模型的使用中,应该是面向场景和需求来进行智能体构建的过程。相比于传统的开发场景,使用大语言模型进行的应用开发更加的灵活,大语言模型可以在整个应用构建的过程中的多个组件中发挥作用。对于不同的组件,需要考虑以下问题,来决定是否需要进行大语言模型的微调工作:
- 提示词调优工作是否已经做到尽善尽美。模型微调虽然在很多情况下都可以快速的解决效果、格式等问题,在项目中可以快速的获得稳定好用的模型,但是模型微调所需要的成本也是需要提前考虑的因素。在模型微调之前,首先要考虑的就是模型微调所需要的数据,为了获得高质量的生成效果,需要准备高质量符合输出预期的数据,并且为了增强模型的泛化能力,还需要人工对这些数据进行思维链式(包含推理过程和预期结果)的标注。其次模型微调与部署所消耗的硬件资源和时间成本也是非常高昂的,在某个场景微调意味着该任务对应的模型需要单独的推理资源进行部署。所以需要提前考虑好有哪些场景需要微调,是否已经多次进行过提示词的调优工作并确定提示词调优无法满足该场景下的要求。
- 模型回复内容是否可以达到预期。微调所解决的大部分问题,其实都对应着这个类别,即模型回复的内容与预期不符。在这种情况下,为了让模型可以实现预期内容的回复,包括:回复某个特定场景下的知识内容、对不符合要求提问的拒答或者保守回复、特定的人设或回复语气。
- 模型的回复格式是否稳定。对于存在多个智能体交互的场景,需要由大模型在其中进行稳定的意图识别和信息处理,并且以稳定的格式输出对应的内容以便进行其他智能体的调用或者其他业务组件的调用。为了保障整体流程的稳定性,在完成测试和线上数据的回流之后,可以通过微调来保障大模型工具调用的准确性和稳定性。这通常是一个持续迭代的过程。
- 模型的回复速度是否满足业务场景需求。由于大语言模型需要进行内容理解和生成,所以对于依赖多个大模型的应用场景,延迟通常较高。对于应用构建的中间节点,可以考虑使用微调后参数量更小的模型来执行。例如意图识别和信息提取等任务,在数据数量和质量满足要求的情况下,也可以获得与参数量更大的模型相似的效果。同时,由于参数量的缩减,推理速度可以获得大幅提升。
需要注意的是:模型微调是激发模型在特定场景能力的技术,而不是让模型学习新知识的阶段。
二.大模型微调步骤
第一步,构建场景批量评测模板,以实现批量评测
在开始进行微调任务前,首先要有明确的评估标准,避免模型微调完成后完全由人工评估或者线上效果来评估,造成负面的影响。为了实现该任务,可以构造一个专门的评测智能体,使用参数量更大的模型对模型推理结果进行评分。
第二步,评测基础模型的场景能力
在完成场景批量评测模板的构造之后,首先要对未训练的原始模型进行评测,以作为对比基准。同时,可以选择不同参数量的模型,获得多个基准指标。同时可以在这些不同参数规模的模型上,获得推理效果不符合预期的回复,在微调的数据构造时,采用人工的方式有针对性的构造数据集。
此步骤可参考相关模型api文档


第三步,针对基础模型 badcase 构建微调数据集
为了在模型微调后,获得针对性更高的效果提升,对于原始模型的能力做到补充。可以有针对性对 badcase 进行分析,并对这部分数据进行扩充和增补。具体方法可以采取人工构造问题和标注、大模型生成问题并标注结合的方式来实现。
上传数据集

第四步,模型微调
使用微调数据集对基础模型进行微调,得到微调后的模型。

第五步,微调后模型评测
结合自动和人工的方式,来实现模型评测。
第六步,微调后模型 badcase 分析
分析微调模型的 badcase,并针对 badcase 类数据的补充或修改微调数据集。
第七步,重复第 4 步、第 5 步、第 6 步,直到准确率达到要求
新模型部署
在完成模型微调和评估之后,微调后的模型发布之后可以在 "我的模型" 页面查看,点击具体的模型名称之后可以将模型进行部署。
如果模型参数量较大,可以使用模型压缩的功能,将模型进行量化之后再进行部署。但需要注意的是,量化后的模型,精度相比于原始模型会有所下降,需要经过评估后再上线。
