1、微调时机

什么时候才需要对大模型进行微调呢?

一般来说,做微调之前,应先把Prompting Engineering做到极致,如果通过优化Prompt已经不能解决剩余的问题了,这时候就需要进行模型的微调了。具体表现为:

1)通过Prompting Engineering无法解决问题或Prompt中描述过于复杂,导致线上推理耗时很长的情况;

2)应用对大模型响应的内容有固定格式要求,而模型在Prompting Engineering后仍有部分情况的输出不符合要求;

3)期望通过SFT来进行大模型蒸馏,使小参数模型蒸馏后也可以有效果、并且推理耗时也在可以接受的范围内。

这三种情况出现时,并且给模型添加RAG也没有明显效果的时候,就说明我们需要对模型进行微调了。

下面先概括对比大模型几种常见的优化手段:

对比维度继续Pre-trainPrompt知识库RAGSFT微调
核心目标垂直领域知识深度适应理解和生成长篇内容提供背景知识,增强回答能力优化模型在特定任务领域的表现
优点利用大量无标注垂直领域原始数据,简单连贯性强,适合复杂任务灵活性高,可随时更新性能提升,定制化效果强
缺点效果上限依赖数据质量资源消耗大,上下文限制依赖检索,实时性要求高需要标注数据,有一定硬件要求
适应场景垂直领域知识强依赖型任务,如医学/法律文本生成写作助手、阅读理解智能客服、问答系统专业领域、特定任务
额外数据大规模垂直无标注文本(10B+ Tokens)不需要,可能需要优化上下文长度需要知识库数据需要特定领域标注数据
重新训练需完整训练流程不需要,可能需要优化模型不需要,只需更新知识库需要对模型进一步训练
技术实现动态掩码语言模型+领域词权重增强+渐进式学习率衰减扩大上下文窗口检索+生成(RAG)调整模型参数
数据依赖强数据敏感无需额外数据依赖结构化知识库需要大量标注数据
实时性静态(训练后固定,不会实时更新)动态(依赖输入内容)动态(知识库可随时更新)静态(训练后固定)
资源消耗极高(需千卡集群并行训练)高(长文本计算成本高)中(需维护检索系统)高(训练算力需求大)
灵活性低(领域切换需重新预训练)中(适合单次长内容分析)高(可扩展多知识库)低(需重新训练适应变化)
2、微调实施手段

大模型的调整优化根据应用场景,一般有三个范式:

第一种是提示词(Prompt)范式。这种模式适合在未知任务上直接测试。例如基础大模型经预训练后,通过设计特定指令或上下文提示引导模型输出,无需修改模型参数就能适应新任务。

第二种是:预训练(Pretrain)-微调范式。这种模式适合在单一任务上微调和测试;如基础大模型经预训练和微调后,进行剧本生成。

第三种范式是:预训练-指令微调范式。这种模式适合在在多样任务上微调,在未知任务上测试。如基础大模型经预训练后,经多种类型的任务进行指令微调,进行通用任务的处理。

一般我们会根据任务特点,选择大模型微调采用哪种模式。

3、微调数据

SFT微调的数据结构是指令-响应对格式,以Json形式存储。SFT数据由以下几部分组成:角色定义、标签分类任务、生成任务、参考问答等。

SFT的数据质量比数据量更重要,一般来时其数据量级如下:

1)生成类任务:需2000-3000条

2)参考问答类任务:需2000-1万条

3)文本分类任务:需1000-3000条

SFT的数据采样策略主要有两种,分别是:

1)数据采样与分布平衡:采样要平衡各类数据的分布,难度也需要渐进分布;同时,要兼顾数据长度分布,尽量覆盖所有领域;

2)预置数据混入策略:通过预先设计,准备好需混入的数据。混入数据的比例一般在15%-30%左右,从而缓解大模型在某个领域上SFT后,通用能力下降的问题,保持模型在特定领域外的基本能力。

如果在SFT时,发现数据量不够,可以采用现有大模型进行数据增广;对于采集到的数据,可从数据集中抽样进行评估,确保SFT数据集对已知问题有一定覆盖度,并且格式正确性,数据内容质量符合预期。业界也有一些措施来确保SFT数据质量,例如:

1)在数据筛选和验证方面,可采用自动化筛选的方式,对数据格式、一致性以及语法进行检查;其次,人工抽样审核数据,对数据质量进行评分,也可进行专家验证;最后,利用预训练的模型对数据进行辅助筛选,筛选完成后可以人工复核。

2)在数据相关性采集方面,要考虑数据风格保持一致,即场景相关性要匹配;也要有跟任务高相似度的数据;其次,在难度梯度方面,最好从简单到复杂,让模型能逐步理解数据。

3)在模型响应的多样性保障方面,要尽量从相同prompt生成多种风格、多种角度的响应数据;其次通过调整模型的生成参数,来改变模型生成的多样性;数据采集的时候,要尽量从多源头采样,如采集多个来源、不同人类响应的数据。

4)SFT的数据采集可能不会一次到位,可以迭代式对数据进行改进。如先进行微调,然后针对量化指标如准确率和相关性等定位数据的缺陷,针对这些数据缺陷,有针对性地补充数据。

在数据质量方面,一定要考虑到特定领域的适应,可以让领域专家审核,添加专业术语或者添加边界情况下的数据,从而让数据质量更高。

还可以采取一些对比学习策略,如设置标准,告诉模型什么是好响应,什么是坏响应,从而让模型能自动学习。

总得来说,高质量的数据是SFT微调的基石。在采集微调数据时,应遵循以下大的原则:

1)数据质量优于数量;

2)应建立系统性的方法保障微调效果,如通过自动化、人工、模型辅助手段评估数据质量。评估出结果后,通过几轮迭代来持续优化数据质量;

3)要针对性适配不同场景的需求。例如要匹配目标场景的示例与响应风格。针对专业领域,还需强化专家验证、术语准确性以及边界情况的覆盖。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

更多推荐