大模型应用有哪些评测指标?

进阶高频对比约 6 分钟读完

一句话回答

指标要按任务类型选。分类、抽取这类有确定答案的任务,用准确率、精确率、召回率、F1 和精确匹配;开放生成的任务,BLEU、ROUGE 只比较字面重合,和人对质量的判断常常不一致,更多用语义相似度和模型按维度打分(正确性、完整性、忠实度、相关性、安全性)。最终还要看业务指标(采纳率、解决率、转人工率)和性能指标(延迟、成本)。没有一个指标能代表全部,通常组合使用。

详细解析

有确定答案的任务

  • 准确率:整体答对的比例。类别不平衡时会误导:95% 的邮件是正常邮件,全部判成"正常",准确率也有 95%
  • 精确率、召回率、F1:精确率是判为某类的样本中真正属于这类的比例,召回率是真正属于这类的样本中被找出来的比例,F1 = 2PR / (P + R)。多分类时按类别分别计算,再做宏平均(各类别直接平均)或微平均(先汇总计数再计算)
  • 抽取任务:按字段比较,比较前先规范化(去空格、统一日期格式和大小写);人名列表这类多值字段,用集合计算精确率和召回率
  • 结构化输出:JSON 能否解析、是否符合 Schema
  • 工具调用:是否选对了工具、参数是否正确

开放生成的任务

  • BLEU、ROUGE:统计输出和参考答案之间 n-gram(连续 n 个词)的重合程度。BLEU 偏重精确率,来自机器翻译;ROUGE 偏重召回率,来自自动摘要
  • 它们的局限:同义改写会被扣分,而"支持"和"不支持"只差一个字,重合度却很高;一个问题往往有多种好的回答,一个参考答案覆盖不了;中文还要先分词。所以只适合作为参考
  • 语义相似度:用 Embedding 计算输出和参考答案的余弦相似度,能容忍换说法,但对否定、数字这类关键细节同样不敏感
  • 模型打分:按维度让评委模型打分,这是开放生成任务的主要手段(见 LLM-as-a-Judge)
维度 判断什么 典型场景
正确性 和参考答案或已知事实是否一致 问答
完整性 要点有没有遗漏 总结、方案
忠实度 内容是否都有资料依据,有没有编造 RAG、摘要
相关性 是否回答了问题,有没有答非所问 所有对话
安全性 有没有有害内容、隐私泄露、越权的承诺 面向用户的应用

业务指标和性能指标

  • 业务指标:采纳率(代码补全被接受、生成的回复被直接发送)、解决率(客服对话不转人工就结束)、转人工率、满意度、点踩率、重新生成率
  • 性能指标:首 token 延迟和总耗时的 P95、P99,每次请求的 token 数和费用,每个成功任务的成本,错误率和超时率(见 首 Token 延迟、成本估算)

按任务选指标

任务 主要指标 辅助指标
分类、意图识别 各类别的 F1、混淆矩阵 准确率
信息抽取 字段级精确匹配、精确率、召回率 JSON 合法率
摘要 忠实度、完整性 ROUGE
RAG 问答 Recall@k、忠实度、正确性 引用是否准确
对话、客服 相关性、解决率、转人工率 满意度
代码生成 单元测试通过率(pass@k) 采纳率
Agent 任务完成率、成本、步数 工具调用的正确率

代码示例

多值字段(如抽取出的所有人名)在整个评测集上计算微平均的精确率、召回率和 F1:

TypeScript
const normalize = (s: string) => s.trim().toLowerCase()

function microPRF(samples: { predicted: string[]; expected: string[] }[]) {
  let tp = 0
  let predicted = 0
  let expected = 0
  for (const s of samples) {
    const P = new Set(s.predicted.map(normalize))
    const E = new Set(s.expected.map(normalize))
    tp += [...P].filter((x) => E.has(x)).length // 抽对的数量
    predicted += P.size
    expected += E.size
  }
  const precision = predicted ? tp / predicted : 0
  const recall = expected ? tp / expected : 0
  const f1 = precision + recall ? (2 * precision * recall) / (precision + recall) : 0
  return { precision, recall, f1 }
}

面试官可能追问

代码生成常说的 pass@k 是什么?

每个问题生成 k 个答案,只要有一个通过单元测试就算解决,pass@k 是解决的概率。直接生成 k 个来估算,结果波动很大,常用的无偏估计是:每题生成 n 个(n ≥ k),其中 c 个通过,pass@k = 1 − C(n − c, k) / C(n, k),再对所有题目取平均。它适合"可以多试几次、有测试能自动挑出正确答案"的场景。

准确率很高,为什么上线后效果还是不好?

常见原因:类别不平衡,准确率被多数类撑高,少数关键类别其实做得很差;评测集和线上分布不一致;指标和业务目标没对齐,比如意图识别的准确率很高,但识别错的恰好是最影响用户的那几类。要按类别看指标,并把离线指标和业务指标放在一起看。

离线指标和业务指标对不上,怎么办?

先看具体的样本:离线得分高、用户却不满意的对话,问题出在哪里。通常能发现评分细则漏了某个用户在意的维度,比如简洁、可操作。把这个维度补进评分标准,再积累一段时间的数据,看哪些离线指标的变化和业务指标的变化方向一致,以后优先参考这些指标。

易错点

  • 用 BLEU、ROUGE 评价对话或问答的质量
  • 类别不平衡时只看准确率
  • 只看质量不看成本和延迟,更强的模型往往也更慢、更贵
  • 只看平均值:延迟要看 P95、P99,质量要看表现最差的那一类问题

AI 模拟面试官

用自己的话回答,AI 对照参考答案打分、指出遗漏,再追问,最多 3 轮

登录后就可以和 AI 面试官对练,面试记录也会保存下来。登录

这道题你掌握了吗?

选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。

学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。