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.mfbz.cn/a/645719.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python并发编程学习记录

1、初识并发编程 1.1、串行,并行,并发 串行(serial):一个cpu上按顺序完成多个任务; 并行(parallelism):任务数小于或等于cup核数,多个任务是同时执行的; 并发(concurrency):一个…

Linux之Nginx

1、Nginx 1.1、什么是Nginx Nginx最初由Igor Sysoev开发,最早在2004年公开发布。它被设计为一个轻量级、高性能的服务器,能够处理大量并发连接而不消耗过多的系统资源。Nginx的架构采用了事件驱动的方式,能够高效地处理请求。它的模块化设计使…

Redis 的持久化(真的好细)

前言 Redis 是一个内存数据库,把数据存储在内存中,而内存中的数据是不持久的,要想数据持久就得将数据存储到硬盘中,而 Redis 相比于 Mysql 这样的关系型数据库最大的优势就在于将数据存储在内存中从而效率更高,速度更快…

大数据智慧消防解决方案(24页PPT)

方案介绍: 大数据智慧消防解决方案是提升消防安全管理水平、保障人民群众生命财产安全的重要手段。通过集成物联网、云计算、大数据、人工智能等先进技术,构建集监测、预警、指挥、救援于一体的智慧消防系统,将为消防安全事业注入新的活力。…

单日收益1000+看了就会的项目,最新灵异短视频项目,简单好上手可放大操作

各位好友,佳哥在此与大伙儿聊聊一项神秘莫测的短视频项目。你或许会想,“又是一个视频创作项目?” 但别急,这个项目与众不同,日入千元不再是梦,而且它的易用性让人惊喜,无论你是初学者还是资深玩…

数据结构·一篇搞定队列!

hello,大家好啊,肖恩又拖更了,你们听我狡辩,前段时间有期中考试,so我就没什么时间写这个,在这给大家道个歉😭😭😭 我后面一定尽力不拖更 那么接下来,我们来看…

数字化转型必备:营销策划流程图,打造你的数字市场地图

制作营销策划流程图是一个系统化的过程,它可以帮助你清晰地规划和展示营销活动的各个阶段。 以下是制作营销策划流程图的步骤: 1.确定营销目标: 明确你的营销活动旨在实现的具体目标,比如提升品牌知名度、增加销售额、吸引新客…

【CCIE | 网络模拟器】部署 EVE-NG

目录 1. 环境准备2. 下载 EVE-NG 镜像3. 安装 EVE-NG 虚拟机3.1 创建 eve-ng 虚拟机3.2 选择存储3.3 定义虚拟机计算资源(1)开启CPU虚拟化功能(2)精简置备磁盘 3.4 检查虚拟机设置 4. 安装系统4.1 选择系统语言4.2 选择系统键盘类…

2024.05.25 第 131 场双周赛

Leetcode 第 131 场双周赛 求出出现两次数字的 XOR 值 [Leetcode 求出出现两次数字的 XOR 值](https://leetcode.cn/problems/find-the-xor-of-numbers-which-appear-twice/description/] 给你一个数组 nums ,数组中的数字 要么 出现一次,要么 出现两次…

自从有了可观测性,传统运维如何进行提升?

在 201x 年,随着容器技术的出现,容器的部署方式逐渐被各大互联网公司采用,相比物理机/虚拟机,容器的好处是环境隔离、轻量、快速。 但是管理容器是一件复杂的事情,后来出现了 Kubernetes,成为了事实上的容…

数据结构(五)树与二叉树

2024年5月26日一稿(王道P142) 基本概念 术语 性质 二叉树 5.2.2 二叉树存储结构

MySQL|主从复制配置

我使用的是两个云服务器,如果读者使用的是虚拟机和本机,配置会简单很多。 关于云服务器安全组设置、防火墙端口等问题请参考文章: 使用华为云服务器进行项目部署(云服务器、防火墙配置) 条件:master 和 s…

网络安全之安全协议浅谈

安全协议 安全协议概述安全协议分类IPSecIPSec安全协议IPSec架构IPSec封装模式AH协议ESP协议SET协议SET协议电子交易模型SET协议安全目标认证中心CA 安全协议概述 安全协议是信息交换安全的核心,它在网络不同层次上、针对不同应用,通过对各种密码学技术…

006、API_单线程

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库 服务,本节首先通过多个客户端命令调用的例子说明Redis单线程命令处理 机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理 解单线程模型是使用和运维Redis的…

面向对象------多态

1.多态的定义 通俗来说,当同一种行为或者事情发生在不同的对象上,这些行为或者事情最终得到的结果不同。 注意:多态要发生在继承的基础上。 例如:彩色打印机和黑白打印机。 彩色打印机和黑白打印机是不同的对象,但…

微信小程序源码-基于Java后端的小区租拼车管理信息系统毕业设计(附源码+演示录像+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设…

跟TED演讲学英文:How to escape education‘s death valley by Sir Ken Robinson

How to escape education’s death valley Link: https://www.ted.com/talks/sir_ken_robinson_how_to_escape_education_s_death_valley Speaker: Sir Ken Robinson Date: April 2013 文章目录 How to escape educations death valleyIntroductionVocabularySummaryTranscri…

使用残差网络识别手写数字及MNIST 数据集介绍

MNIST 数据集已经是一个几乎每个初学者都会接触的数据集, 很多实验、很多模型都会以MNIST 数据集作为训练对象, 不过有些人可能对它还不是很了解, 那么今天我们一起来学习一下MNIST 数据集。 1.MNIST 介绍 MNIST 数据集来自美国国家标准与技术研究所, National Institute of S…

Spring MVC+mybatis项目入门:旅游网(四)用户注册——mybatis的配置与使用以及Spring MVC重定向

个人博客:Spring MVCmybatis项目入门:旅游网(四)用户注册2-持久化 | iwtss blog 先看这个! 这是18年的文章,回收站里恢复的,现阶段看基本是没有参考意义的,技术老旧脱离时代(2024年…

MiniMax 悄咪咪上线的这款 AI 产品,好用到爆炸!

大模型太卷了!上周国外某款多模态大模型的出现,立刻掀起了 AI 领域对话式多模态交互的热潮。不管是文字、语音,还是图片,都能与你进行实时交互。随后,谷歌也推出了类似的 Astra。 然而,国外的交互式大模型…