基于模型的评估
Haystack 支持各种模型驱动的评估。本页将介绍模型驱动的评估是什么,并讨论 Haystack 提供的各种选项。
什么是模型驱动的评估
Haystack 中的模型驱动评估使用语言模型来检查 Pipeline 的结果。这种方法易于使用,因为它通常不需要输出的标签。它经常与检索增强生成(RAG)Pipeline 一起使用,但可以与任何 Pipeline 配合使用。
目前,Haystack 支持对完整的 RAG Pipeline 进行端到端的模型驱动评估。
使用 LLM 进行评估
模型驱动评估的一种常见策略是使用像 OpenAI 的 GPT 模型这样的语言模型(LLM)作为评估模型,通常被称为“黄金”模型。最常用的黄金模型是 GPT-4。我们通过向其提供 Pipeline 的结果以及其他一些信息,并附带一个概述评估标准的提示,来使用该模型评估 RAG Pipeline。
这种将 LLM 用作评估者的方法非常灵活,因为它提供了多种指标。这些指标中的每一个本质上都是一个精心制作的提示,用于向 LLM 描述如何评估和评分结果。常见的指标包括忠实度、上下文相关性等。
使用本地 LLM
要将模型驱动的评估器与本地模型一起使用,您需要在初始化评估器时,在api_base_url 和model 中设置api_params 参数。
以下示例展示了如何使用 Ollama 模型实现此功能。
首先,请确保 Ollama 已在本地运行
curl https://:11434/api/generate -d '{
"model": "llama3",
"prompt":"Why is the sky blue?"
}'
然后,您的 Pipeline 将如下所示
from haystack.components.evaluators import FaithfulnessEvaluator
from haystack.utils import Secret
questions = ["Who created the Python language?"]
contexts = [
[(
"Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming "
"language. Its design philosophy emphasizes code readability, and its language constructs aim to help "
"programmers write clear, logical code for both small and large-scale software projects."
)],
]
predicted_answers = [
"Python is a high-level general-purpose programming language that was created by George Lucas."
]
local_endpoint = "https://:11434/v1"
evaluator = FaithfulnessEvaluator(
api_key=Secret.from_token("just-a-placeholder"),
api_params={"api_base_url": local_endpoint, "model": "llama3"}
)
result = evaluator.run(questions=questions, contexts=contexts, predicted_answers=predicted_answers)
使用小型交叉编码器模型进行评估
除了使用 LLM 进行评估外,我们还可以使用小型交叉编码器模型。这些模型可以计算,例如,语义答案相似性。与基于 LLM 的指标不同,基于小型模型的指标不需要模型提供商的 API 密钥。
这种将小型交叉编码器模型用作评估器的方法运行速度更快,成本更低,但在评估方面不够灵活。您只能评估小型模型被训练来评估的内容。
Haystack 中的模型驱动评估 Pipeline
在 Haystack 中执行模型驱动评估有两种方法,它们都利用了 Pipelines 和 Evaluator 组件。
- 您可以独立创建和运行评估 Pipeline。这意味着您需要手动为评估 Pipeline 提供所需的输入。我们推荐这种方式,因为将 RAG Pipeline 和评估 Pipeline 分开,可以使您存储 RAG Pipeline 的结果,并在之后尝试不同的评估指标,而无需每次都重新运行 RAG Pipeline。
- 作为另一种选择,您可以将评估器组件添加到 RAG Pipeline 的末尾。这意味着您可以在一次
pipeline.run()调用中同时运行 RAG Pipeline 和在其之上的评估。
检索文档的模型驱动评估
上下文相关性是指检索到的文档与查询的相关程度。LLM 用于判断这一方面。它首先从文档中提取陈述,然后检查有多少陈述与回答查询相关。
生成或提取答案的模型驱动评估
忠实度,也称为接地性,评估生成答案在多大程度上基于检索到的文档。LLM 用于从答案中提取陈述,并单独检查每个陈述的忠实度。如果答案不是基于文档的,那么答案,或者至少部分答案,就被称为幻觉。
SASEvaluator(语义答案相似度)
语义答案相似度使用基于 Transformer 的交叉编码器架构来评估两个答案的语义相似度,而不是它们的词汇重叠。虽然 F1 和 EM 都将共享零相似度的“100%”得分为100%,但 SAS 被训练来为此类情况分配高分。SAS 对于查找 F1 未能给出正确预测答案有效性的良好指示的案例特别有用。您可以在 Semantic Answer Similarity for Evaluating Question-Answering Models paper 中了解更多关于 SAS 的信息。
评估框架集成
目前,Haystack 与 DeepEval 和 Ragas 集成。这两个框架都有相应的 Evaluator 组件。
| 功能/集成 | RagasEvaluator | DeepEvalEvaluator |
|---|---|---|
| 评估模型 | OpenAI 的所有 GPT 模型 Google VertexAI 模型 Azure OpenAI 模型 Amazon Bedrock 模型 | OpenAI 的所有 GPT 模型 |
| 支持的指标 | ANSWER_CORRECTNESS, FAITHFULNESS, ANSWER_SIMILARITY, CONTEXT_PRECISION, CONTEXT_UTILIZATION,CONTEXT_RECALL, ASPECT_CRITIQUE, CONTEXT_RELEVANCY, ANSWER_RELEVANCY | ANSWER_RELEVANCY, FAITHFULNESS, CONTEXTUAL_PRECISION, CONTEXTUAL_RECALL, CONTEXTUAL_RELEVANCE |
| 可自定义的响应评估提示 | ✅,使用 ASPECT_CRITIQUE 指标 | ❌ |
| 分数解释 | ❌ | ✅ |
| 监控仪表板 | ❌ | ❌ |
框架文档
您可以在相应评估框架的文档中找到有关指标的更多信息。
其他参考资料
📓 教程:评估 RAG Pipelines
更新于 8 个月前
