跳转到主要内容

评估指标

您无法改进您不测量的东西。以下是如何判断您的模型是否真正有效。

分类指标

Accuracy

最简单的指标 - 您正确预测的百分比是多少?
Accuracy = 正确预测 / 总预测
示例: 90/100 正确 = 90% accuracy 问题:在数据不平衡时具有误导性。如果 95% 的电子邮件不是垃圾邮件,一个总是说”不是垃圾邮件”的模型会获得 95% 的 accuracy。

Precision & Recall

Precision:在您预测为积极的那些中,有多少实际上是积极的? Recall:在所有实际的积极中,您找到了多少? 垃圾邮件检测示例:
  • Precision: 在标记为垃圾邮件的电子邮件中,有多少实际上是垃圾邮件?
  • Recall: 在所有垃圾邮件中,您捕获了多少?

F1 Score

将 precision 和 recall 组合成一个数字。
F1 = 2 × (Precision × Recall) / (Precision + Recall)
当您同样关心假阳性和假阴性时使用。

生成指标

Perplexity

模型对测试数据的惊讶程度。越低越好。
  • 好模型: Perplexity = 10-50
  • 坏模型: Perplexity = 100+

BLEU Score

将生成的文本与参考文本进行比较。用于翻译、摘要。
  • BLEU = 0: 无重叠
  • BLEU = 1: 完美匹配
  • BLEU > 0.3: 通常不错

Human Evaluation

有时最好的指标是询问人类:
  • 这个响应有用吗?
  • 这个摘要是否抓住了要点?
  • 这个翻译自然吗?

Loss 曲线

Training Loss vs Validation Loss

训练期间观察两者: 良好模式
  • 两者都下降
  • 保持接近
  • 最终趋于平稳
过拟合
  • Training loss 持续下降
  • Validation loss 增加
  • 差距扩大
欠拟合
  • 两者都保持高位
  • 改进很少
  • 需要更多容量或数据

特定任务的指标

Image Classification

  • Top-1 Accuracy: 正确类别是最高预测
  • Top-5 Accuracy: 正确类别在前 5 个预测中
  • Confusion Matrix: 查看哪些类别被混淆

Object Detection

  • mAP (mean Average Precision): 整体检测质量
  • IoU (Intersection over Union): 框重叠的程度

NER/Token Classification

  • 实体级 F1: 完整实体正确
  • Token 级 accuracy: 单个 token 正确

快速参考

任务主要指标良好分数
二元分类F1 Score> 0.8
多类分类Accuracy> 0.9
生成Perplexity< 50
翻译BLEU> 0.3
摘要ROUGE> 0.4
Q&AExact Match> 0.7

AITraining 中的增强评估

AITraining 支持具有多个内置和自定义指标的增强评估。

启用增强评估

aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path ./data.jsonl \
  --project-name my-model \
  --use-enhanced-eval \
  --eval-metrics "perplexity,bleu"

可用指标

指标描述
perplexity模型不确定性(越低越好)
bleu与参考的 N-gram 重叠
rouge面向 recall 的摘要评估
accuracy分类 accuracy
f1分类的 F1 score

Python API

from autotrain.trainers.clm.params import LLMTrainingParams

params = LLMTrainingParams(
    model="google/gemma-3-270m",
    data_path="./data.jsonl",
    project_name="my-model",

    use_enhanced_eval=True,
    eval_metrics=["perplexity", "bleu"],
)

自定义指标

注册自定义指标以进行专门评估:
from autotrain.metrics import register_metric

@register_metric("my_custom_metric")
def compute_custom_metric(predictions, references):
    # 您的自定义评分逻辑
    score = ...
    return {"my_custom_metric": score}

# 然后在训练中使用它
params = LLMTrainingParams(
    ...
    use_enhanced_eval=True,
    eval_metrics=["perplexity", "my_custom_metric"],
)

实用提示

  1. 始终使用验证集 - 永远不要在训练数据上评估
  2. 考虑任务 - Accuracy 并不总是最好的
  3. 观察趋势 - 改进比绝对数字更重要
  4. 多个指标 - 没有单一指标能说明全部情况

危险信号

  • 训练 accuracy 100%,验证 60% → 过拟合
  • 所有指标卡住 → Learning rate 可能错误
  • 指标跳跃 → Batch size 太小
  • 立即获得完美分数 → 数据泄漏或错误

下一步