准确率(Accuracy)是最直观的分类指标:预测正确的样本数占总样本数的比例。微调验收时,它适合作为「第一眼总览」,但在类别不平衡或多标签场景下,单独使用容易误导。
段末注释:Accuracy 统计的是样本级完全匹配比例;与 Trainer 日志中的 mean_token_accuracy(token 级)不是同一指标。
系列索引:微调评估指标导读
一、直观含义
对 (N) 个测试样本:
$$
\text{Accuracy} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}[\hat{y}_i = y_i]
$$
人话:100 条测试里猜对几条。
- 情绪六分类中 accuracy = 0.625 → 400 条约 250 条标签完全正确。
- 生成式分类需先把模型输出解析为离散标签(如正则抽
fear|joy|...),再与真值比较。
二、使用场景与所需数据
| 场景 | 适用性 | 数据要求 |
|---|---|---|
| 多类分类,类别大致均衡 | 高 | 每条样本有唯一真值标签 |
| 类别严重不平衡 | 低 | 需配合 macro F1 |
| 开放文本生成 | 不适用 | 改用 BLEU / ROUGE / EM |
| 排序 / 回归 | 不适用 | 改用 MSE、Spearman 等 |
LLM 微调中的两种用法:
- 生成式分类:
generate()→ 解析字符串 → 与标签比较(解析规则见 Invalid 预测率)。 - 分类头微调:在 LLM 上接 linear head,argmax logits(传统 accuracy)。
三、计算方式
3.1 公式
已见上式。多标签场景常用 subset accuracy(所有标签全对才算对)或 label-wise accuracy,定义不同,需事先约定。
3.2 代码(scikit-learn)
1 | from sklearn.metrics import accuracy_score |
生成式 pipeline 中应并列报告 Invalid 预测率:
1 | invalid_rate = sum(p not in LABEL_SET for p in y_pred) / len(y_pred) |
模型输出无法解析为合法标签时,通常计为错误,并单独报告 invalid_rate。
3.3 与 mean_token_accuracy 对比
| 样本级 Accuracy | mean_token_accuracy | |
|---|---|---|
| 单位 | 整条预测 | 每个 token |
| 计算阶段 | 推理 generate 后 | 训练 teacher forcing |
| 典型用途 | test 验收 | 训练监控 |
四、如何解读
六类情绪、400 条 test 子集示例(基座零样本 + 固定 system prompt):
| 指标 | 数值 |
|---|---|
| accuracy | 0.625 |
| macro_f1 | 0.482 |
accuracy 明显高于 macro_f1,说明多数类(如 joy)拉高了总分,少数类 recall 偏弱——这正是 accuracy 在不平衡数据上的典型陷阱。
解读 checklist:
五、局限性与常见误用
- 类别不平衡:全猜多数类也能得较高 accuracy(如 80% 样本是 A,全猜 A → accuracy 0.8)。
- 忽略错误代价不对称:医疗诊断里假阴性 vs 假阳性代价不同,accuracy 一视同仁。
- 生成式解析偏差:正则过严把合法变体标为 invalid,accuracy 被压低;过松则虚高。
- 不能反映「差一点」:预测
fearfulvs 真值fear与预测joy同为错,accuracy 同等对待。 - 小 test 集方差大:400 条上 0.625 vs 0.650 可能统计上不显著。
六、与其他指标的关系
| 指标 | 何时优先 |
|---|---|
| macro F1 | 多类不平衡 |
| 混淆矩阵 | 需知「哪两类互混」 |
| Invalid 预测率 | 格式不可解析的样本比例 |
| eval_loss | 训练过程;与 accuracy 可脱节 |
七、实践建议
- 永远报告 macro F1 作为不平衡多分类的主指标,accuracy 作辅助。
- 生成式评估设
EVAL_LIMIT控制成本,但微调前后 limit 必须一致。 - 记录 invalid 预测率(见 Invalid 预测率);微调后 invalid 上升说明格式约束退化。
- 对比表格建议列:
stage | accuracy | macro_f1 | invalid_rate | Δ。