标签: deepeval

  • DeepEval Faithfulness Metric 的已知缺陷:idk 不扣分问题

    背景

    在使用 DeepEval 对 GraphRAG 系统进行无标准答案(no-reference)评测时,我们发现 FaithfulnessMetric 在特定场景下会给出误导性的满分结果。

    问题现象

    我们向 GraphRAG 提出了一个关于 5GC PDU Session 建立流程的复杂问题。系统返回了详细的技术回答(涉及 AMF、SMF、UPF、PCF 等网元的具体职责),但检索到的 context 仅包含 3GPP 文档的目录结构,例如:

    The document contains a section '5.6 Session Management' with several sub-subsections.
    The document contains a section '5.2 Network Access Control' with several sub-subsections.
    

    Context 中没有任何实质性的技术内容,但 Faithfulness 评分为 1.00(满分)

    根因分析

    Faithfulness metric 的评估分为 4 步:

    Step 作用
    1. Truths 提取 从 retrieval_context 提取事实列表
    2. Claims 提取 从 actual_output 提取声明列表
    3. Verdicts 判定 将每条 claim 与 context 比对,判定 yes/no/idk
    4. Score 计算 根据 verdicts 计算最终分数

    关键在于 Step 3 的判定规则:

    • yes — claim 与 context 一致
    • no — claim 与 context 直接矛盾
    • idk — context 中找不到相关信息,无法判断

    以及 Step 4 的默认计分公式

    score = (总数 - no的数量) / 总数
    

    idk 不计入扣分。 只有明确矛盾(no)才会降低分数。

    实际案例

    我们的评测中,LLM judge(换用更严格的模型后)对 20 条 claims 全部判定为 idk

    {
      "verdicts": [
        {"verdict": "idk"},
        {"verdict": "idk"},
        ...  // 共 20 条,全部 idk
      ]
    }
    

    计分结果:score = (20 - 0) / 20 = 1.00

    最终 reason 输出:

    “The score is 1.00 because there are no contradictions; the actual output fully aligns with the retrieval context.”

    这显然是误导性的 — 回答中的所有声明都没有被 context 支撑,但因为也没有被”矛盾”,所以得了满分。

    本质问题

    Faithfulness 衡量的是“有没有与 context 矛盾”,而不是“有没有被 context 支撑”

    这两个是完全不同的维度:

    场景 Faithfulness Groundedness
    回答完全基于 context
    回答正确但 context 无关 高(无矛盾) 低(无支撑)
    回答与 context 矛盾

    当 retrieval context 只包含目录级、摘要级信息时,几乎不可能与任何具体声明产生”直接矛盾”,Faithfulness 就会永远满分。

    解决方案

    方案 1:开启 penalize_ambiguous_claims

    DeepEval 提供了内置参数:

    FaithfulnessMetric(model=model, threshold=0.5, penalize_ambiguous_claims=True)
    

    开启后计分公式变为:

    score = (总数 - no的数量 - idk的数量) / 总数
    

    此时 20 条全 idk 的分数为:(20 - 0 - 20) / 20 = 0.00,更真实地反映了 context 对回答的支撑程度。

    方案 2:补充 Groundedness 指标

    使用 GEval 自定义一个 Groundedness metric,直接评估回答是否被 context 支撑:

    GEval(
        name="Groundedness",
        criteria="Determine whether the actual output is fully supported and grounded by the retrieval context. "
                 "Penalize claims in the output that cannot be traced back to specific information in the retrieval context.",
        evaluation_params=[SingleTurnParams.INPUT, SingleTurnParams.ACTUAL_OUTPUT, SingleTurnParams.RETRIEVAL_CONTEXT],
        model=model,
        threshold=0.5,
    )
    

    建议

    两个方案并用:
    – 保留 Faithfulness(开启 penalize_ambiguous_claims)检测矛盾和无支撑
    – 增加 Groundedness 从正面评估支撑程度
    – 在报告中注明 Faithfulness 的局限性,避免误读

    补充缺陷:总结性 claim 被误判为 idk

    即使 context 中包含了具体的细节信息,当 actual output 对这些细节做了归纳总结时,judge 仍然可能将其判为 idk

    实际案例

    Context 中包含了 PDU Session 建立的具体步骤细节(AMF 处理注册、SMF 选择 UPF、N4 会话建立等),而 actual output 中有一条总结性 claim:

    “从UE尝试访问特定DNN直到实现有效的用户面转发,整个过程涉及到了多个核心网元之间的紧密合作,每个组件都扮演着不可或缺的角色。”

    Judge 的判定:

    {
      "verdict": "idk",
      "reason": "The claim is a summary statement; the context provides specific procedural details but does not directly confirm this overall description."
    }
    

    原因

    Faithfulness 的 prompt 对 judge 有严格约束:

    “Only use ‘no’ if retrieval context DIRECTLY CONTRADICTS the claim — never use prior knowledge.”
    “Use ‘idk’ for claims not backed up by context — do not assume your knowledge.”

    Judge 被要求做字面级匹配,而不是语义级推理。即使 context 中的细节完全可以推导出这个总结,但因为 context 没有”直接确认”这句话,judge 就只能判 idk

    影响

    对于 RAG 系统来说,回答本来就应该基于 context 做归纳总结,这是正常且期望的行为。但 Faithfulness 的字面级判定会将这类合理总结视为”无支撑”,导致开启 penalize_ambiguous_claims 后分数偏低。

    可能的改进

    DeepEval 的 FaithfulnessMetric 支持 evaluation_template 参数,可以继承 FaithfulnessTemplate 并修改 verdict guidelines,将”可从 context 细节合理推导出的总结”纳入 yes 的判定范围。但这需要修改评测标准的语义,应谨慎使用。

    结论

    Faithfulness metric 的设计初衷是检测 hallucination(幻觉),即模型是否编造了与 context 矛盾的信息。但它存在两个层面的局限:

    1. idk 默认不扣分 — context 无关时永远满分(通过 penalize_ambiguous_claims=True 解决)
    2. 字面级匹配过于严格 — 合理的归纳总结也会被判为无支撑(需自定义 template 或依赖 Groundedness 指标补充)

    评测 RAG 系统时,需要同时关注 Faithfulness 和 Groundedness 两个维度,才能全面评估回答质量。