一个常见的场景:团队拿到开源权重,攒了几千条业务问答,跑完一轮训练,模型说话确实顺了,语气也更像自家客服。但抽几条真实问题去问,错的还是错,只是错得更流利。这时候容易得出一个结论——微调没用。其实问题往往不在训练,而在训练之前。
它调的是倾向,不是知识库
把模型微调理解成“给模型喂资料”,是最容易踩的坑。权重调整改变的是模型在已有能力上的分布倾向:更愿意用某种句式、更倾向给出简短结论、更习惯某种称呼方式。它并不会凭空装进一套昨天才更新的价目表。指望靠一次训练让模型记住时效性强的具体条目,多半会落空,而且这种落空很难从损失曲线上看出来。
所以动手前值得先分清:要解决的是“说法不对”还是“内容不知道”。前者可以训练,后者更该交给检索或外部数据源。
一致性比数量更难获得
数据环节最容易被忽略的,是标注者之间的一致性。同一个问题,两个人给出的答案如果方向不同,模型学到的就是噪声。几百条边界清晰、口径统一的样本,通常比几万条互相矛盾的对话更有价值。做这件事不需要多复杂的工具,抽三十条样本让两个人独立标注,再比对差异,就能大致判断口径是否稳定。
另一个细节是负样本。只告诉模型“应该怎么答”,不告诉它“什么情况下不该答”,模型很容易对超出范围的问题强行给出答案。适当加入拒答和转人工的样本,往往比再加一千条正常问答更有效。
参数不必全动
现在的模型微调很少需要改动全部参数。低秩适配一类的做法,只训练一小部分附加参数,显存占用和迭代成本都低不少,也方便为不同业务线各留一份适配权重,随时切换。代价是效果上限可能不如全参训练,但对于语气、格式、输出结构这类目标,通常够用。
选哪种方式,取决于你要改的东西有多“深”。调整输出模板,轻量方案就够;要改变模型在某个专业领域的判断倾向,才需要考虑更重的投入。
什么情况下先别训
- 知识更新频繁,且需要精确引用:优先考虑检索增强,把事实放在模型之外。
- 只是输出格式不合要求:提示词约束加后处理,成本远低于训练。
- 样本量不足百条且来源单一:先补数据,训练只会把偏差固化下来。
反过来,需要稳定的语气风格、固定的输出结构、一致的判断倾向,这些正是训练擅长的事。
评估要留一手
训练集里的表现几乎没有参考价值。上线前应留出一批从未进入训练的样本,人工逐条看,重点看模型在边界问题上的反应——该拒答的有没有拒答,该简短的有沒有变啰嗦。损失下降而人工评测变差的情况并不罕见,两者看的不是同一件事。
说到底,模型微调是一个缩小范围的动作,把模型的输出收拢到你希望的那个区间里。它不负责扩大能力边界。想清楚这一点,很多关于“要不要训”的争论其实会自己消解。