检索增强生成RAG系列2--提高RAG准确度的关键点

news2024/11/25 1:49:15

上一章讲到了RAG的基本流程,但是如果只是完成一个基本流程,想要在商业上使用还是不行,因为正常商业上的使用其准确度至少有个90%甚至更高。那么如何提高RAG的准确度,那么需要看看RAG有哪些关键点。

目录

  • 1 RAG结构图
  • 2 文档处理
  • 3 问题优化
  • 4 总结

1 RAG结构图

在上一章中展现了一个最基本的RAG流程图,其实主要是想让你了解RAG的工作模式以及最基本包含的组件,下面的图让你更为细节的了解一个RAG架构的可能性:

在这里插入图片描述

从上图可以看出更为详细的RAG过程中的步骤,我们可以总结为2个大方面对RAG的准确性提高有着举足轻重的影响,后续也会根据这2个大的方面改进做一些详细代码实现,本章先通过简单介绍每个模块作用和如何对RAG产生影响的。

  • 文档处理:包括文档解析、文档分块、文档embedding、向量数据库等
  • 问题优化:通过改写问题、增强问题、分解问题、重排等手段,使得问题更匹配知识库

下面就通过这2个大方面来分别说明为什么这些内容是提高RAG准确度的关键点。

2 文档处理

我们能够从上图看到,文档处理包括很重要的3个部分:文档解析、文档分块、文档embedding。

  • 文档解析:我们需要查询的文档可能包括pdf、Excel、图片等等各种各样的内容,而这些内容中包括很多不同的格式,比如pdf中可能还包括表格和图片,因此选择哪些文档解析工具非常重要。目前市面上有很多工具,如PyPDF、LlamaParse、Firecrawl等等。关于使用哪些解析工具解析哪些文档,这方面在系列3中详细讲解。
  • 文档分块:之所以要分块是因为2个原因,第一个是因为大模型有token长度限制,第二是过长的token其实对于大模型的理解和推理会变慢或者不准确。因此需要适当的对文档进行分块,有可能分块会将原先有关联的一句话给分隔开了,这样对RAG的检索结果就会不准确甚至找不到答案。因此如何分块或者该分块多大才是最优解,这些也在系列3中详细讲解,这里只是说明文档的分块对于RAG的准确度也是影响较大的。
  • 文档embedding:文档最终是向量化后存入向量数据库,然后通过query方式查询问题与答案的相似度来获取top_n的数据,再交于大模型去返回最终答案。这里要注意的是embedding也是一个可训练的模型或者已经训练完成的模型。那么有可能embedding模型做得不好,导致查询的结果与答案不一致。那么如何选对一个embedding模型也是对于RAG的准确度至关重要,这些也在系列3中详细讲解。
  • 向量数据库:向量数据库需要存储向量化后的数据,然后通过问题查询相似度,得到最终相关的几个答案,扔给大模型进行回答。那么向量数据库的存储和相似度查询就可能会影响RAG最终的结果,因此,我们选择哪一种向量数据库,对于我们来说还是比较重要的。

3 问题优化

我们能够从上图看到,问题优化包括改写、增强、分解等措施。那么先说一下为什么要对问题优化。其实很好理解,你在使用大模型的时候,经常使用优化prompt的方式让大模型能够返回你想要的答案,那么对于问题优化也是同样的道理,可能造成的原因是用户表达不准确、问题和文档不在一个语义空间或者可能问题需要拆解多步等等。那么对于RAG来说,对于问题优化包括以下内容:

  • 问题改写:可能提问的不是很准确,让大模型或者其它技术给你的问题进行改写,这样能够提高问题的准确性,使得查询结果相关性更高
  • 问题增强:增强可能比较难以理解,其实就是通过某些技术让模型更能理解你这句话,比如使用假设性回答去找答案或者通过抽象问题去检索等等
  • 问题分解:很明显是对于需要针对多步解决的问题,这时候对问题进行分解有利于得到更准确的答案,比如将问题分解为更小更简单的问题或者利用生成和检索不断交替等方法去优化问题
  • 重排:前面提到过可能根据改写、增强等方式对问题进行优化,有可能是生成多个不同角度问题,再做多次查询,获得最终查询结果。但是最终的查询结果需要进行一个相关性的排序,因为有可能数据过多,需要过滤掉一些,也有可能获取的数据相关性不一。因此对于返回结果进行重排也是能够提高RAG的准确度

以上是对于问题优化为什么能够提高RAG的准确度进行简单的概述,优化手段将在本系列4中详细讲解。

4 总结

本章中我们通过更为详细的描述RAG整体架构流程图,并一一分析了里面对于RAG准确度的影响。其实主要包括2部分:文档处理问题优化。接下来几章可能真的这些部分做出详细的一些优化策略的解决方案,同时也会总结一些实战经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1870968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL之可扩展性(六)

可扩展性 向外扩展 12.重新均衡分片数据 如有必要,可以通过在分片间移动数据来达到负载均衡。举个例子,许多读者可能听一些大型图片分享网站或流行社区网站的开发者提到过用于分片间移动用户数据的工具。在分片间移动数据的好处很明显。例如&#xff…

springboot+vue+mybatis母婴二手销售系统+PPT+论文+讲解+售后

目前由于我国二手销售的规模较小,同发达国家相比,二手销售比重始终偏低,消费总额增长缓慢,进一步抑制了市场消费的提升,随着市场竞争的日益激烈,虽然许多商家主动选用二手销售模式,但却缺乏对其充分的重视与销售风险的良性控制,一些商家没有建立独立的信用实践管理部门,无法在交…

python OpenCV 库中的 cv2.Canny() 函数来对图像进行边缘检测,并显示检测到的边缘特征

import cv2# 加载图像 image cv2.imread(4.png)# 使用 Canny 边缘检测算法提取边缘特征 edges cv2.Canny(image, 100, 200)# 显示边缘特征 cv2.imshow(Edges, edges) cv2.waitKey(0) cv2.destroyAllWindows() 代码解析: 导入 OpenCV 库: import cv2加…

Linux 安装 MySQL 8.0.26

1、MySQL 8.0.26 下载 官方网站下载 MySQL 8.0.26 安装包,下载地址:mysql8.0.26 本案例采用Linux 64位操作系统进行讲解,通过wget命令下载安装包。 使用df -lh命令查看,磁盘大小,尽量安装在比较大的磁盘下&#xff0c…

猫狗识别—静态图像识别

猫狗识别—静态图像识别 1. 导入必要的库:2. 设置数据目录和模型路径:3. 定义图像转换4. 使用GPU5. 加载没有预训练权重的ResNet模型6. 创建Tkinter窗口:7.定义选择图片的函数:8.定义预测图片的函数:9.退出程序的函数:10.创建按钮:11.运行Tkinter事件循环:12. 完整代码&#xf…

不止是只有维度建模,数据仓库还有Data Vault建模

引言 在数据仓库设计中,传统的星型和雪花型模型有着各自的优势和劣势。随着数据量的增大和数据源的多样化,Data Vault(数据仓库)建模方法逐渐受到关注和应用。Data Vault建模是一种灵活、可扩展、适应性强的建模方法,…

视频多功能闪剪助手,智能去重去水印一键剪辑

这款软件具有全平台去水印的功能,无论视频来自哪个平台,无论水印的位置如何变换,它都能轻松去除。同时,它还支持各种去重方法,无论重复内容的形式如何,它都能一一识别并移除,让你的视频内容始终…

HarmonyOS Next开发学习手册——层叠布局 (Stack)

概述 层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过 Stack 容器组件实现位置的固定定位与层叠,容器中的子元素依次入栈,后一个子元素覆盖前一个子元素&…

SpringCloud Alibaba Sentinel规则持久化实践总结

默认情况下&#xff0c;一旦我们重启应用&#xff0c;sentinel规则将消失&#xff0c;生产环境需要将配置规则进行持久化。这里我们实践将Sentinel持久化到Nacos中。 ① pom依赖 我们引入sentinel-datasource-nacos&#xff1a; <dependency><groupId>com.aliba…

【Android Studio】Notification通知提醒功能完整代码以及踩坑记录

前言&#xff1a;在最近学习安卓通知功能的开发中&#xff0c;遇到了一些坑&#xff0c;困扰了我一些时间&#xff0c;搜集了大量资料写个博客总结一下&#xff0c;希望对大家有帮助。 目录 一、启动项目闪退 1.1、问题详情 1.2、解决方法 二、点击通知无法跳转 2.1、问题…

计算机缺失OpenCL.dll怎么办,OpenCL.dll丢失的多种解决方法

在使用电脑的过程中&#xff0c;我们经常会遇到一些开机弹窗问题。其中&#xff0c;开机弹窗找不到OpenCL.dll是一种常见的情况。本文将详细介绍开机弹窗找不到OpenCL.dll的原因分析、解决方法以及预防措辞&#xff0c;帮助大家更好地解决这一问题。 一&#xff0c;了解OpenCL.…

[AIGC] Doris:一款高效的MPP数据仓库引擎

在大数据处理的领域中&#xff0c;Apache Doris&#xff08;原百度 Palo&#xff09;是一个高效的MPP&#xff08;大规模并行处理&#xff09;数据仓库&#xff0c;最初由百度开发&#xff0c;现在已经成为Apache的孵化项目。 (图片取自百度) – 文章目录 1. Doris的基础知识…

并发 多线程

目录 thread thread 类总览 构造函数 join joinable ​编辑 detach swap yield swap 成员函数的调用 namespace::this_thread 线程同步--锁 互斥锁mutex 递归锁recursive_mutex 定时锁 Lock 锁辅助类 lock_guard​编辑 unique_lock std::lock 解决死锁问题 消息…

华为认证hcna题库背诵技巧有哪些?hcna和hcia有什么区别?

大家都知道华为认证hcna是有题库供考生刷题备考的&#xff0c;但题库中海量的题目想要在短时间背诵下来可并不是一件容易的事情&#xff0c;这就需要我们掌握一定的技巧才行。华为认证hcna题库背诵技巧有哪些? hcna和hcna这二者又有什么区别呢?今天的文章将为大家进行详细解…

鸿蒙开发设备管理:【@ohos.batteryInfo (电量信息)】

电量信息 该模块主要提供电池状态和充放电状态的查询接口。 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import batteryInfo from ohos.batteryInfo;属性 描述电池信息。 系统能…

汇川学习笔记7 - 雕刻机项目

1、系统上电轴准备好之后&#xff0c;自动复回原点一次&#xff0c; 2、在雕刻机面板上有三个按钮用来控制画三种图形 3、注意cnc代码放置的文件夹 4、FILE0文件内容 5、FILE1文件内容 6、FILE2文件内容 7、程序代码下载地址 https://download.csdn.net/download/qq_6191667…

设置日历程序

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 设置日历 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void dateTimePicker1_ValueChanged(object sender, EventArgs e){richTextBox1.Text dateTimePicker1.T…

CCSP自考攻略+经验总结

备考攻略 备考攻略准备阶段通读阶段精度阶段总复习阶段刷题阶段命运审判 写到最后 备考攻略 趁着对ssp知识点的理解还在&#xff0c;开始ccsp的考证之路&#xff0c;文章结构还是按照cissp备考篇的结构梳理。本次备考和cissp的离职在家备考不同&#xff0c;ccsp是在职利用非工…

鸿蒙开发Ability Kit(程序框架服务):【ServiceAbility切换】 组件切换

ServiceAbility切换 FA模型中的ServiceAbility对应Stage模型中的ServiceExtensionAbility。Stage模型下的ServiceExtensionAbility为系统API&#xff0c;只有系统应用才可以创建。因此&#xff0c;FA模型的ServiceAbility的切换&#xff0c;对于系统应用和三方应用策略有所不同…

【深度学习】实践方法论

李宏毅深度学习笔记 优化问题 训练数据的损失不够低的时候&#xff0c;到底是模型偏差&#xff0c;还是优化的问题&#xff1f; 判断方法是通过比较不同的模型来判断模型现在到底够不够大 看到一个从来没有做过的问题&#xff0c;可以先跑一些比较小的、比较浅的网络&#x…