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

SASEvaluator

SASEvaluator 使用地面真相标签来评估 Haystack pipeline 预测的答案。它使用微调的语言模型来检查预测答案和地面真相答案的语义相似性。此指标称为语义答案相似性。

pipeline 中的最常见位置单独使用或在评估管道中使用。应在已生成 Evaluator 输入的单独管道之后使用。
必需的初始化变量"token": HF API token。可以设置为HF_API_TOKENHF_TOKEN 环境变量设置。
强制运行变量"ground_truth_answers": 包含地面真相答案的字符串列表

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

- score: 一个介于 0.0 到 1.0 之间的数字,表示所有预测答案和地面真相答案对的平均 SAS 分数

- individual_scores: 所有预测答案和地面真相答案对的 SAS 分数列表,范围从 0.0 到 1.0
API 参考Evaluators (评估器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/sas_evaluator.py

概述

您可以使用SASEvaluator 组件用于评估 Haystack pipeline(例如 RAG pipeline)预测的答案是否与地面真相标签相符。

您可以使用双编码器或交叉编码器模型来初始化一个SASEvaluator。默认情况下,sentence-transformers/paraphrase-multilingual-mpnet-base-v2 模型将被使用。

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

用法

单独使用

下面是一个在管道中使用 SASEvaluator 组件用于评估两个答案并将它们与地面真相答案进行比较。我们需要在run() 之前调用warm_up() 来加载模型。

from haystack.components.evaluators import SASEvaluator

sas_evaluator = SASEvaluator()
sas_evaluator.warm_up()
result = sas_evaluator.run(
  ground_truth_answers=["Berlin", "Paris"], 
  predicted_answers=["Berlin", "Lyon"]
)
print(result["individual_scores"])
# [[array([[0.99999994]], dtype=float32), array([[0.51747656]], dtype=float32)]
print(result["score"])
# 0.7587383

在 pipeline 中

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

from haystack import Pipeline
from haystack.components.evaluators import AnswerExactMatchEvaluator, 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

其他参考资料

🧑‍🍳 食谱: 使用 DSPy 进行提示优化