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

基于模型的评估

Haystack 支持各种模型驱动的评估。本页将介绍模型驱动的评估是什么,并讨论 Haystack 提供的各种选项。

什么是模型驱动的评估

Haystack 中的模型驱动评估使用语言模型来检查 Pipeline 的结果。这种方法易于使用,因为它通常不需要输出的标签。它经常与检索增强生成(RAG)Pipeline 一起使用,但可以与任何 Pipeline 配合使用。

目前,Haystack 支持对完整的 RAG Pipeline 进行端到端的模型驱动评估。

使用 LLM 进行评估

模型驱动评估的一种常见策略是使用像 OpenAI 的 GPT 模型这样的语言模型(LLM)作为评估模型,通常被称为“黄金”模型。最常用的黄金模型是 GPT-4。我们通过向其提供 Pipeline 的结果以及其他一些信息,并附带一个概述评估标准的提示,来使用该模型评估 RAG Pipeline。

这种将 LLM 用作评估者的方法非常灵活,因为它提供了多种指标。这些指标中的每一个本质上都是一个精心制作的提示,用于向 LLM 描述如何评估和评分结果。常见的指标包括忠实度、上下文相关性等。

使用本地 LLM

要将模型驱动的评估器与本地模型一起使用,您需要在初始化评估器时,在api_base_urlmodel 中设置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 中执行模型驱动评估有两种方法,它们都利用了 PipelinesEvaluator 组件。

  • 您可以独立创建和运行评估 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 与 DeepEvalRagas 集成。这两个框架都有相应的 Evaluator 组件。

功能/集成RagasEvaluatorDeepEvalEvaluator
评估模型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_RELEVANCYANSWER_RELEVANCY, FAITHFULNESS, CONTEXTUAL_PRECISION, CONTEXTUAL_RECALL, CONTEXTUAL_RELEVANCE
可自定义的响应评估提示✅,使用 ASPECT_CRITIQUE 指标
分数解释
监控仪表板

📘

框架文档

您可以在相应评估框架的文档中找到有关指标的更多信息。

其他参考资料

📓 教程:评估 RAG Pipelines