怎样判断 SFT 改善了什么:格式、准确率与能力退化

成长演进

具备清晰骨架、初步数学推导或工程验证,持续补充论据与实测。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

训练结束,模型开始稳定输出 JSON,损失也下降了。现在能说 SFT 成功了吗?

如果 JSON 里的学习率经常多一个零,或未知步数被填成默认值,它只是更稳定地输出了一个错误答案。反过来,键顺序变了但内容完全正确,也不应仅因字符串不同就判错。

评价要对应任务真正需要的行为,并保留不同错误的区别。 本篇继续使用三字段实验记录提取任务,把训练结果拆成可以复核的几层。

文中的数字均为自写计数例子,用于说明指标口径,不是已运行模型的结果。

第一层:输出能否被正确读取#

先检查完整输出是否为合法 JSON,而不是从一大段解释中随便截出一对花括号。若应用要求只返回 JSON,那么额外开场白本身就是格式失败。

再检查结构:必须是对象,包含规定的三个键,类型正确,没有不允许的额外字段。steps 应为整数或 null,learning_rate 应为数值或 null。

实现时要注意语言类型细节。例如 Python 中布尔值具有整数的继承关系,简单的整数类型判断可能把 true 当作步数接受。检查器应按任务定义处理,而不是让编程语言的默认行为决定规范。

解析器对重复键、非标准数值等情况也可能有宽松行为。用于评价的接受范围应明确,并用正常与异常输出测试它。

可解析率和结构符合率可以分开报告。前者高,并不保证后者也高。

第二层:字段有没有被正确提取#

结构通过后,再比较字段含义。对于示例材料 2e-4,输出 0.0002 应被视为相同数值;JSON 键顺序变化也不应影响结果。

但允许哪些归一化要预先规定。模型名大小写、空白、单位转换是否可忽略,不能看到模型答案后临时放宽。

数值比较也不能统一使用一个很大的误差容忍范围。学习率从 0.0002 变成 0.002 是数量级错误,若绝对容差设置不合理,可能误判为正确。可以按任务使用精确十进制解析,或明确规定相对与绝对误差规则。

字段正确性应以当前材料和任务规范为依据。外部常识里某模型通常训练多少步,不能替代材料没有记录的值。

第三层:整条记录是否可以直接使用#

假设一百条输出中,九十八条能解析,九十四条结构符合要求,七十八条三个字段全部正确。

这对应三个不同指标:98%、94%、78%。如果实际应用要求整条记录都正确,那么不能把 98% 宣传成任务成功率。

可以同时报告整条成功率与逐字段准确率。前者更严格,后者有助于定位错误来自模型名、学习率还是步数。

解析失败的样本也必须进入整体分母。只在成功解析的九十八条里统计正确率,然后省略两条失败,会让失败消失在报告中。

此外,多字段错误可能发生在同一条记录上。每种错误类型的计数可以重叠,不应强求它们相加恰好等于失败记录数;如果要做互斥分类,需要另定优先规则。

缺失值多时,整体字段准确率会骗人#

假设一百条记录都明确包含模型名,但学习率和步数都缺失。总共三百个字段,其中两百个应为 null。

一个始终输出三个 null 的系统,字段准确率可以达到 200/300≈66.7%200/300\approx66.7\%,但没有一条记录完全正确,也没有提取出任何已有模型名。

因此,缺失处理至少拆成两面:

指标观察什么对应失败
已知字段提取正确率材料有值时是否给对遗漏、填空、抄错
缺失字段留空率材料无值时是否留空无依据补写

也可以报告缺失字段中的补写率,以及已知字段中的遗漏率。分母应明确是“缺失字段数”还是“全部字段数”。

这能帮助解释数据改动:大量加入缺失样本后,补写少了但遗漏多了,说明行为发生了取舍,并非无条件更好。

区分答不了、规则不明和拒绝回答#

本卷任务中的 null 表示材料未明确记录,不等于模型拒绝执行任务。对有明确数据的正常材料全部填空,是任务失败。

若输入包含多个实验而规范未说明目标,应该进入歧义处理流程,而不是让评价器偷偷选一个作为唯一答案。若材料中的某段文字要求模型忽略任务、输出其他内容,则应测试模型能否继续按约定处理材料。

这些属于不同错误来源。需要拒绝或排除的输入范围,应在任务规范中明确;不能靠一个统一的“拒答率”混合统计。

对更广泛的助手任务,安全边界与帮助用户完成正常任务也需要分项评价。但不应把这类通用要求机械套进一个字段提取任务,制造无关指标。

验证损失与任务成功率为什么可能不同步#

监督目标对很多 token 求平均。大量标点、固定键名和常见文本变得更容易预测,足以降低平均损失;少数字段中的关键数字仍可能错误。

另一方面,示范文本只提供一种写法。语义等价但 token 不同的输出,可能在任务检查中正确,却不完全符合逐 token 目标。

因此,损失适合观察拟合与数值过程,固定任务评价更直接回答应用需求。不能让其中一项完全替代另一项。

评价生成时应固定模板、输入处理、最大输出长度和采样设置。若一个方案生成上限过短,JSON 被截断,差异可能来自推理配置,而不是训练方法本身。

改善八个百分点,具体修复了哪些样本#

假设原模型一百条里七十条成功,新模型七十八条成功。只看总数知道净增八条,却不知道是否发生了新的错误。

逐条配对后可能发现:两者都成功六十六条,原来失败而现在成功十二条,原来成功而现在失败四条,两者都失败十八条。

这样,新模型的 78 来自 66+1266+12,旧模型的 70 来自 66+466+4。净增是八,但我们仍应检查那四条退化,尤其是否集中在重要边界。

小样本中的差异也可能不稳定。需要根据独立单位做重复或不确定性分析;如果同一来源有十种改写,就不能把它们当作十个完全独立样本获得过于乐观的区间。

评测样本的不确定性与训练随机性的波动是两回事。固定模型对测试集重采样,不能代替多个训练种子的重复;多个训练种子也不能修复测试集来源单一。

未见模板与未见来源应该分别测#

只随机拆分问答,可能让相同原始材料的改写同时出现在训练和测试。模型表现好,未必说明它能处理新实验记录。

可以保留几类不同难度的集合:同任务的新来源、未见措辞模板、较长材料、含关键干扰的边界样本。各集合保持明确规范,并分别报告。

这里的“难例集”不一定代表真实流量分布。它用于发现脆弱点;若要报告整体使用表现,还需要与实际输入分布相符的评测集。

不要用难例集反复调到满意后,仍称它为未见测试。调整过多次的集合更接近开发集,应另外保留最终检查材料。

模型评审适合补充哪些内容#

对于字段提取,JSON 与确定数值通常可以直接检查,不必把所有判断交给另一个模型。

需要模型评审的地方可能是复杂指代、材料支持关系或更开放的回答。但评审模型同样会受措辞、长度、位置和自身偏好影响。MT-Bench 与 Chatbot Arena 的研究讨论了这类评审能力与偏差,不能把模型评审分数视为无误真值。Judging LLM-as-a-Judge

规则可验证的指令评价也是一个独立方向。IFEval 将一类指令要求设计成可检查约束,有助于区分形式遵循与开放质量判断;但通过这些约束不等于内容事实全部正确。Instruction-Following Evaluation

实际使用评审模型时,保留评审提示、版本、输入顺序和原始判断,并抽样人工复核。若评审与确定性检查冲突,先调查原因,而不是简单取平均掩盖分歧。

不要只检查目标任务,忘了原有能力#

针对提取任务做 SFT 后,模型可能更习惯短 JSON,也可能在普通解释任务中继续输出字段。这类变化是否可接受,取决于模型用途。

若它是专用提取器,通用聊天退化未必影响交付;若仍要作为通用助手,就应保留一组基本解释、语言理解和其他必要能力的回归任务。

因此,先定义产品边界,再决定回归集。不能要求所有模型在所有任务上都毫无变化,也不能只因目标任务提升就忽略已承诺的其他能力。

比较 LoRA 与全参数方案时,也应使用相同的回归标准,而不是给不同方案挑不同的有利任务。

最后一份报告应包含什么#

一份可复核的 SFT 报告可以包括:固定的任务规范与模型版本、训练数据与划分、模板和监督规则、实际训练配置、推理设置、分层指标、配对变化和典型错误。

典型输出应覆盖修复、退化和持续失败,不只展示最好的案例。资源方面报告实际时间与测量口径,别把低秩参数比例当成成本结果。

如果尚未运行实验,就交付评价脚本和计划,并明确缺少结果。本文完成的是评价设计与计数说明,不虚构第三卷的正式训练成绩。

当任务可以给出可信示范,SFT 提供了直接的训练信号;当多个回答都合理、我们更容易判断哪个更好,下一卷将讨论偏好数据与奖励建模。但评价标准仍然需要先于算法确定。

两个检查理解的问题#

第一,一个系统所有字段都输出 null,为什么可能获得看似不低的字段准确率?哪两个分项能揭示它的问题?

第二,新模型成功率从 70% 提高到 78%,是否说明所有用户都受益?你会怎样利用配对记录、来源分组和回归任务检查这个结论?

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

54 / 54 个节点 · 正文标记术语与关键词概念

怎样判断 SFT 改善了什么:格式、准确率与能力退化同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept同一概念 / Shared concept怎样判断 SFT 改善了什么:格式、准确率与能力退化怎样判断 SFT 改善了什么:格式、准确率与能力退化评价要对应任务真正需要的行为,并保留不同错误的区别评价要对应任务真正需要的行为,并保留不同错误的区别第一层:输出能否被正确读取第一层:输出能否被正确读取stepsstepsnullnulllearningratelearningratetruetrue可解析率可解析率结构符合率结构符合率第二层:字段有没有被正确提取第二层:字段有没有被正确提取2e-42e-40.00020.0002第三层:整条记录是否可以直接使用第三层:整条记录是否可以直接使用整条成功率整条成功率逐字段准确率逐字段准确率缺失值多时,整体字段准确率会骗人缺失值多时,整体字段准确率会骗人nullnull区分答不了、规则不明和拒绝回答区分答不了、规则不明和拒绝回答nullnull验证损失与任务成功率为什么可能不同步验证损失与任务成功率为什么可能不同步监督目标监督目标改善八个百分点,具体修复了哪些样本改善八个百分点,具体修复了哪些样本未见模板与未见来源应该分别测未见模板与未见来源应该分别测模型评审适合补充哪些内容模型评审适合补充哪些内容Judging LLM-as-a-JudgeJudging LLM-as-a-JudgeInstruction-Following EvaluationInstruction-Following Evaluation不要只检查目标任务,忘了原有能力不要只检查目标任务,忘了原有能力LoRA 与全参数方案LoRA 与全参数方案最后一份报告应包含什么最后一份报告应包含什么偏好数据与奖励建模偏好数据与奖励建模两个检查理解的问题两个检查理解的问题nullnullSFTSFT实验实验PythonPython归一化归一化机械机械实验实验tokentoken采样采样语义语义推理推理测试集测试集采样采样实验实验evaluationevaluationLLMLLMLoRALoRASFTSFTSFTSFT奖励奖励推理推理实验实验利用利用
怎样判断 SFT 改善了什么:格式、准确率与能力退化

怎样判断 SFT 改善了什么:格式、准确率与能力退化

回到原文 ↗
BIBTEX

引用本文

@article{2026-10-20-llm-training-sft-06-evaluation,
  author  = {枫语},
  title   = {怎样判断 SFT 改善了什么:格式、准确率与能力退化},
  journal = {枫语},
  year    = {2026},
  month   = {oct},
  url     = {https://meiluosi.github.io/posts/2026-10-20-llm-training-sft-06-evaluation/}
}
🌐

本篇知识星丛与滑动侧栈

怎样判断 SFT 改善了什么:格式、准确率与能力退化 当前主轴

搜索

正在载入索引…