当前位置: 首页 > news >正文

Learning RAG and Ragas

说明:这是我的学习笔记,很多内容转自网络,请查阅文章末尾的参考资料。

文章目录

  • RAG
  • Ragas
    • 评估框架
    • 评估维度
    • 评估指标
      • Faithfulness (忠实度)
      • Answer Relevance (答案相关度)
      • Context Precision (上下文精确度)
      • Context Recall (上下文召回率)
      • Context Relevance (上下文相关度)
      • Answer Similarity (答案相似度)
      • Answer Correctness (答案正确性)
      • Aspect Critique (层面评判)
  • 参考资料

RAG

RAG (Retrieval-Augmented Generation) 检索增强生成。RAG系统是利用检索的内容以增强LLM生成答案的系统。

Ragas

RAGAS (Automated Evaluation of Retrieval Augmented Generation) 检索增强生成的自动评估。Ragas是一个大模型评测框架,可以评估检索增强生成(RAG)的效果。Ragas可以帮助分析模型的输出,了解模型在给定任务上的表现。
如果我们为某个真实线上系统开发了检索增强生成(RAG)应用,那么在此应用正式上线提供服务前,我们需要评估 RAG 的表现到底是怎样的。如果发现现有的 RAG 效果不够理想,可能需要一些新的 RAG 算法流程来改进。在这之前,就需要对 RAG 流程进行评估,得到评估指标,然后才能进行自动化对比,观察改进的流程是否真的有效。

Ragas 官网

Ragas 安装

pip install ragas

评估框架

在这里插入图片描述

RAGAS框架必须的数据源

  • Question: 用户所提的问题
  • Answer: AI生成的回复
  • Contexts: 上下文(也就是检索得到的内容)

可选的数据源

  • Ground Truths: 真相(下文简称Truths)人工标注的数据,可以有多个真相对应同一个问题
    在这里插入图片描述

评估维度

在这里插入图片描述

评估指标

Faithfulness (忠实度)

评估的是答案忠实于Contexts的程度,因为LLM有编造回答的能力,在理想的RAG系统中,答案应该全部由提供的Contexts推理而来。

  1. 用LLM提取Answer中的要点, 设要点的数量为|Sa|
  2. 用LLM检验这些要点是否可以Contexts中推理而来,设能够推理而来的要点数量为|Va|
  3. 计算它们的比值: F = |Va| / |Sa|

所需输入: Question(提取要点时会需要用到),Answer, Contexts
是否需要标注: 否

Answer Relevance (答案相关度)

本质上可以视为无标注数据时的Answer Similarity。但因为作法不同,所以它体现的更多的是Answer与Question之间的对齐程度。

  1. 利用LLM通过答案反推出问题。例如:
  • RAG的全称是Retrieval-Augmented Generation是检索增强生成系统。
  • 生成的问题1:RAG是什么。
  • 生成的问题2:RAG的全程是什么。
  1. 用embedding模型提取Answer与生成问题的文本语义向量。
  2. 计算向量间的相似度。

在这里插入图片描述

其中: n是生成的问题数量,qi代表第i个生成问题, q代表实际的问题。
所需输入:Question,Answer
是否需要标注: 否

Context Precision (上下文精确度)

评估的是检索到的文档是否对question都有帮助。其实就是有帮助的文档数量与所有被检索出文档数量的比例。它体现的是RAG系统对于文档检索的精准度,会惩罚搜索一大堆没用文档喂给下游的行为。

  1. 用LLM判断Contexts对Question有帮助的数量,假设该数量为|TP|
  2. 设所有被检索出的文档数量为k, 计算它们的比值: CP = |TP| / k

所需输入:Question,Contexts
是否需要标注: 否

Context Recall (上下文召回率)

评估的是检索到的文档中包含真相Truths所需要信息的程度。如果为了优化Context Precision把文档删减了很多以至于包含的信息不够了,自然Context Recall便会低。

  1. 用LLM提取所有Truths中的要点,设要点数量为|St|。 要点(statements): 可以理解为一段描述中关于Question的小段信息。例如:
  • 问题:RAG全称是什么。
  • 真相:RAG全称Retrieval-Augmented Generation是检索增强生成系统。
  • 要点1: Retrieval-Augmented Generation
  • 要点2:检索增强生成系统
  1. 用LLM判断在Contexts能找到对应信息的要点数量,记作|Vt|
  2. 计算它们的比值: CR = |Vt| / |St|

Context Relevance (上下文相关度)

评估的是检索到的文档中所有的内容是否对Question都有帮助。它与Context Precision的区别是它精确到了文档文本的所有内容。例如有的文档很长,它涉及到的内容很广泛,自然也包含回答问题的信息,所以这篇文档在计算Context Precision时会是一个正例。但是因为这篇文章内容中也包含了其他冗余信息,所以它的Context Relevance不会高。

  1. 用LLM将所有Contexts分解为句子,设句子数量为|Sc|
  2. 并判断对Question 有帮助的句子数量,记作|Vc|
  3. 计算它们的比值: CR = |Vc| / |Sc|

所需输入:Question,Contexts
是否需要标注: 否

Answer Similarity (答案相似度)

Answer Correctness (答案正确性)

Aspect Critique (层面评判)

参考资料

  1. Rag系统的评估指标与Ragas框架的使用
  2. 小白学大模型:使用Ragas评价RAG效果
  3. RAG03-使用RAGAS进行评估
  4. RAG:系统评估,以RAGAS为例

相关文章:

Learning RAG and Ragas

说明:这是我的学习笔记,很多内容转自网络,请查阅文章末尾的参考资料。 文章目录 RAGRagas评估框架评估维度评估指标Faithfulness (忠实度)Answer Relevance (答案相关度)Context Precision (上下文精确度)Context Recall (上下文召回率)Cont…...

Java项目实战II基于微信小程序的实习记录(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在当今竞争激烈的就业市场中&#xff0…...

GIT将源码推送新分支

1. 创建并切换到新分支 首先,确保你在本地创建了一个新的分支并切换到该分支: git checkout -b new-branch-namenew-branch-name 是你要创建的新分支名称,替换为你需要的名称即可。 2. 确保所有更改已提交 在推送之前,确保你的…...

Python习题 250:删除空文件夹

(编码题)编写一段 Python 代码,删除指定目录的空文件夹。 参考答案: 使用 pathlib 库可以更简洁地处理文件路径。下面是一个使用 pathlib 库递归删除空文件夹的 Python 代码:from pathlib import Pathdef remove_empty_dirs(directory):# 遍历目录及其子目录for path in…...

基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较

文章目录 基本数据类型的比较整数类型浮点类型字符类型布尔类型小结 有符号和无符号整数二进制补码表示精度丢失问题结论 在编程语言中,基本数据类型是构建更复杂数据结构的基础。在本文中,我们将比较 Kotlin、Dart (Flutter)、Java 和 C 中的基本数据类…...

源码解析-Spring Eureka(更新ing)

源码解析-Spring Eureka 文章目录 源码解析-Spring Eureka前言一、从Spring.factory和注解开始二、重要的一步EurekaServerInitializerConfiguration三、初始化了什么?自动保护 四, 重新回到EurekaServerAutoConfiguration 前言 无 一、从Spring.factory和注解开始…...

python调用百度通用翻译API

文章目录 1. 简介2. 使用步骤3. api调用实现4. 编码实现 1. 简介 前段时间在做视频语音识别生成多语种字幕时,使用了百度翻译通用翻译api进行翻译。百度翻译平台经过个人认证之后,每月有200万字符的免费翻译额度。还是比较舒服的。 百度翻译开放平台是百…...

Timeline动画「硬切」的问题

1)Timeline动画「硬切」的问题 2)移动平台纹理压缩格式选择ASTC,美术出图还需遵守POT吗 3)如何去掉DOTS Unity.Entities.Graphics创建的BatchRendererGroup的UI相机回调 4)Timeline播放动画会产生位移的问题 这是第409…...

CentOS 9 配置网卡

在 CentOS 9 中配置网卡,通常涉及以下几个步骤: 1. 查看网络接口 首先,确认系统上存在的网络接口。可以使用 ip 命令或 ifconfig 命令查看网络接口的状态。 ip a 或者: ifconfig 这将列出所有可用的网络接口(例如…...

redis7.x源码分析:(2) adlist双向链表

链表是一种常用的数据结构(如果不了解,请先学习数据结构),由于c语言本身没有实现标准的链表库,所以redis自己实现了一个双向链表。 双向链表在redis内部的使用非常的多,几乎所有模块中都有用到。 下面看下它…...

KUKU FM 音频Linux平台免费下载工具

1.工具名称:kuku-dl 功能: ✅ 下载播客、故事和有声读物! ✅ 获取所有元数据和封面艺术品。 ✅ 支持字幕! 3.使用说明: 3.1. 直接镜像github源码库 👉 git clone https://github.com/bunnykek/kuku-…...

《Django 5 By Example》阅读笔记:p105-p164

《Django 5 By Example》学习第5天,p105-p164总结,总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安…...

网络延迟对Python爬虫速度的影响分析

Python爬虫因其强大的数据处理能力和灵活性而被广泛应用于数据抓取和网络信息收集。然而,网络延迟是影响爬虫效率的重要因素之一。本文将深入探讨网络延迟对Python爬虫速度的影响,并提供相应的代码实现过程,以帮助开发者优化爬虫性能。 网络…...

微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation无法打开页面问题

1.问题 微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation打开地图页面后,点击该页面下方“到这里”按钮,显示无法打开。如下图: 3.解决方案 在内嵌h5中不使用uniapp的api打开地图,而在h5页面事件处理程序中去跳转新的小程序页面,在该新页面去使用微信小程序…...

创建一个简单的基于STM32的FreeRTOS应用

使用STM32CubeIDE生成。 1,使能FreeRTOS 2,选择版本 CMSIS_V1 3 设置参数USE_NEWLIB_REENTRANT 如果不设置,会在生成代码的时候提示错误 4,设置时钟TIM1作为系统时钟 ​​​​​​​​​​​​​​ 5,设置Task …...

【Revit二次开发】创建Ribbon选项卡与带图标的按钮

效果图 创建一个叫做“开发的插件”的选项卡, 选项卡内有一个叫做“Hello”的图标按钮, 点击按钮后运行一个命令, 该命令弹出提示框“Hello Revit!”。 在此示例基础上,可以根据需要替换图标、文字、命令功能。 步骤 安装Revit…...

Win11 终端执行 python xxx.py 没反应

在 Win11 上写了一段 Python 代码来分析日志文件, 发现执行没反应。是在 VSCode 里的终端中执行的 python log_stats.py, 是 PowerShell; 也尝试了 cmd, 情况一样。 一开始怀疑代码写错,直到故意在代码里加打印,发现没…...

使用视频提升应用在 App Store 中的推广效果

App Store 上有485 万个应用和游戏。每个应用开发者都知道,要在如此庞大的市场中脱颖而出,吸引宝贵的用户眼球,是多么困难。 您需要在应用推广游戏中尝试一些不同的东西,那就是视频预览。这些短小的电影奇迹已经成为应用营销人员…...

对话 OpenCV 之父 Gary Bradski:灾难性遗忘和持续学习是尚未解决的两大挑战 | Open AGI Forum

作者 | Annie Xu 采访、责编 | Eric Wang 出品丨GOSIM 开源创新汇 Gary Bradski,旺盛的好奇心、敢于冒险的勇气、独到的商业视角让他成为计算视觉、自动驾驶领域举重若轻的奠基者。 Gary 曾加入 Stanley 的团队,帮助其赢得 2005 年美国穿越沙漠 DA…...

通过地址获取LONG和LAT并且存入csv

通过地址获取LONG和LAT并且存入csv 1. Address存在Address这个column里,从网上复制(如果可以爬虫自动更好) 2. 用代码获取GPS,再存入表格 import pandas as pd from geopy.geocoders import Nominatim from time import sleep#…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...