RAG概述(二):Advanced RAG 高级RAG

目录

概述

Advanced RAG

Pre-Retrieval预检索

优化索引

增强数据粒度

粗粒度

细粒度

展开说说

优化索引

Chunk策略

Small2Big方法

元数据

引入假设性问题

对齐优化

混合检索

查询优化

查询扩展

查询转换

Post-Retrieval后检索

参考


概述

Native RAG(基础RAG)体现了RAG开发范式的骨架,也即三段论Indexing-Retrieval-Generation。

Native RAG的不足是,在LLM这种高度不确定的场景下,还是太粗糙了,最终的表现就是效果不够好。

具体表现:

  1. 准确性低:Retrieval阶段查询到的块,和query本身的相关性低。可能导致LLM出现幻觉或空中掉物等问题。
  2. 召回低:Retrieval阶段查询的块,并没有返回足够多的相关块,进一步降低了LLM构建全面回应的可能性。
  3. 组装prompt的问题:这个阶段会将检索到的块和query融合,构建一个prompt给到LLM。若检索到的多个块中包含了相似或重复的内容,可能导致最终LLM生成内容的冗余和重复,也就是表现的婆婆妈妈。
  4. 灵活性问题:若检索阶段拿到了足够丰富的信息,和query一起构建扔给LLM后,LLM的生成完全基于检索出的内容,并没有增加新生成的内容,变成了复读机。

Advanced RAG的目标是对Native RAG的效果做了进一步优化。

Advanced RAG

Advanced RAG重点聚焦在检索增强,也即优化Retrieval阶段。

增加了Pre-Retrieval预检索和Post-Retrieval后检索阶段。

Pre-Retrieval预检索

本阶段关注的重点是:优化索引结构和原始查询。

优化索引

目标是提高被索引内容的质量。这涉及五种主要策略:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。

增强数据粒度
粗粒度

例如文档分块chunk较大。

理论上粗粒度,能包含更多的相关信息。

但这是一把双刃剑,粗粒度也可能包含了很多无关的内容,而这些无关内容可能会给LLM的generation阶段带来额外的困扰。

细粒度

例如文档分块chunk较小。

细粒度会导致分块很多,给检索阶段增加了压力。

同时细粒度也不能保证能提供完整的语义信息。

旁白:

  • 反正一刀切预制一个chunk大小肯定不行
  • 能不能动态优化?不同doc有不同的chunk?
展开说说

【针对文本数据】数据粒度从细到粗包括:

  1. Token
  2. Phrase 短语
  3. Sentence 句子
  4. Proposition 命题
  5. Chunk 分块
  6. Doc 整个文档

以Proposition命题为检索单元。命题被定义为文本中的原子表达式,每个命题都封装了一个独特的事实片段,并以简洁、自包含的自然语言格式呈现。

这种方法目的是提高检索精度和相关性。

【针对知识图谱Knowledge Graph】,数据粒度从细到粗包括:

  1. Entity 实体
  2. Triplet 三元组
  3. sub-Graph 子图
优化索引
Chunk策略

和数据粒度有一定关联性。

chunk可能导致句子截断,这会损坏语义完整性。

优化:

  • 递归拆分split
  • 滑动窗口
  • 分层检索:在多检索基础上合并全局关联信息

(具体怎么做下回分解)

一个关键点:如何在语义完整性和上下文长度之间取得平衡。

Small2Big方法

使用句子做检索单元(这个是small)

使用前句和后句做上下文(这个是big)

元数据

例如chunk的元数据:

  • 页码
  • 文件名
  • 作者
  • 时间
  • 类别

检索时可通过meta data先过滤,例如检索time range内的chunk,确保是新鲜的信息。

除了从原始文档中自动抽取meta data,也可以人工构建meta data,例如:

  • 添加段落摘要
  • 引入假设性问题
引入假设性问题

例如把doc喂给LLM,让LLM生成这个doc可以回答哪些问题。

在Retrieval时,对比原始query和LLM生成的这些假设性问题,可以用于过滤掉不相关的doc。

对齐优化

例如垂直领域,调优embedding模型,可以将领域内的相似知识嵌入到相近的空间(相比于通用embedding模型)。

混合检索
  1. 向量相似性检索
  2. 文本相似性检索
  3. 知识图谱检索

查询优化

查询优化就是让用户的原始问题更清晰,更适合于检索任务。

常见的方法包括查询改写、查询转换、查询扩展等。

查询扩展

将单个查询扩展为多个查询,丰富查询内容,可提供更丰富的上下文信息。

  1. 让LLM针对原始query生成多个查询
  2. 将复杂问题拆分成多个子问题
查询转换

改写用户的原始query

  1. 让LLM优化原始query
  2. 使用专门的较小的语言模型进行改写
  3. 让LLM先生成原始query的答案,然后将答案作为query,去根据相似性检索(而不是直接用原始query去检索)

Post-Retrieval后检索

重点是有效的融合检索到的相关内容和query。

主要方法包括:

  1. 分块chunk重排序
    1. 将检索到的块里,最相关的块优先级提高
  2. 上下文压缩
    1. 一个是避免prompt超长,超过LLM的窗口限制
    2. 另一个是找到基础信息,强调关键信息,将不相关的内容压缩、精简、淡化

参考

  1. RAG概述(一):RAG架构的演进-CSDN博客
  2. https://arxiv.org/pdf/2312.10997

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

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

相关文章

转义字符知识点

转义字符的使用 什么是转义字符? 它是字符串的一部分,用来表示一些特殊含义的字符 比如:在字符串中表现,单引号,引号,空行等等 固定写法 \字符 不同的\和字符的组合表示不同的含义. 常用的转义字符 附…

关于Springboot同时上传文件与其他参数

Springboot同时上传文件与其他参数 http请求数据传递分为请求体和请求参数。跟在url后面的为请求参数,文件上传和json数据放在请求体中。请求参数格式固定,后台可直接解析;请求体中的数据后台需要根据content-type字段按照特定格式解析。con…

shell从入门到精通(23)贪婪匹配、非贪婪以及独占模式

文章目录 贪婪与非贪婪的区别示例贪婪匹配的特点--自动回溯以满足匹配独占模式总结贪婪与非贪婪的区别 在正则表达式中,贪婪匹配和非贪婪匹配是指匹配模式下的不同行为。 贪婪匹配: 贪婪匹配会尽可能多地匹配符合模式的字符。换句话说,它会一直匹配直到无法再匹配为止。例…

springboot vue 开源 会员收银系统 (4) 门店模块开发

前言 完整版演示 前面我们对会员系统 springboot vue 开源 会员收银系统 (3) 会员管理的开发 实现了简单的会员添加 下面我们将从会员模块进行延伸 门店模块的开发 首先我们先分析一下常见门店的管理模式 常见的管理形式为总公司 - 区域管理(若干个门店&#xff…

Java实现插入排序、冒泡排序、堆排序、希尔排序、选择排序、优先队列排序、快速排序、归并排序(详细注释,原理解析)

插入排序 package learn;import java.util.Arrays;/** 每次都将当前元素插入到左侧已经排序的数组中,使得插入之后左侧数组依然有序。* 速度优于选择排序*/ public class InsertSort {public static void insertSort(int[] a) {int n a.length;for (int i 1; i &…

Elasticsearch优点和缺点以及要点和难点具体应用

Elasticsearch是一个开源、分布式、实时的搜索和分析引擎,它位于Elastic Stack(以前称为ELK Stack)的核心。以下是关于Elasticsearch的一些主要特点和功能: 1.分布式和可扩展性:Elasticsearch是分布式的,可以轻松扩展到多个节点以处理大规模数据集和高并发请求。通过将数…

C语言 | Leetcode C语言题解之第113题路径总和II

题目: 题解: int** ret; int retSize; int* retColSize;int* path; int pathSize;typedef struct {struct TreeNode* key;struct TreeNode* val;UT_hash_handle hh; } hashTable;hashTable* parent;void insertHashTable(struct TreeNode* x, struct Tr…

C++干货 --类和对象(二)

前言: 上文中,我们介绍了类这一重要知识点,包括为什么要有类、类的使用方法、封装、以及对象实例化。详情可以去看我的文章:写文章-CSDN创作中心C干货 --类和对象(一)-CSDN博客写文章-CSDN创作中心 这篇文章,我们简单…

我学会了用插件来辅助PostgreSQL,可拷,很刑!

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

【蓝桥杯省赛真题44】python计算N+N的值 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python计算NN的值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python计算NN的值 第十四届蓝桥杯青少年组python省赛真题 一、题目要求…

Makefile学习笔记18|u-boot顶层Makefile04

Makefile学习笔记18|u-boot顶层Makefile04 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录 C语言标准 # With the move to GCC 6, we have implicitly upgraded our language # standard to GNU11 (see https://gcc.gnu.org/…

WordPress--解决迁移后页面404(打不开)的问题

原文网址:WordPress--解决迁移后页面404的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍WordPress迁移后部分页面404(打不开)的解决方案。 方案:修改固定链接 简介 要在刚建好网站,还没导入数据之前修改固定链接,否则可能导…

【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)

背景需求: 【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸,1页6张黑白,1张6张白卡)-CSDN博客文章浏览阅读582次,点赞16次,收藏3次。【教学类-58…

Mac安装pytorch

先下载 Anaconda | The Operating System for AI 网速慢,用中国大陆镜像:NJU Mirror 之前装python3时用的是pip3,这里说一下这pip与conda的区别 Conda和pip都是Python包管理工具,用于安装和管理Python包 包管理范围&#xff1a…

汽车数据应用构想(一)

自从电动汽车GB/T32960标准颁布,要求所有电动汽车必须上传数据开始,各车厂就开始花费大量的人力物力,用于数据的上传与存储。同时随着智能化、网联化的趋势,不断丰富上传数据的内容与数量。数据已成为车厂的重要资产,但…

Day16

Day16 一、迭代器 深入迭代器-foreach的底层 for (String element : list) {System.out.println(element);}底层: //使用foreach循环遍历集合的底层实现:String element;for(Iterator it list.iterator();it.hasNext();System.out.println(element))e…

微服务:eureka的搭建,以及服务注册、服务发现、负载均衡

eureka 搭建 新建一个Module,maven项目&#xff0c;导入依赖。 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><…

月入10万+管道收益,揭秘旅游卡运营的5个阶段!

网上的项目确实繁多&#xff0c;只要深入研究&#xff0c;总能找到适合自己的赚钱方式。在互联网上运营&#xff0c;关键在于理解其底层逻辑。旅游卡项目&#xff0c;就是一个能实现月入10万的实例。接下来&#xff0c;我将为你揭密旅游卡运营的5个阶段&#xff1a; 1、先赚成…

24年湖南教资认定即将开始,别被照片卡审!

24年湖南教资认定即将开始&#xff0c;别被照片卡审&#xff01;

Jenkins 流水线(Pipeline)详解

大家好&#xff0c;Jenkins 流水线&#xff08;Pipeline&#xff09;是一种可编排的持续集成和交付&#xff08;CI/CD&#xff09;方法&#xff0c;它以代码的方式定义整个软件开发过程中的构建、测试和部署流程。接下来就跟大家分享一下Jenkins 流水线&#xff08;Pipeline&am…