文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

DocumentNDCGEvaluator

DocumentNDCGEvaluator 使用地面真实标签评估 Haystack 管道检索到的文档。它会检查地面真实文档在检索到的文档列表中的排名。此指标称为归一化折损累积增益 (NDCG)。

pipeline 中的最常见位置单独使用或在评估管道中使用。应在已生成 Evaluator 输入的单独管道之后使用。
强制运行变量"ground_truth_documents": 一个包含另一个地面真实文档列表的列表,每个问题一个列表

"retrieved_documents": 一个包含另一个检索到的文档列表的列表,每个问题一个列表
输出变量一个包含

- score: 一个介于 0.0 到 1.0 之间的数字,代表 NDCG

- individual_scores: 一个列表,包含每个输入对(检索到的文档列表和地面真实文档列表)的 NDCG 值,范围从 0.0 到 1.0
API 参考Evaluators (评估器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/document_ndcg.py

概述

您可以使用 DocumentNDCGEvaluator 组件来评估 Haystack 管道(例如 RAG 管道)检索到的文档与地面真实标签。NDCG 值越高越好,表示相关文档出现在检索到的文档列表中的位置越靠前。

如果地面真实文档有分数,则较高的 NDCG 表示分数较高的文档出现在检索到的文档列表中的位置越靠前。如果地面真实文档没有分数,则假定为二元相关性,这意味着所有地面真实文档的相关性都相同,它们在检索到的文档列表中的顺序对于 NDCG 并不重要。

初始化 无需任何参数。DocumentNDCGEvaluator.

用法

单独使用

下面是一个示例,我们使用 DocumentNDCGEvaluator 来评估为查询检索到的文档。有两个地面真实文档和三个检索到的文档。所有地面真实文档都被检索到,但是一个不相关的文档的排名高于一个地面真实文档,这降低了 NDCG 分数。

from haystack import Document
from haystack.components.evaluators import DocumentNDCGEvaluator

evaluator = DocumentNDCGEvaluator()
result = evaluator.run(
    ground_truth_documents=[[Document(content="France", score=1.0), Document(content="Paris", score=0.5)]],
    retrieved_documents=[[Document(content="France"), Document(content="Germany"), Document(content="Paris")]],
)
print(result["individual_scores"])
# [0.8869]
print(result["score"])
# 0.8869

在 pipeline 中

下面是一个在管道中使用 DocumentNDCGEvaluator 和 DocumentMRREvaluator 来评估检索到的文档并将其与地面真实文档进行比较的示例。运行管道而不是单个组件可以简化计算多个指标的操作。

from haystack import Document, Pipeline
from haystack.components.evaluators import DocumentMRREvaluator, DocumentNDCGEvaluator

pipeline = Pipeline()
pipeline.add_component("ndcg_evaluator", DocumentNDCGEvaluator())
pipeline.add_component("mrr_evaluator", DocumentMRREvaluator())

ground_truth_documents=[[Document(content="France", score=1.0), Document(content="Paris", score=0.5)]]
retrieved_documents=[[Document(content="France"), Document(content="Germany"), Document(content="Paris")]]

result = pipeline.run({
  "ndcg_evaluator": {
    "ground_truth_documents": ground_truth_documents,
    "retrieved_documents": retrieved_documents
  },
  "mrr_evaluator": {
    "ground_truth_documents": ground_truth_documents,
	  "retrieved_documents": retrieved_documents
	},
})

for evaluator in result:
    print(result[evaluator]["score"])
# 0.9502
# 1.0