NLP 模型评估指标怎么选?分类、生成、翻译指标详解
NLP 评估的核心原则:指标必须和业务目标对齐。垃圾邮件检测最怕漏判(看召回率),医疗文本分类最怕误判(看精确率),机器翻译要看流畅度也要看忠实度——同一个 F1 分数在不同场景下含义完全不同。
按任务类型选择指标的速查表:
| 任务 | 核心指标 | 辅助指标 |
|---|---|---|
| 文本分类 | F1(不平衡时)、Accuracy(平衡时) | 混淆矩阵、AUC-ROC |
| 命名实体识别 | 实体级 F1(严格匹配) | 宽松匹配 F1、按实体类型分别看 |
| 机器翻译 | BLEU | COMET、人工评估 |
| 文本摘要 | ROUGE-L | 事实一致性、人工评估 |
| 问答 | EM + F1 | BERTScore |
| 生成式 | 人工评估为主 | LLM-as-Judge、BERTScore |
分类指标:精确率、召回率、F1 怎么选
精确率(Precision)= 模型预测为正的有多少真的是正。召回率(Recall)= 真正的正例有多少被模型找到了。F1 是两者的调和平均,偏向更低的那个——精确率 0.9 但召回率 0.3,F1 只有 0.45。
选哪个取决于犯哪种错的代价更高:漏掉一个欺诈交易代价大→优先召回率;误杀正常用户代价大→优先精确率。不确定就用 F1。
多分类时,宏平均(macro)把每个类平等对待,微平均(micro)让大类主导结果。类别不平衡时宏平均更能反映少数类的表现。
生成任务指标:BLEU 和 ROUGE 的局限
BLEU 算预测和参考答案的 n-gram 重合度,加简洁性惩罚。范围 0-1,越高越好。但 BLEU 只看字面重叠,"我很开心"和"我非常高兴"语义相同但 BLEU 分很低。而且 BLEU 对短翻译偏宽容(n-gram 容易命中),对长翻译偏严苛。
ROUGE 面向摘要任务,侧重召回率——参考答案里的关键信息,模型摘要覆盖了多少?ROUGE-L 基于最长公共子序列,比 ROUGE-1/2 更能容忍语序变化。
两者共同问题:无法评估语义等价但表达不同的情况。所以生成任务必须配合人工评估或语义指标(BERTScore、COMET)。
语言模型的困惑度
困惑度(Perplexity)= 模型对测试集的平均负对数似然的指数:PP = exp(-1/N ∑ log P(w_i|context))。直观理解:模型在每个位置上平均有多少个"候选词"在犹豫——越少说明越确定,PPL 越低越好。GPT-3 在 Penn Treebank 上 PPL 约 20,早期 n-gram 模型 PPL 在 100+。
PPL 的局限:只衡量模型对文本的"惊讶程度",不直接反映下游任务质量。一个 PPL 很低的模型可能生成重复且无聊的文本。
实操建议
- 先定指标再开发:别等模型训完了才想怎么评估。指标决定优化方向。
- 自动指标不够时加人工评估:分类任务自动指标够用,生成任务必须人工抽查。50-100 条人工标注的抽样评估比 10 万条自动评分更有指导意义。
- 做错误分析:看混淆矩阵找模型最混淆的类对,读具体 case 找系统性错误模式——"我们模型在含否定句的情感分析上 F1 特别低"比"平均 F1 是 0.82"有用得多。
- 统计显著性:F1 从 0.81 涨到 0.82 可能只是随机波动。用 Bootstrap 或配对 t 检验确认差异是否显著,否则别急着上线新模型。
pythonfrom sklearn.metrics import classification_report # 一行输出所有分类指标 print(classification_report(y_true, y_pred, target_names=class_names))