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

DocumentMAPEvaluator

DocumentMAPEvaluator 使用地面真实标签评估 Haystack 管道检索到的文档。它检查检索到的文档列表在多大程度上只包含地面真实标签指定的相关文档,或者也包含不相关的文档。这个指标被称为平均精度均值 (MAP)。

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

"retrieved_documents": 检索到的文档列表的列表。这会为每个问题创建一个检索到的文档列表。
输出变量一个包含

- score: 一个从 0.0 到 1.0 的数字,表示平均精度均值

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

概述

您可以使用DocumentMAPEvaluator 组件用于评估 Haystack 管道(例如 RAG 管道)为检索到的文档与地面真实标签进行的评估。更高的平均精度均值更好,表明检索到的文档列表包含许多相关文档,并且不相关的文档很少或根本没有。

初始化DocumentMAPEvaluator,不需要任何参数。

用法

单独使用

下面是一个示例,我们使用DocumentMAPEvaluator 组件用于评估为两个查询检索到的文档。对于第一个查询,有一个地面真实文档和一个检索到的文档。对于第二个查询,有两个地面真实文档和三个检索到的文档。

from haystack import Document
from haystack.components.evaluators import DocumentMAPEvaluator

evaluator = DocumentMAPEvaluator()
result = evaluator.run(
    ground_truth_documents=[
        [Document(content="France")],
        [Document(content="9th century"), Document(content="9th")],
    ],
    retrieved_documents=[
        [Document(content="France")],
        [Document(content="9th century"), Document(content="10th century"), Document(content="9th")],
    ],
)
print(result["individual_scores"])
# [1.0, 0.8333333333333333]
print(result["score"])
# 0.9166666666666666

在 pipeline 中

下面是一个示例,我们使用DocumentMAPEvaluator 和一个DocumentMRREvaluator 在管道中,用于评估两个答案并将其与真实答案进行比较。运行管道而不是单独的组件可以简化计算多个指标的操作。

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

pipeline = Pipeline()
mrr_evaluator = DocumentMRREvaluator()
map_evaluator = DocumentMAPEvaluator()
pipeline.add_component("mrr_evaluator", mrr_evaluator)
pipeline.add_component("map_evaluator", map_evaluator)

ground_truth_documents=[
    [Document(content="France")],
    [Document(content="9th century"), Document(content="9th")],
]
retrieved_documents=[
    [Document(content="France")],
    [Document(content="9th century"), Document(content="10th century"), Document(content="9th")],
]

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

for evaluator in result:
    print(result[evaluator]["individual_scores"])
#[1.0, 1.0]
#[1.0, 0.8333333333333333]
for evaluator in result:
    print(result[evaluator]["score"])
# 1.0
# 0.9166666666666666

相关链接

在我们的 API 参考中查看参数详情