Invalid 预测率(Invalid Prediction Rate)衡量:模型生成结果中,无法被解析为合法任务输出 的样本占比。在生成式分类、结构化 JSON 输出、固定词表标签等场景,它是 Accuracy / F1 之外的必要补充——告诉你有多少回答「格式上已经不可用」。
段末注释:Invalid 非 sklearn 内置指标,需在评估脚本中根据
LABEL_SET、JSON schema 或正则规则自行判定;通常与 Accuracy、混淆矩阵并列报告。
系列索引:微调评估指标导读
一、直观含义
对 (N) 个测试样本,设解析函数 (\text{parse}(\cdot)) 返回合法标签或 None:
$$
\text{Invalid Rate} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[\text{parse}(\hat{s}_i) = \text{None}]
$$
其中 (\hat{s}_i) 为模型原始生成字符串。
人话:100 条回复里,有多少条「根本没法当成有效答案用」。
典型 Invalid 表现:
- 情绪分类应输出
fear,模型输出I think the emotion is fear.(解析规则只认纯标签) - 应输出 JSON,模型输出 markdown 代码块外加解释文字
- 输出词表外标签
fearful、UNKNOWN - 空串、仅标点、超长废话
二、使用场景与所需数据
| 场景 | 是否需要 |
|---|---|
| 生成式多类分类(固定标签集) | 强烈建议 |
| JSON / 工具调用结构化输出 | 强烈建议 |
| 开放对话 | 一般不用(无固定 parse) |
| 分类头 argmax | 不适用(输出恒合法) |
数据要求:
- 模型
generate()的原始字符串 - 明确定义的 合法输出集合 或 schema
- 与训练
SYSTEM_PROMPT一致的格式约束描述
三、计算方式
3.1 解析规则示例(标签分类)
1 | import re |
3.2 与 Accuracy 的衔接
解析后:
1 | parsed = [parse_label(s) for s in raw_outputs] |
必须在报告中声明采用哪种做法,否则 Accuracy 不可比。
3.3 汇总指标
1 | metrics = { |
四、如何解读
| 现象 | 可能原因 |
|---|---|
| 微调前 invalid 低、微调后升高 | 过拟合训练集但 格式约束退化;或学习率过大破坏指令遵循 |
| invalid 高但 token accuracy 高 | 训练用 teacher forcing 学 token,generate 时爱「多说一句」 |
| invalid 降、macro F1 升 | 理想:格式与语义双改善 |
| invalid 低但 F1 低 | 格式对了,内容常错——需看混淆矩阵 |
数值直觉:400 条测试里 2 条 invalid → invalid_rate = 0.005(0.5%),通常可接受;>5% 应排查 prompt 与 decode 策略。
五、局限性与常见误用
- 解析规则即指标:正则过严把
Fear.标 invalid;过松把not fear but joy抽成fear——规则与指标耦合。 - 不反映语义近错:invalid 只抓格式,不抓「合法但错误」标签。
- 与 max_new_tokens 相关:截断可能导致半句话 invalid。
- temperature > 0 升高 invalid:采样随机性增加格式漂移。
- 单独报告误导:invalid=0 不代表任务做好;必须并列 F1。
- 跨实验 parse 不一致:改正则后 historical 不可比。
六、与其他指标的关系
| 指标 | 关系 |
|---|---|
| Accuracy | Invalid 通常计为错;或只在有效子集上算 accuracy |
| 混淆矩阵 | INVALID 作伪类可定位格式失败量 |
| mean_token_accuracy | 训练 token 对 ≠ 生成格式对 |
| Exact Match | EM 要求整串匹配;Invalid 是 EM 之前的 gates |
七、实践建议
- 训练、评估、线上推理共用同一 SYSTEM_PROMPT 与 parse 逻辑(代码层抽成函数复用)。
- 报告 invalid_rate + invalid_count + 原始失败样例(各 5~10 条)。
- 微调对比表:
pre invalid / post invalid / Δ,并列 macro_f1。 - decode 用 greedy + 低 max_new_tokens 做主评估;采样策略单独做鲁棒性实验。
- 若 invalid 上升:先查
completion_only_loss、prompt 是否强调「只输出标签」、是否需加 few-shot 或约束解码(allowed tokens)。 - 结构化输出优先 JSON mode / grammar constraint,再谈 invalid 阈值。