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管道中。请改用FaithfulnessEvaluator或SASEvaluator。
要初始化一个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 中
下面是一个示例,我们在其中使用AnswerExactMatchEvaluator和SASEvaluator在管道中评估两个答案并将其与真实答案进行比较。运行一个管道而不是单个组件可以简化计算多个指标的操作。
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
更新于 大约 1 年前
