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 vue 开源 会员收银系统 (4) 门店模块开发

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

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省赛真题 一、题目要求…

【教学类-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标准颁布,要求所有电动汽车必须上传数据开始,各车厂就开始花费大量的人力物力,用于数据的上传与存储。同时随着智能化、网联化的趋势,不断丰富上传数据的内容与数量。数据已成为车厂的重要资产,但…

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

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

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

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

Jenkins 流水线(Pipeline)详解

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

2024年5月26日 (周日) 叶子游戏新闻

资深开发者&#xff1a;3A游戏当前处于一种尴尬的中间地带游戏行业整体&#xff0c;尤其是3A游戏正处于艰难时期。尽管2023年3A游戏佳作频出&#xff0c;广受好评&#xff0c;但居高不下的游戏开发成本&#xff08;传闻《漫威蜘蛛侠2》的制作成本高达3亿美元&#xff09;正严重…

【机器学习结合AI绘画工具】——开启艺术创作的新纪元

目录 一、AI绘画工具的发展历程 二、AI绘画工具的技术原理 实例说明 三、AI绘画工具在艺术创作中的应用 实例网站 四、AI绘画工具的影响与未来展望 结论 机器学习和人工智能&#xff08;AI&#xff09;在过去的十年里取得了显著的进展。特别是在艺术创作领域&#xff0c…

excel表格写存神器--xlwt

原文链接&#xff1a;http://www.juzicode.com/python-tutorial-xlwt-excel 在 Python进阶教程m2d–xlrd读excel 中我们介绍了Excel表格的读取模块xlrd&#xff0c;今天这篇文章带大家了解Excel表格写存模块xlwt。他俩名字相近都以Excel的简写xl开头&#xff0c;rd是read的简写…

Java顺序表

Java顺序表 前言一、线性表介绍常见线性表总结图解 二、顺序表概念顺序表的分类顺序表的实现throw具体代码 三、顺序表会出现的问题 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&#xff0c;对我帮助很大。我想与…

春秋云境CVE-2018-20604

简介 雷风影视CMS是一款采用PHP基于THINKPHP3.2.3框架开发&#xff0c;适合各类视频、影视网站的影视内容管理程序&#xff0c;该CMS存在缺陷&#xff0c;可以通过 admin.php?s/Template/edit/path/*web*..*..*..*..*1.txt 的方式读取任意文件。 正文 1.进入靶场 2./admin…

【数据结构】二叉树-堆(上)

个人主页~ 二叉树-堆 一、树的概念及结构1、概念2、相关概念3、树的表示4、树的实际应用 二、二叉树的概念和结构1、概念2、特殊二叉树3、二叉树的性质4、二叉树的存储结构&#xff08;1&#xff09;顺序存储&#xff08;2&#xff09;链式存储 三、二叉树的顺序结构以及实现1、…

【C++】——入门基础知识超详解

目录 ​编辑 1.C关键字 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 命名空间的使用有三种方式&#xff1a; 注意事项 3. C输入&输出 示例 1&#xff1a;基本输入输出 示例 2&#xff1a;读取多个值 示例 3&#xff1a;处理字符串输入 示例 4&#xff1a;读…

Python并发编程大揭秘:打造你的多任务处理超能战队!

今天给大家带来的是学习如何构建一个能够同时处理海量任务的超级团队。从简单的线程和锁&#xff0c;到复杂的异步IO和多进程部署&#xff0c;每一个工具都像是你团队中的一员&#xff0c;各有所长&#xff0c;共同协作&#xff01; 文章目录 Python进阶之并发和并行编程详解1.…

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ ■ input 子系统简介 input 子系统就是管理输入的子系统&#xff0c; input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层&#xff0c;最终给用户空间提供可访问的设备节点 ■ input 驱…