某家保险公司用一整年的客服对话记录微调了一个支持模型。上线不到一周,合规审查员就发现了怪事:这个机器人一直把 "deductible"(免赔额)写成 "deductable"。不是偶尔出错——而是每八条出现该词的消息里,大约都会有一条这样写。模型并没有自己发明这个拼写错误。它继承了这个错误。一小撮一线客服两年来一直这么打字,而语料库忠实地反映了他们打的内容,不是字典里的内容。
这就是在运营数据上做监督式微调最令人不安的地方:模型并不是在学习你的领域,它是在学习你的语料库。这两者有重叠,但并不等同,而那道缝隙正是每一个本可预防的行为缺陷藏身的地方。训练数据里的频率并不是正确性的信号,它只是一个信号——告诉你你的团队恰好做某件事做得够多,多到模型愿意模仿。
错别字是最容易识别的情形。难的是那些没人愿意写成规则的部分,因为大家都默认模型会学到工作的"专业"版本,而不是工作被实际执行的样子。
为什么频率不等于正确性
预训练模型自带一个先验。在开放网络上,字典拼写远多于常见拼写错误,大致就跟细心编辑远多于忙乱客服的比例差不多,所以基础模型不假思索地写出 "deductible"。微调会把这个先验拉向你给它看的任何东西。给模型在匹配上下文中看几百次 "deductable",新的后验就会塌缩到语料库频率给出的答案,而不是字典给出的答案。
关于数据质量的文献令人不安地清晰地揭示了这种效应的量级。真实世界的数据集普遍带有 7%–50% 的标注噪声。最近一项关于涌现式失准阈值的研究发现:至少需要 50% 的正确数据,领域特定性能和道德对齐才能可靠地恢复——而即使在 90% 正确率下,微调后的模型也常常无法匹敌其基础模型的鲁棒性。模型没有信号去区分"语料库经常做的事"和"语料库正确做的事"。它只看到频率,而频率会赢。
这一点在语料库感觉最干净的地方反而最要紧。客服对话、临床记录、销售通话纪要、代码评审评论——这些都是专业人士做真实工作时写下的内容,读起来很有权威感。它们同时也充斥着特立独行的缩写、内部黑话、复制粘贴的模板、反复出现的错别字,以及某个人的口头禅通过引用回复链条传染开来。这些东西没有任何一项会被标注员标出来,因为它们相对工作本身并没有"错"。它们就是工作本身——包括那些不应当被建模的部分。
从个人习语到品牌语调的流水线
deductable 这个例子很温和,因为它显而易见。同样的机制会产生任何拼写检查器都抓不到的效果。
想象一位一线客服,大约三分之一的回复都以 "honestly, I think this might be the issue"(说实话,我觉得问题可能在这儿)开头。这是个语言习惯。它柔化了一个其实他自己挺确信的建议。它同时也是这一位客服的声音,不是公司的声音。在一整年的高频对话之后,这位客服的聊天记录主导了语料库中模板化最严重的那部分——升级确认、问题假设、后续建议。在这个语料库上微调,"honestly, I think this might be the issue" 就成了你那个面向客户的 AI 的风格指纹。每位客户都看到同样的犹豫语气,在同样的位置,带着同样的虚假亲近感。
把这种事乘以一个客服团队一年里做出的上千个小决定。那位总在确认资格之前就发优惠券的客服。那位用三句话清脆节奏回答账单问题的客服。那位每次诊断不出 UI bug 时就习惯性地承诺"我会让工程团队的人联系你"的客服。语料库不会把这些标注成习惯——它们看起来就是答案。微调会把它们当作模板原样照搬下来。
最近的研究证实这种风格迁移有多廉价。2025 年的一项研究发现:在仅仅 100 段模拟对话上微调一个模型,就足以盖过基于提示词的语气指令。机制很直接——在窄分布上对少量样本进行的梯度更新,会盖过一段长长的系统提示,而解码器本来就会部分忽略后者。反过来说,100 条误导性样本也就够了。意外继承某种风格事故的门槛低得惊人。
大多数团队跳过的那道整理工序
修复方法并不奇特。它就是那道在微调之前要做一次的预处理步骤:对语料库里每个反复出现的模式问一个非常具体的问题——这是一个值得保留的领域惯例,还是一个值得规范化的风格事故?
这两类模式在一个数频次的模型眼里看起来完全一样。但在一个细心的人眼里它们看起来不同——前提是有人去问这个问题。大多数微调流水线从不问。它们从原始对话直接到 JSONL 文件再到训练运行,中间唯一的步骤就是去重和长度过滤——这两者都不能区分个人习语和行业惯用语。
一道有用的整理工序大约包含三个动作。第一,生成一份频次表,列出你语料库里最常见、但在基线参考语料库里没出现的 n-gram。掉出来的候选大多是领域语言,但其中相当一部分是事故:拼写不一致的品牌名、被用俗称指代的错误码、某个经理的口头禅感染了整个团队。第二,对语料库里已知的薄弱点采样——高风险领域术语的拼写错误(药品名、产品 SKU、监管术语)、套路化的开场和结尾、犹豫式措辞。第三,在候选模式上跑一个快速分类器或一个小型 LLM,问每个模式是否与政策对齐。输出不是一份干净的语料库,而是一份模式清单——这些模式要么需要在训练数据里被纠正,要么需要在系统提示词里被显式处理。
这件事并不时髦,因为它不会随数据量线性扩展。它随你语料库的方差 扩展,而团队通常没刻画过这个方差。好消息是曲线收敛得很快。继承式错误造成的大部分伤害,集中在最常见的一百来个模式上。再往后就是长尾区域,模型的先验自己会重新主导。坏消息是这件事大部分是判断,不是自动化,而大多数团队跳过判断类工作,因为这种工作很难放进仪表盘里。
一个有用的重新框定方式是把这道整理工序当成风格指南提取 而不是清理。你不是在丢掉语料库的个性。你是在搞清楚这个个性里哪部分属于品牌,哪部分属于某几位恰好打字打得多的员工。品牌的部分被刻意保留下来。员工的部分被洗掉,这样模型就不会假装成某一个特定的人。
一种能抓住继承式错误的评测 标准的微调评测衡量的是任务准确率:回复有没有回答问题,有没有用,有没有合规。这类评测不去查找风格继承,因为风格继承并不会改变准确率。模型可以一边正确地解决客户的账单问题,一边把 "deductible" 拼错,一边用一句多余的犹豫语开场。准确率仪表盘显示 94% 通过。
能抓住这种回归的评测必须专门为它设计。有三类模式值得搭建。
已知错误探针 。维护一份清单,记录整理工序中提取出来的拼写错误、品牌名变体、已弃用产品名以及风格口头禅。每次微调之后,采样模型的输出,对这些 token 做 grep。目标是 0%;任何高于 0.5% 的比例都说明模型把这个模式继承得太牢,牢到会自发地浮现出来。
基线漂移探针 。把同一批提示词分别灌进基础模型和微调模型。对输出按风格标记做 diff——句长分布、开场频率、犹豫密度、缩写率。无法解释的大幅偏移说明语料库以你评测套件没预料到的方式偏移了模型的语调。一些漂移正是微调的目的;失控的漂移就是警报信号。
人格泄露探针 。构造一些本该唤起中性品牌语调回复的提示词。看输出里有没有某一位一线客服特有的第一人称模式——"yeah so basically"、"in my experience"、"I usually tell people to"——这些都不应出现在公司的声音里。如果出现了,说明模型对单个贡献者的语料片段过拟合了。
这些探针运行成本低,而且能揭示准确率和质量之间的差距。它们还会建立起一种机构性的肌肉,让你在下次数据刷新时认真去做那道整理工序——因为现在你有一个回归信号,具体指向那些未被处理的模式。没有这个信号,同样的错别字每六个月就会重新出现,被推回生产,在数以百万计的客户交互前默默腐蚀公司的声音。
行为迁移,不是知识迁移 更深一层的教训是:微调通常被定性为知识迁移 ——把你的领域给模型,让它能回答你的问题——但更诚实的描述是行为迁移 。模型学会像语料库那样表现。整个语料库,包括那些只要有人去看就会被编辑掉的部分。
这种重新定性会改变工作方式。知识迁移暗示要关注覆盖度:模型有没有看过每个重要话题的足够样本?行为迁移暗示要关注示范质量:它看到的样本,是不是你希望它表现出来的行为,而不仅仅是已经发生过的行为?覆盖度随数据量扩展。示范质量随注意力扩展。大多数团队优化覆盖度,因为那是他们的数据基础设施能度量的东西,结果他们交付的产品里包含了自己运营中那些——如果有人在训练前读过对话记录就根本不会批准的——部分。
预训练的基础模型,讽刺地,常常比微调后的版本更像一个有纪律的写作者,因为基础模型平均了整个有文字记录的互联网,而微调版本平均了某一家具体公司一个普通星期三的运营。微调版本更有用——它了解你的产品、你的语调、你常见的问题——但它也更贴近那些打字的人,贴近他们的习惯、他们的捷径,以及他们持续地、足以传授给模型的那些小错误。
这门功课说出来简单,做起来繁琐:在训练之前先读你的语料库,决定你到底想让模型继承它的哪些部分,然后构建一个能抓住你决定不要的那些东西的评测。跳过这一步的团队,并没有避免对模型的声音持有立场。他们只是把这个立场外包给了恰好打字最多的那批员工。这不是一种策略,这是策略的缺席——以权重的形式编码下来。
会员专享
余下内容仅对会员开放。 会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
— 完整文章,包含未公开存档的部分 — 可落地的工作框架,附带权衡与决策依据 — 新文章抢先看,先于公开发布 登录以继续阅读→ 随时取消 · 一次订阅,畅读全部