DocumentRecallEvaluator
该DocumentRecallEvaluator 使用地面真实标签来评估 Haystack pipeline 检索到的文档。它检查了多少地面真实文档被检索到。这个指标称为召回率。
| pipeline 中的最常见位置 | 单独使用或在评估管道中使用。应在已生成 Evaluator 输入的单独管道之后使用。 |
| 强制运行变量 | "ground_truth_documents": 一个地面真实文档列表的列表。这表示每个问题都有一个地面真实文档列表。 "retrieved_documents": 一个已检索文档列表的列表。这表示每个问题都有一个已检索文档列表。 |
| 输出变量 | 一个包含 - score: 一个 0.0 到 1.0 之间的数字,表示所有输入上的平均召回率分数。- individual_scores: 一个从 0.0 到 1.0 的个体召回率分数列表,表示已检索文档列表和地面真实文档列表的每对输入的得分。如果模式设置为 `single_hit`,则每个个体分数要么是 0,要么是 1。 |
| API 参考 | Evaluators (评估器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/document_recall.py |
概述
您可以使用DocumentRecallEvaluator 组件用于评估 Haystack pipeline(例如 RAG Pipeline)检索到的文档与地面真实标签的匹配程度。
在初始化DocumentRecallEvaluator 时,您可以将mode 参数设置为
RecallMode.SINGLE_HIT 或RecallMode.MULTI_HIT。默认情况下,使用RecallMode.SINGLE_HIT。
RecallMode.SINGLE_HIT 意味着只要检索到任何一个地面真实文档,就计为正确检索,召回率得分为 1。单个检索到的文档即可获得满分。
RecallMode.MULTI_HIT 意味着必须检索到所有地面真实文档,才计为正确检索,召回率得分为 1。检索到的文档数量必须至少等于地面真实文档数量才能获得满分。
用法
单独使用
下面是一个示例,我们使用DocumentRecallEvaluator 组件,用于评估为两个查询检索到的文档。对于第一个查询,有一个地面真实文档和一个检索到的文档。对于第二个查询,有两个地面真实文档和三个检索到的文档。
from haystack import Document
from haystack.components.evaluators import DocumentRecallEvaluator
evaluator = DocumentRecallEvaluator()
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, 1.0]
print(result["score"])
# 1.0
在 pipeline 中
下面是一个示例,我们使用DocumentRecallEvaluator 和一个DocumentMRREvaluator 在管道中,用于评估两个答案并将其与真实答案进行比较。运行管道而不是单独的组件可以简化计算多个指标的操作。
from haystack import Document, Pipeline
from haystack.components.evaluators import DocumentMRREvaluator, DocumentRecallEvaluator
pipeline = Pipeline()
mrr_evaluator = DocumentMRREvaluator()
recall_evaluator = DocumentRecallEvaluator()
pipeline.add_component("mrr_evaluator", mrr_evaluator)
pipeline.add_component("recall_evaluator", recall_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},
"recall_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, 1.0]
for evaluator in result:
print(result[evaluator]["score"])
# 1.0
# 1.0
更新于 大约 1 年前
