跳至内容

指标

为什么指标很重要

你无法改进你不衡量的事物。指标是使迭代成为可能的反馈循环。

在人工智能系统中,进展取决于运行大量实验——每个实验都是关于如何提高性能的一个假设。但如果没有清晰、可靠的度量指标,你就无法区分一个成功的实验(新分数与旧分数之间的正向差值)与一个失败的实验。

指标为你提供指引。它们让你量化改进、发现回退,并将优化工作与用户影响和业务价值对齐。

AI 应用中的指标类型

1. 端到端指标

端到端指标从用户的角度评估整个系统的性能,将 AI 应用视为一个黑箱。 这些指标仅根据系统的最终输出量化用户非常关心的关键结果。

示例:

  • 回答正确性:衡量来自检索增强生成(RAG)系统提供的答案是否准确。
  • 引用准确性:评估RAG系统所引用的参考是否被正确识别并且具有相关性。

优化端到端指标可确保实现与用户期望直接对齐的切实改进。

2. 组件级指标

组件级指标独立评估人工智能系统的各个组成部分。这些指标可立即付诸行动,便于进行有针对性的改进,但不一定与最终用户的满意度直接相关。

示例:

  • 检索准确率:衡量 RAG 系统检索相关信息的有效程度。较低的检索准确率(例如 50%)表明改进该组件可以提升整体系统性能。然而,仅改进某一组件并不保证端到端结果会更好。

3. 业务指标

业务指标将 AI 系统的性能与组织目标对齐,并量化切实的业务成果。这些指标通常是滞后指标,在部署一段时间(几天/几周/几个月)后计算得出。

示例:

  • 工单转移率:衡量由于部署 AI 助手而导致支持工单减少的百分比。

Ragas中的指标类型

在 Ragas 中,我们根据指标产生的输出类型对其进行分类。此分类有助于阐明每个指标的行为以及其结果如何被解释或聚合。三种类型为:

1. 离散指标

它们从预定义的类别列表中返回单个值。类别之间没有隐含的顺序。常见的用例包括将输出分类为诸如通过/不通过或良好/一般/差等类别。

示例:

from ragas_experimental.metrics import discrete_metric

@discrete_metric(name="response_quality", allowed_values=["pass", "fail"])
def my_metric(predicted: str, expected: str) -> str:
    return "pass" if predicted.lower() == expected.lower() else "fail"

2. 数值指标

这些返回在指定范围内的整数或浮点值。数值指标支持诸如 mean、sum 或 mode 之类的聚合函数,使它们适用于统计分析。

from ragas_experimental.metrics import numeric_metric

@numeric_metric(name="response_accuracy", allowed_values=(0, 1))
def my_metric(predicted: float, expected: float) -> float:
    return abs(predicted - expected) / max(expected, 1e-5)

my_metric.score(predicted=0.8, expected=1.0)  # Returns a float value

3. 排名指标

它们可同时评估多个输出,并根据预设的标准返回一个排序后的列表。当目标是将来自同一流水线的多个输出相互比较时,它们非常有用。

from ragas_experimental.metrics import ranked_metric
@ranked_metric(name="response_ranking", allowed_values=[0,1])
def my_metric(responses: list) -> list:
    response_lengths = [len(response) for response in responses]
    sorted_indices = sorted(range(len(response_lengths)), key=lambda i: response_lengths[i])
    return sorted_indices

my_metric.score(responses=["short", "a bit longer", "the longest response"])  # Returns a ranked list of indices

基于LLM的指标与非基于LLM的指标

非基于LLM的指标

这些度量是确定性函数,用于根据明确且有限的标准对预定义输入进行评估。

示例:

def my_metric(predicted: str, expected: str) -> str:
    return "pass" if predicted.lower() == expected.lower() else "fail"

何时使用:

  • 具有严格定义的正确结果的任务(例如数学解答、确定性任务,如预订代理更新数据库)。

基于LLM的指标

这些利用LLMs(大型语言模型)来评估结果,通常在正确性较为微妙或高度可变的情况下很有用。

示例:

from ragas_experimental.metrics import DiscreteMetric

my_metric = DiscreteMetric(
    name="response_quality",
    prompt="Evaluate the response based on the pass criteria: {pass_criteria}. Does the response meet the criteria? Return 'pass' or 'fail'.\nResponse: {response}",
    allowed_values=["pass", "fail"]
)

何时使用:

  • 具有多种有效结果的任务(例如,经改写的正确答案)。
  • 复杂的评估标准与人类或专家偏好一致(例如,在研究报告中区分“深度”与“浅显”的见解)。尽管可以使用更简单的指标(长度或关键词计数),但基于大型语言模型(LLM)的指标能更有效地捕捉细微的人类判断。

为您的应用选择合适的度量指标

1. 优先考虑端到端指标

首先关注反映整体用户满意度的指标。虽然许多方面会影响用户满意度——例如事实正确性、回复语气和解释深度——但最初应集中于那些能为用户带来最大价值的少数维度(例如在基于 RAG 的助手中,答案和引用的准确性)。

2. 确保可解释性

设计指标要足够清晰,以便整个团队都能理解并进行推理。例如:

  • text-to-SQL 系统中的执行准确性:生成的 SQL 查询是否返回与由领域专家编写的基准查询完全相同的数据集?

3. 强调客观指标而非主观指标

优先考虑具有客观标准的指标,尽量减少主观判断。通过让团队成员对样本进行独立标注并测量一致性水平来评估客观性。较高的评审者间一致性(≥80%)表示更高的客观性。

4. 少数强信号胜过大量弱信号

避免大量采用那些发出微弱信号并妨碍清晰决策的指标。相反,应选择更少但能提供强烈且可靠信号的指标。例如:

  • 在对话式人工智能中,使用单一指标(例如目标准确性,即用户与 AI 交互的目标是否达成)比使用诸如连贯性或有用性等多个薄弱指标更能有效地代表系统的性能。