AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


用 RAGAS 评估 RAG 流水线的初学者指南
发布日期:2024-06-02 08:23:52 浏览次数: 2327 来源:数智笔记


用 RAGAS 评估 RAG 流水线的初学者指南

引言

在不断发展的机器学习和人工智能领域中,语言模型应用的开发,尤其是检索增强生成(RAG)系统,变得越来越复杂。然而,真正的挑战不在于初始创建,而在于对这些应用的持续维护和增强。这就是 RAGAS 的用武之地——一个专门提供 RAG 管道度量的评估库。本文将探讨 RAGAS 库,并教你如何使用它来评估 RAG 管道。

学习目标

  • • 了解 RAGAS 评估库的起源和发展。

  • • 了解 RAG 评估分数。

  • • 学会使用 RAGAS 评估库评估 RAG 系统。

目录

什么是 RAGAS?

RAGAS 的起源根植于通过采用度量驱动开发(MDD)的方式,推动语言大型模型(LLM)和 RAG 应用的持续改进的愿景。MDD 不仅仅是一个流行词,而是产品开发中的一种战略方法,利用可量化的数据来指导决策过程。

通过持续跟踪关键指标,开发人员和研究人员可以深入了解其应用的性能,从而将项目引向卓越。RAGAS 的目标是将这种数据中心的方法论确立为 LLM 和 RAG 应用的开源标准,确保评估和监控成为开发生命周期的组成部分。

评估指标是 RAG 的重要组成部分,因为它们使得可以对 LLM 应用进行系统评估。它们营造了一个可以高度可靠和可重现地进行实验的环境。通过这样做,它们为客观地衡量 RAG 管道中的各个组件的有效性提供了一个框架。此外,监控方面提供了大量的可行动见解,这些见解是从生产数据中获得的,使开发人员能够不断改进和提高他们的LLM应用程序的质量。因此,RAGAS是那些致力于在RAG系统的开发和维护中追求卓越的人的指南,以精确和深入的洞察力引领MDD事业,以应对AI应用增强的复杂挑战。

实施RAGAS并生成评估分数

在本节中,我们将演示如何通过在现有的RAG流水线上实施RAGAS评估库来工作。我们不会从头开始构建一个RAG流水线,所以有一个现有的RAG流水线可以生成查询的响应是前提条件。我们将使用来自Kaggle的COQA-QUAC数据集。该数据集包含各种问题、上下文和它们的响应,将用作RAG流水线的数据。我们将手动为一些查询生成响应,并使用参考/真实响应生成RAGAS分数。

RAGAS评估分数

RAGAS提供以下评估分数:

  • • 准确性:这衡量了生成的答案与给定上下文的事实一致性。它是根据答案和检索到的上下文计算的。答案的范围是(0,1),数值越高越好。

  • • 答案相关性:评估指标答案相关性专注于评估生成的答案与给定提示的相关性。对于不完整或包含冗余信息的答案,分配较低的分数,较高的分数表示更好的相关性。该指标使用问题、上下文和答案进行计算。

  • • 上下文回忆:上下文回忆度衡量了检索到的上下文与注释答案(视为真实答案)的一致程度。它是基于真实答案和检索到的上下文计算的,值的范围在0到1之间,数值越高表示性能越好。

  • • 上下文精确度:上下文精确度是一个度量标准,用于评估上下文中是否将所有与真实相关的项目排名较高。理想情况下,所有相关的块都应该出现在前几个排名中。该指标使用问题、真实答案和上下文进行计算,值的范围在0到1之间,数值越高表示精确度越高。

  • • 上下文相关性:该指标根据问题和上下文计算检索到的上下文的相关性。值的范围在(0,1)之间,数值越高表示相关性越好。

  • • 上下文实体回忆:该指标根据与上下文和真实答案中的实体数量相对应的检索到的上下文的召回率来衡量。

端到端评估指标

此外,RAGAS还提供了两个端到端评估指标,用于评估RAG流水线的端到端性能。

  • • 答案语义相似度 答案语义相似度的概念涉及评估生成的答案与真实答案之间的语义相似程度。该评估基于真实答案和生成的答案,值的范围在0到1之间。

  • • 答案正确性 答案正确性的评估涉及将生成的答案与真实答案进行比较,以判断生成的答案的准确性。该评估依赖于真实答案和生成的答案,得分范围从0到1。在本文中,我们将仅关注使用忠实度、答案相关性、上下文相关性和上下文召回度指标评估 RAG 管道。这里的唯一要求是评估输入必须是一个包含查询、响应和源文档的字典。现在我们已经讨论了目标和要求,让我们直接开始使用 RAGAS 进行评估。

使用 RAGAS 进行实践评估

首先,让我们安装 RAGAS 的所有必要包。下面是安装所需的所有包及其特定版本的列表:

langchain==0.1.13
openai
ragas==0.0.22

注意:避免使用最新版本的 RAGAS,因为它没有实现 Langchain。现在我们已经设置好了环境,让我们开始使用 RAGAS 进行生成的响应的评估。

第一步:生成 RAG 管道输出

首先,我们将使用 RAG 管道生成一个响应。RAG 管道的输出必须是一个包含“query”、“result”和“source_documents”键的字典。我们可以通过在 Langchain 的 RetrievalQA 链中将 return_source_documents 参数设置为 True 来简单地实现这一点。下面的图片显示了我用于相同目的的参数:

这是 Ragas 评估器接受的格式。下面是一个响应变量应该是什么样子的示例:

{'query''印度的马拉雅利人分布在哪里?',
 'result''马拉雅利人分布在各个...',
 'source_documents': [
     Document(
       page_content=': 0\nquestion: 马拉雅利人位于哪里?'
       metadata={'source''data/dummy-rag.csv''row': 0}
     ), 
     ...
  ]
 }

注意,源文档是一个包含源参考的文档列表。这个字典本身将被传递给 RAGAS 评估器来计算每个分数。我们将为2-3个查询生成响应,并以上述格式作为 Python 字典存储它们,然后将它们存储在 responses 列表中,稍后将使用它们。

第二步:创建评估链

接下来,我们将使用 RAGAS 评估器创建评估链。我们将使用忠实度、答案相关性、上下文相关性和上下文召回链。首先,我们需要从 RAGAS 中导入一些必要的包。

from ragas.langchain.evalchain import RagasEvaluatorChain
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_relevancy,
    context_recall,
)

我们使用 RagasEvaluatorChain 来创建评估的指标。它接受一个指标并初始化我们用来生成评估分数的指标。

第三步:创建评估指标

接下来,我们将使用 RagasEvaluatorChain 创建4个不同的指标。

eval_chains = {
    m.name: RagasEvaluatorChain(metric=m)
    for m in [faithfulness, answer_relevancy, context_relevancy, context_recall]
}

这段代码创建了一个包含4个不同评估链的字典:忠实度、答案相关性、上下文相关性和上下文召回。

第四步:评估 RAG 管道

现在,我们将循环遍历生成的响应字典并对其进行评估。假设响应存在于名为“responses”的列表中,我们将遍历它并获取每个响应字典,其中包含以下键值对:查询、响应、源文档。

for response in responses:
  for name, eval_chain in eval_chains.items():
    score_name = f"{name}_score"
    print(f"{score_name}{eval_chain(response)[score_name]}")

上面的代码片段循环遍历每个字典并生成分数。内部循环遍历每个评估指标以生成它们的分数。下面是上述代码的示例输出:

faithfulness_score: 1.0
answer_relevancy_score: 0.7461039226035786
context_relevancy_score: 0.0
context_recall_score: 1.0

上面是单个查询响应的分数。然而,我们可以自动化它以生成更多查询响应的分数。下面是所有步骤的完整代码:

from ragas.langchain.evalchain import RagasEvaluatorChain
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_relevancy,
    context_recall,
)
eval_chains = {
    m.name: RagasEvaluatorChain(metric=m)
    for m in [faithfulness, answer_relevancy, context_relevancy, context_recall]
}
for response in responses:
  for name, eval_chain in eval_chains.items():
    score_name = f"{name}_score"
    print(f"{score_name}{eval_chain(response)[score_name]}")

结论

RAGAS在语言模型应用中崭露头角,尤其在RAG系统范围内。通过将MDD集成到RAG流程的核心中,RAGAS提供了一种结构化的方法来评估和提升这类系统的性能。全面的评估指标包括忠实度、答案相关性、上下文回忆和上下文相关性。这些指标有助于对RAG流程生成的响应进行全面分析,确保其与上下文和真实情况相一致。

在使用COQA-QUAC数据集对现有的RAG流程进行实际演示时,RAGAS展示了其为开发人员提供可量化的见解和可操作的反馈的能力。该过程涉及初始化环境、生成响应,并利用RAGAS评估器链计算各种得分。这个实际例子突显了RAGAS在持续改进LLM的可访问性和实用性,从而增强了它们的可靠性和效率。RAGAS作为一个开源标准和开发人员、研究人员确保提供负责任的AI和ML应用的重要工具。

主要观点

  • • RAGAS评估库将MDD的原则融入到LLM和RAG系统开发的工作流中。

  • • 使用RAGAS评估生成的响应的过程包括以所需的字典格式生成响应,并创建和利用评估器链来计算得分。

  • • 通过利用RAGAS,开发人员和研究人员可以客观地了解他们的RAG应用的性能,从而能够开发精确和明智的改进措施。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询