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

AnswerExactMatchEvaluator

AnswerExactMatchEvaluator使用真实标签来评估Haystack管道预测的答案。它逐个字符地检查预测的答案是否与真实答案完全匹配。这个指标被称为精确匹配。

pipeline 中的最常见位置单独使用或在评估管道中使用。应在已生成 Evaluator 输入的单独管道之后使用。
强制运行变量"ground_truth_answers": 包含真实答案的字符串列表

"predicted_answers": 要评估的预测答案的字符串列表
输出变量一个包含

- score: 一个介于0.0到1.0之间的数字,表示任何预测答案与真实答案匹配的问题的比例

- individual_scores: 一个由0和1组成的列表,其中1表示预测的答案与某个真实答案匹配
API 参考Evaluators (评估器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/answer_exact_match.py

概述

您可以使用AnswerExactMatchEvaluator组件用于评估Haystack管道(例如,抽取式问答管道)预测的答案与真实标签。如AnswerExactMatchEvaluator检查预测的答案是否与真实答案完全匹配。它不适合评估由LLM生成的答案,例如在RAG管道中。请改用FaithfulnessEvaluatorSASEvaluator

要初始化一个AnswerExactMatchEvaluator,不需要参数。

请注意,一次只比较一个预测答案与一个真实答案。该组件不支持对同一问题有多个真实答案,或对同一问题有多个预测答案。

用法

单独使用

下面是一个使用AnswerExactMatchEvaluator组件评估两个答案并将其与真实答案进行比较的示例。

from haystack.components.evaluators import AnswerExactMatchEvaluator

evaluator = AnswerExactMatchEvaluator()
result = evaluator.run(
    ground_truth_answers=["Berlin", "Paris"],
    predicted_answers=["Berlin", "Lyon"],
)

print(result["individual_scores"])
# [1, 0]
print(result["score"])
# 0.5

在 pipeline 中

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

from haystack import Pipeline
from haystack.components.evaluators import AnswerExactMatchEvaluator
from haystack.components.evaluators import SASEvaluator

pipeline = Pipeline()
em_evaluator = AnswerExactMatchEvaluator()
sas_evaluator = SASEvaluator()
pipeline.add_component("em_evaluator", em_evaluator)
pipeline.add_component("sas_evaluator", sas_evaluator)

ground_truth_answers = ["Berlin", "Paris"]
predicted_answers = ["Berlin", "Lyon"]

result = pipeline.run(
		{
			"em_evaluator": {"ground_truth_answers": ground_truth_answers,
	    "predicted_answers": predicted_answers},
	    "sas_evaluator": {"ground_truth_answers": ground_truth_answers,
	    "predicted_answers": predicted_answers}
    }
)

for evaluator in result:
    print(result[evaluator]["individual_scores"])
# [1, 0]
# [array([[0.99999994]], dtype=float32), array([[0.51747656]], dtype=float32)]

for evaluator in result:
    print(result[evaluator]["score"])
# 0.5
# 0.7587383

相关链接

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