[控场AI]
· 7 分钟阅读· 3,606 字

先定指标,再建看板:LLM评估的指标选择指南

先定指标,再建看板:LLM评估的指标选择指南

先定功能形态再选评估指标,避免看板沦为装饰。

文章指出,许多团队在搭建LLM评估看板时顺序错误:先选指标再堆图表,导致生产表现与看板脱节。正确做法是先明确功能形态(分类器、生成器、RAG问答),再选择匹配的指标。分类器应关注F1、精确率/召回率和AUC,尤其注意标签不平衡时准确率的误导性;生成器的困惑度仅适用于可比模型的文本预测对比,不能证明任务成功;RAG功能需以忠实度为核心,搭配上下文相关性和答案相关性。文章还提供了动手示例和指标选择清单,强调“先画指标地图,再建看板”。

很多团队花大力气搭建了精美的LLM评估看板,最后却发现对产品是否真正有效一无所知。问题往往出在顺序上:先选了一个"看起来权威"的指标,再围绕它堆图表,结果生产环境的表现和看板上的曲线讲着两个不同的故事。正确的做法是反过来——先明确你的功能形态(分类器、排序器、生成器还是基于检索的问答器),再选择与这个形态匹配的评估指标。

LLM评估指标选择

分类器类功能:F1、精确率/召回率与AUC

如果你的LLM功能最终输出的是一个"是/否"判断——比如是否含有毒性内容、是否需要升级处理、意图A还是意图B——那么即便模型内部用自然语言推理,它本质上仍是一个分类问题,应该用经典分类指标来评估。

为什么准确率会骗人

在标签不平衡的场景下,准确率极具误导性。一个永远预测多数类的模型,可以在准确率上拿到很高的分数,却一个真正关心的案例都没抓到。F1分数是精确率和召回率的调和平均,任何一侧偏弱都会把F1拉低,因此模型无法通过"只追求精确率而漏掉所有正例"或"把所有样本都判为正例来抬高召回率"来钻空子。

作者的做法是:需要判断哪种失败模式更伤用户时,就把精确率和召回率拆开看。F1对两者等权,但你的错误成本未必相等。

标签不平衡(class imbalance) 指不同类别的样本数量差异悬殊,例如在滥用检测中,99%的样本为正常、仅1%为滥用。此时准确率会偏向多数类:一个将所有样本判为“正常”的模型仍可获得99%的准确率,却完全漏掉所有真正需要关注的滥用案例。衡量不平衡影响的一个常用指标是正例率(prevalence),即正例在数据中的占比;正例率越低,准确率越容易虚高,而精确率、召回率和F1对少数类的表现更为敏感。因此,在标签不平衡场景下,应优先使用这些指标来评估模型对少数类的识别能力。

AUC的适用边界

当模型输出的是分数、且尚未固定决策阈值时,AUC-ROC适合在同一份数据上比较不同模型。它衡量的是随着阈值滑动,正例排在负例之上的能力。AUC接近0.5意味着在该数据集上接近随机,接近1.0则是强区分度。

但在稀有正例场景(欺诈、滥用、缺陷检测)中,AUC可能看起来很漂亮,实际大多数正例预测仍是错的——因为在一个巨大的负例池上,哪怕假阳性率很低,也会产生大量误报。正例稀少时,应报告精确率和召回率,或报告你计划上线阈值处的F1,并同时附上AUC。

AUC-ROC 衡量的是模型将正例排在负例之上的能力,等价于随机抽取一个正例和一个负例时,正例得分高于负例的概率。它只关心排序,不依赖具体阈值,因此适合在阈值未定时比较模型。精确率(precision) 指预测为正的样本中真正为正的比例;召回率(recall) 指实际正例中被正确预测的比例。在稀有正例场景下,即使假阳性率(FPR)很低,由于负例池巨大,假阳性的绝对数量仍可能远超真阳性,导致精确率极低。因此,AUC高不代表实际误报少,必须结合精确率、召回率或在业务可行阈值处的F1来综合判断。

生成器类功能:困惑度的能与不能

自回归模型为下一个token分配概率,困惑度把这些概率汇总成一个数字:越低,说明模型对留出文本越不意外。在训练过程中、或在相同tokenizer下用同一份未见文本比较模型时,困惑度是有用的信号。但一旦换了tokenizer,或测试数据泄漏进训练集,比较就失效了。

更重要的是,困惑度衡量的是文本预测能力,不是你任务上的成功与否。困惑度更低不保证上线效果更好。一个模型可以给流畅的续写赋予高概率,同时照样产生幻觉、无视指令、或通不过你的评分标准。作者的定位很清晰:困惑度是开发阶段的同类模型对比信号,而不是聊天、Copilot或Agent可以交付给用户的证据。

生成器真正需要的是任务级评估:评分量表、人工审核、在合适场景下使用模型裁判,以及针对用户请求的检查。只有端到端测量应用,才知道功能是否可用。

困惑度(perplexity) 是语言模型对一段文本的“意外程度”的度量,数学上等于模型分配给每个token的平均负对数似然的指数。困惑度越低,说明模型对文本的预测越准。但困惑度高度依赖tokenizer(分词器):不同分词器切分的token粒度不同,同一段文本的token数量不同,困惑度数值无法直接比较。此外,困惑度只反映模型对文本的统计预测能力,不涉及事实正确性、指令遵循或安全性。因此,它适合在相同tokenizer和相同留出集上比较模型训练进展,但不能作为任务级成功或上线质量的证据。

RAG与引用类功能:忠实度而非单一准确率

检索增强生成和带引用的回答提出了一个不同的问题:模型是老老实实待在检索到的上下文里,还是编造了细节?忠实度(faithfulness,有时也叫groundedness)检验的是答案中的主张能否被提供的来源支撑,针对的是"添加了上下文中不存在的内容"这类幻觉。

关键区分在于:忠实度与答案是否正确是两回事。一个答案可以完全忠实于错误的源文档。因此它需要与上下文相关性(是否检索到了正确材料)和答案相关性(模型是否回答了问题)配对使用,而不是作为单一的头部KPI。

Snorkel AI的Alex Ratner在Chain of Thought第57期节目中说得很直接:想让模型做不同的事,不是去动神经元的"脑部手术",也不是重新发明算法架构,而是去获取数据。这个观点同样适用于评估数据:选对与功能匹配的测量工具,然后投资于标签和评分量表,让缺口在用户发现之前暴露出来。

忠实度(faithfulness) 有时也称接地性(groundedness),衡量生成答案中的每个主张是否都能在检索到的上下文中找到依据。它关注的是模型是否“编造”了上下文之外的内容。上下文相关性(context relevance) 衡量检索到的文档是否与用户问题相关;答案相关性(answer relevance) 衡量生成的答案是否直接回应了问题。这三者构成RAG评估的三角:忠实度防止幻觉,上下文相关性确保检索质量,答案相关性确保回答切题。一个答案可以忠实于错误的源文档(忠实但错误),因此必须三者结合,而不能只依赖单一指标。

动手:在带标签的留出集上跑F1和AUC

对于二分类功能,先从一份反映生产分布偏斜的带标签留出集开始。在验证切片上,基于你能接受的假阳性和假阴性成本选定阈值,然后报告该阈值下的F1——这是利益相关者能感受到的故事。同时保留打分样本上的AUC,用于在锁定截断值之前比较模型。

下面是一个最小Python示意(非生产代码):

# 示意:二分类标签、阈值化预测以及留出集上的分数
from sklearn.metrics import f1_score, roc_auc_score, precision_recall_fscore_support

y_true = [0, 1, 1, 0, 1]
y_score = [0.2, 0.9, 0.7, 0.1, 0.6]
threshold = 0.5
y_pred = [1 if s >= threshold else 0 for s in y_score]

f1 = f1_score(y_true, y_pred)
auc = roc_auc_score(y_true, y_score)
p, r, _, _ = precision_recall_fscore_support(y_true, y_pred, average="binary")
print(f"F1={f1:.3f}  AUC={auc:.3f}  precision={p:.3f}  recall={r:.3f}")

对于多分类路由,使用逐类F1,并选择一种你能用错误成本辩护的 averaging 方式。

指标选择清单

  • 标签不平衡的分类器:报告上线阈值处的F1,加上精确率和召回率;在选定截断值之前,用AUC在同一数据上比较模型。
  • 稀有正例:不要把AUC当作充分条件,要检查可行阈值下的精确率。
  • 生成器功能:困惑度只用于留出文本上的可比模型,然后对上线行为做任务级评估。
  • RAG或引用功能:忠实度搭配上下文相关性和答案相关性;忠实但错误的答案仍然会让用户失望。
  • 先画指标地图,再建看板。

这套思路的核心可以浓缩成一句话:测量数据也是一种数据,选对仪器,再投资于能揭示真实缺口的标签与量表。先定指标,后建看板,评估才不会沦为装饰。

#LLM评估#F1分数#AUC-ROC#困惑度#忠实度#RAG评估#评估指标选择
分享:

相关推荐