自然语言处理: 第十七章RAG的评估技术RAGAS

2024-03-19 17:28

本文主要是介绍自然语言处理: 第十七章RAG的评估技术RAGAS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文地址:[2309.15217] RAGAS: Automated Evaluation of Retrieval Augmented Generation (arxiv.org)

项目地址: explodinggradients/ragas: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines (github.com)

上一篇文章主要介绍了RAG的优化技术,感兴趣的可以回顾下,本篇文章主要是介绍RAG技术的主流评估方法。



应用原理

在这里插入图片描述

RAG 系统性能评估的多个框架,都包含了几项独立的指标,例如总体答案相关性、答案基础性、忠实度和检索到的上下文相关性。例如本章主要介绍的的RAGAS 使用真实性和答案相关性来评价生成答案的质量,并使用经典的上下文精准度和召回率来评估 RAG 方案的检索性能,上述指标共同构成了RAGAs评分,用于全面评估RAG pipeline性能。出了上述四个指标,最核心的RAG的两个指标还是关于生成的答案的,所以RAG同样也提供了最下面两个评估指指标

  • Faithfulness(忠诚度) - generation: 衡量生成答案与给定上下文中的事实的一致性,越接近1越好。如果答案(answer)中提出的所有基本事实(claims)都可以从给定的上下文(context)中推断出来,则生成的答案被认为是忠实的 。为了计算这一点,首先从生成的答案中识别一组claims。然后,将这些claims中的每一项与给定的context进行交叉检查,以确定是否可以从给定的context中推断出它。忠实度分数由以下公式得出:

    在这里插入图片描述

  • Answer Relevancy(回答相关性)- generation:衡量生成的提示答案与问题的相关性,越接近1越好。

    当答案直接且适当地解决原始问题时,该答案被视为相关。重要的是,我们对答案相关性的评估不考虑真实情况,而是对答案缺乏完整性或包含冗余细节的情况进行惩罚。为了计算这个分数,LLM会被提示多次为生成的答案生成适当的问题,并测量这些生成的问题与原始问题之间的平均余弦相似度。基本思想是,如果生成的答案准确地解决了最初的问题,LLM应该能够从答案中生成与原始问题相符的问题。

  • Context Precision(内容准确性) - retrieval: 衡量检索的上下文内容与标准答案的相关性,理想情况下,所有相关文档块(chunks)必须出现在顶层。该指标使用question和计算contexts。

    在这里插入图片描述

  • Context recall(召回内容)- retrieval : 使用带注释的答案作为基本真理来衡量检索到的上下文的内容,衡量检索到的上下文(Context)与人类提供的真实答案(ground truth)的一致程度,它是根据ground truth和检索到的Context计算出来的。为了根据真实答案(ground truth)估算上下文召回率(Context recall),分析真实答案中的每个句子以确定它是否可以归因于检索到的Context。 在理想情况下,真实答案中的所有句子都应归因于检索到的Context。

    在这里插入图片描述

  • Answer semantic similarity(回答语义相似度): 评估生成的答案和标准答案的语义相似度,越接近1越好。

  • Answer correctness(回答准确性),评估生成答案和标准答案的准确性,越接近1越好。

(上述6个index 值都是【0,1】之间)



RAGAs的评估流程在文中有比较详细的描述,在此只摘抄关键字。

  • 开始 :启动准备和设置RAG应用的过程。
  • 数据准备 :加载和分块处理文档。
  • 设置向量数据库 :生成向量嵌入并存储在向量数据库中。
  • 设置检索器组件 :基于向量数据库设置检索器。
  • 组合RAG管道 :结合检索器、提示模板和LLM组成RAG管道。
  • 准备评估数据 :准备问题和对应的真实答案。
  • 构建数据集 :通过推理准备数据并构建用于评估的数据集。
  • 评估RAG应用 :导入评估指标并对RAG应用进行评估。
  • 结束 :完成评估过程。

整个流程如下图所示

在这里插入图片描述



除了RAGAS ,还有一个简单有效的检索器评估管道的例子可以在这里找到,它已被应用于编码器的微调部分。一个更高级的方法不仅考虑 命中率 ,还包括了常用的搜索引擎评估指标 平均倒数排名 (Mean Reciprocal Rank) ,以及生成答案的质量指标,如真实性和相关性,这在 OpenAI 的实用指南中有所展示。LangChain 提供了一个颇为先进的评估框架 LangSmith。在这个框架中,你不仅可以实现自定义的评估器,还能监控 RAG 管道内的运行,进而增强系统的透明度。

如果你正在使用 LlamaIndex 进行构建,可以尝试 rag_evaluator llama pack

快速入门

安装

!pip install ragas

或者源码安装

!git clone https://github.com/explodinggradients/ragas && cd ragas
!pip install -e .


快速评估


from datasets import Dataset 
import os
from ragas import evaluate
from ragas.metrics import faithfulness, answer_correctnessos.environ["OPENAI_API_KEY"] = "your-openai-key"data_samples = {'question': ['When was the first super bowl?', 'Who won the most super bowls?'],'answer': ['The first superbowl was held on Jan 15, 1967', 'The most super bowls have been won by The New England Patriots'],'contexts' : [['The First AFL–NFL World Championship Game was an American football game played on January 15, 1967, at the Los Angeles Memorial Coliseum in Los Angeles,'], ['The Green Bay Packers...Green Bay, Wisconsin.','The Packers compete...Football Conference']],'ground_truth': ['The first superbowl was held on January 15, 1967', 'The New England Patriots have won the Super Bowl a record six times']
}dataset = Dataset.from_dict(data_samples)score = evaluate(dataset,metrics=[faithfulness,answer_correctness])
score.to_pandas()

参考资料:

学习检索增强生成(RAG)技术,看这篇就够了——热门RAG文章摘译(9篇) - 知乎 (zhihu.com)

高级RAG(四):Ragas评估 - 知乎 (zhihu.com)

这篇关于自然语言处理: 第十七章RAG的评估技术RAGAS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/826739

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Python使用python-docx实现自动化处理Word文档

《Python使用python-docx实现自动化处理Word文档》这篇文章主要为大家展示了Python如何通过代码实现段落样式复制,HTML表格转Word表格以及动态生成可定制化模板的功能,感兴趣的... 目录一、引言二、核心功能模块解析1. 段落样式与图片复制2. html表格转Word表格3. 模板生