跳到内容

Nvidia 指标

答案准确性

答案准确性衡量模型响应与给定问题的参考标准答案之间的一致性。这通过两个不同的“LLM 作为评委”提示来完成,每个提示返回一个评分(0、2 或 4)。该指标将这些评分转换为 [0,1] 的比例,然后取两个评委分数的平均值。分数越高表明模型的答案与参考答案越匹配。

  • 0响应不准确或未回答与参考相同的问题。
  • 2响应参考部分一致。
  • 4响应参考完全一致。

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import AnswerAccuracy

sample = SingleTurnSample(
    user_input="When was Einstein born?",
    response="Albert Einstein was born in 1879.",
    reference="Albert Einstein was born in 1879."
)

scorer = AnswerAccuracy(llm=evaluator_llm) # evaluator_llm wrapped with ragas LLM Wrapper
score = await scorer.single_turn_ascore(sample)
print(score)
输出
1.0

如何计算

步骤 1: LLM 使用两个不同的模板生成评分以确保鲁棒性

  • 模板 1: LLM 将响应参考进行比较,并以 0、2 或 4 的等级评分。
  • 模板 2: LLM 再次评估同一个问题,但这次响应参考的角色互换。

这种双重视角方法确保了答案准确性的公平评估。

步骤 2: 如果两个评分都有效,则最终分数为 score1 和 score2 的平均值;否则,取有效的那个评分。

计算示例

  • 用户输入: “爱因斯坦何时出生?”
  • 响应: “阿尔伯特·爱因斯坦出生于 1879 年。”
  • 参考: “阿尔伯特·爱因斯坦出生于 1879 年。”

假设两个模板都返回评分 4(表示完全匹配),转换如下

  • 评分 4 对应于 [0,1] 比例上的 1
  • 两个分数的平均值:(1 + 1) / 2 = 1

因此,最终的答案准确性分数为 1

相似的 Ragas 指标

  1. 答案正确性:该指标通过考虑语义和事实相似性来衡量生成答案与标准答案的准确性。

  2. 评分标准分数:基于评分标准的评分指标允许根据用户定义的评分标准进行评估,其中每个评分标准概述了具体的评分要求。LLM 根据这些自定义描述评估响应,确保一致和客观的评估过程。

指标对比

答案正确性 与 答案准确性

  • LLM 调用次数: 答案正确性需要三次 LLM 调用(两次用于将响应和参考分解为独立语句,一次用于分类),而答案准确性使用两次独立的 LLM 判断。
  • Token 使用量: 答案正确性由于其详细分解和分类过程消耗更多 Token。
  • 可解释性: 答案正确性通过提供对事实正确性和语义相似性的详细洞察来提供高可解释性,而答案准确性提供了一个直接的原始分数。
  • 鲁棒评估: 答案准确性通过双 LLM 评估确保一致性,而答案正确性通过深入评估响应质量提供全面的视图。

答案准确性 与 评分标准分数

  • LLM 调用次数:答案准确性进行两次调用(每个 LLM 评委一次),而评分标准分数仅需要一次。
  • Token 使用量:答案准确性最低,因为它只输出一个分数,而评分标准分数会生成推理,从而增加 Token 消耗。
  • 可解释性:答案准确性提供没有理由的原始分数,而评分标准分数提供带有判断的推理。
  • 效率:答案准确性非常轻量级,并且与较小的模型配合得很好。

上下文相关性

上下文相关性评估检索到的上下文(块或段落)是否与用户输入相关。这通过两个独立的“LLM 作为评委”提示调用来完成,每个提示以 0、1 或 2 的等级评估相关性。然后将评分转换为 [0,1] 的比例并取平均值以生成最终分数。分数越高表明上下文与用户查询的匹配度越高。

  • 0 → 检索到的上下文与用户查询完全不相关。
  • 1 → 上下文部分相关。
  • 2 → 上下文完全相关。

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import ContextRelevance

sample = SingleTurnSample(
    user_input="When and Where Albert Einstein was born?",
    retrieved_contexts=[
        "Albert Einstein was born March 14, 1879.",
        "Albert Einstein was born at Ulm, in Württemberg, Germany.",
    ]
)

scorer = ContextRelevance(llm=evaluator_llm)
score = await scorer.single_turn_ascore(sample)
print(score)
输出
1.0

如何计算

步骤 1: 使用两个不同的模板(template_relevance1 和 template_relevance2)提示 LLM,以评估检索到的上下文与用户查询的相关性。每个提示返回一个相关性评分 012

步骤 2: 每个评分通过除以 2 归一化到 [0,1] 的比例。如果两个评分都有效,则最终分数为这些归一化值的平均值;如果只有一个有效,则使用该评分。

计算示例

  • 用户输入: “阿尔伯特·爱因斯坦何时何地出生?”
  • 检索到的上下文
  • “阿尔伯特·爱因斯坦出生于 1879 年 3 月 14 日。”
  • “阿尔伯特·爱因斯坦出生于德国符腾堡的乌尔姆。”

在此示例中,检索到的两个上下文共同通过提供阿尔伯特·爱因斯坦的出生日期和地点,完全回答了用户的查询。因此,两个提示都会将组合上下文评分定为 2(完全相关)。每个评分归一化后得到 1.0 (2/2),对两个结果取平均值后,最终的上下文相关性得分仍为 1

相似的 Ragas 指标

  1. 上下文精确率:它衡量检索到的上下文中与回答用户查询相关的比例。它计算为所有检索到的块的平均 precision@k,表明检索系统对相关信息排名的准确程度。

  2. 上下文召回率:它量化了成功检索相关信息的程度。它计算为在检索结果中找到的相关论断(或上下文)数量与参考中相关论断总数的比率,确保不会遗漏重要信息。

  3. 评分标准分数:这是一个通用指标,根据用户定义的标准评估响应,并且可以通过将评分标准与要求对齐来调整以评估答案准确性、上下文相关性或响应一致性。评分等级可以灵活调整以适应用户需求。

上下文精确率 和 上下文召回率 与 上下文相关性

  • LLM 调用次数: 上下文精确率和上下文召回率各需要一次 LLM 调用,一次验证上下文的有用性以获取参考(判断“1”或“0”),一次将每个答案句子分类为可归因(二元“是”(1) 或“否”(0)),而上下文相关性使用两次 LLM 调用以提高鲁棒性。
  • Token 使用量: 上下文精确率和上下文召回率消耗更多 Token,而上下文相关性更节省 Token。
  • 可解释性: 上下文精确率和上下文召回率通过详细的推理提供高可解释性,而上下文相关性提供没有解释的原始分数。
  • 鲁棒评估: 上下文相关性通过双 LLM 判断提供更鲁棒的评估,相比之下,上下文精确率和上下文召回率是单次调用方法。

响应一致性

响应一致性衡量响应在多大程度上得到检索到的上下文的支持或“基于”检索到的上下文。它评估响应中的每个论断是否可以在提供的上下文中找到,无论是全部还是部分。

  • 0 → 响应完全基于上下文。
  • 1 → 响应部分基于上下文。
  • 2 → 响应完全基于上下文(每个语句都可以在检索到的上下文中找到或从中推断出来)。

from ragas.dataset_schema import SingleTurnSample
from ragas.metrics import ResponseGroundedness

sample = SingleTurnSample(
    response="Albert Einstein was born in 1879.",
    retrieved_contexts=[
        "Albert Einstein was born March 14, 1879.",
        "Albert Einstein was born at Ulm, in Württemberg, Germany.",
    ]
)

scorer = ResponseGroundedness(llm=evaluator_llm)
score = await scorer.single_turn_ascore(sample)
print(score)
输出
1.0

如何计算

步骤 1: 使用两个不同的模板提示 LLM,以评估响应相对于检索到的上下文的一致性。每个提示返回一个一致性评分 012

步骤 2: 每个评分通过除以 2 归一化到 [0,1] 的比例(即,0 变为 0.0,1 变为 0.5,2 变为 1.0)。如果两个评分都有效,则最终分数计算为这些归一化值的平均值;如果只有一个有效,则使用该评分。

计算示例

  • 响应: “阿尔伯特·爱因斯坦出生于 1879 年。”
  • 检索到的上下文
  • “阿尔伯特·爱因斯坦出生于 1879 年 3 月 14 日。”
  • “阿尔伯特·爱因斯坦出生于德国符腾堡的乌尔姆。”

在此示例中,检索到的上下文提供了阿尔伯特·爱因斯坦的出生日期和地点。由于响应的论断得到上下文的支持(即使日期是部分提供的),两个提示都可能会将一致性评分定为 2(完全基于上下文)。将评分 2 归一化后得到 1.0 (2/2),对两个归一化评分取平均值后,最终的响应一致性得分仍为 1

相似的 Ragas 指标

  1. 忠实度:该指标衡量响应与检索到的上下文在事实上的多大程度一致,确保响应中的每个论断都得到所提供信息的支持。忠实度评分范围为 0 到 1,分数越高表示一致性越好。

  2. 评分标准分数:这是一个通用指标,根据用户定义的标准评估响应,并且可以通过将评分标准与要求对齐来调整以评估答案准确性、上下文相关性或响应一致性。

指标对比

忠实度 与 响应一致性

  • LLM 调用次数: 忠实度需要两次调用进行详细的论断分解和判断,而响应一致性使用两次独立的 LLM 判断。
  • Token 使用量: 忠实度消耗更多 Token,而响应一致性更节省 Token。
  • 可解释性: 忠实度为每个论断提供透明的推理,而响应一致性提供原始分数。
  • 鲁棒评估: 忠实度结合用户输入进行全面评估,而响应一致性通过双 LLM 评估确保一致性。