RAG原理详解

什么是RAG

检索增强生成(Retrieval Augmented Generation,简称RAG)为大型语言模型(LLMs)提供了从某些数据源检索到的信息,以此作为生成答案的基础。简而言之,RAG是搜索+LLM提示的结合,即在有搜索算法找到的信息作为上下文的情况下,让模型回答提出的查询。查询和检索到的上下文都被注入到发送给LLM的提示中。
在这里插入图片描述

原理流程

将文本分割成块,然后使用基于Transformer decoder的模型将这些块嵌入到向量中,将所有这些向量放入一个索引中,最后为LLM创建一个提示,告诉模型在我们在搜索步骤中找到的上下文中回答用户的查询。

在运行时,我们使用相同的编码器模型将用户的查询向量化,然后对索引执行这个查询向量的搜索,找到前k个结果,从我们的数据库中检索相应的文本块,并将它们作为上下文输入到LLM的提示中。

切分和向量化

首先,我们想创建一个向量索引,代表我们文档的内容,然后在运行时搜索这些向量与查询向量之间最小的余弦距离,对应于最接近的语义含义。

切分:Transformer模型有固定的输入序列长度,即使输入上下文窗口很大,一个句子或几个句子的向量也比几页文本的平均向量更好地代表它们的语义含义(也取决于模型,但通常如此),所以要切分你的数据——将初始文档切分为某个大小的块,不会丢失它们的含义(将文本切分为句子或段落,而不是将单个句子切成两部分)。有各种文本分割器实现能够完成这项任务。

块的大小是一个需要考虑的参数——它取决于你使用的嵌入模型及其在令牌上的容量,标准的Transformer编码器模型如基于BERT的句子转换器最多接受512个令牌,OpenAI ada-002能够处理更长的序列,如8191个令牌,但这里的折中是为LLM提供足够的上下文进行推理与执行搜索的足够具体的文本嵌入。最近的一项研究[3]说明了块大小选择的考虑因素。在LlamaIndex中,这是通过NodeParser类来覆盖的,它提供了一些高级选项,如定义自己的文本分割器、元数据、节点/块关系等。

向量化:下一步是选择一个模型来嵌入切割后的块——有很多选择,例如像bge-large或E5嵌入系列这样的搜索优化模型

向量存储索引:RAG管道的关键部分是搜索索引,它存储了我们在上一步中获得的向量化内容。最简单的实现使用平面索引——在查询向量和所有块向量之间进行暴力距离计算

分层索引:如果您需要从许多文档中检索信息,您需要能够有效地在其中搜索,找到相关信息,并将其综合为带有来源引用的单一答案。在大型数据库中做到这一点的有效方法是创建两个索引——一个由摘要组成,另一个由文档块组成,并分两步进行搜索,首先通过摘要筛选出相关文档,然后仅在这个相关组内搜索。
在这里插入图片描述
上下文丰富化:上下文丰富化是检索更小的块以提高搜索质量,但添加周围上下文让LLM进行推理。通常有两种做法——通过在检索到的较小块周围的句子扩展上下文,或者将文档递归地分割成包含较小子块的多个较大的父块。

句子窗口检索:在这个方案中,文档中的每个句子都分别嵌入,这提供了极高的查询与上下文余弦距离搜索的准确性。为了在找到最相关的单个句子后更好地推理所发现的上下文,我们通过在检索到的句子前后扩展k个句子的上下文窗口,然后将这个扩展的上下文发送给LLM
在这里插入图片描述
自动合并检索器(又称父文档检索器):这里的想法与句子窗口检索非常相似——搜索更精细的信息片段,然后在将这些上下文提供给LLM进行推理之前扩展上下文窗口。文档被分割成较小的子块,这些子块引用较大的父块。
在这里插入图片描述
在这种方法中,首先在更细粒度的子块上进行搜索,找到与查询最相关的块。然后,系统会自动将这些子块与它们所属的更大的父块结合起来。这样做的目的是在回答查询时为LLM提供更丰富的上下文。例如,如果一个子块是一段或一小节,父块可能是整个章节或文档的一大部分。这种方法既保留了检索精度(因为是在更小的块上搜索),同时也通过提供更广泛的上下文来增强LLM的推理能力。

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

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

相关文章

Mac用户必备神器:Default Folder X,让文件操作更快捷、更智能!

Default Folder X for Mac是一款功能强大的文件管理辅助工具,它为Mac用户带来了前所未有的文件操作体验。🌟 无论是日常办公、学习还是娱乐,Default Folder X都能帮助你更高效地管理文件,让你的工作更加得心应手。💼 …

AD高速板设计(笔记)

Alt左键高亮某个器件或属性,点击任意位置取消高亮。 TP设置旋转角度为45度,即可选中器件按空格旋转时候每次旋转45度。 先画出想要割槽的区域,选中之后TVB即可开槽。 左右翻转电路板:VB DR打开规则设置 UFO对器件进行扇出&#…

Linux系统部署可视化数据多维表格APITable并实现无公网IP远程协同办公

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-G5XdKx1vxX0o0PES {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

AVM 环视拼接方法介绍

0. 简介 关于车辆的全景环视系统网上已经有很多的资料,然而几乎没有可供参考的代码,这一点对入门的新人来说非常不友好。全景环视系统,又称AVM。在自动驾驶领域,AVM属于自动泊车系统的一部分,是一种实用性极高、可大幅…

面试题总结:HashMap底层原理

不仅仅是一道题,之后的某一天,它可能是破局的关键。 关于HashMap的知识点有哪些呢?分层次展示 1.基础知识: 存储键值对结构、底层数据结构、红黑树和链表 2.位运算与实现 位运算、put、get方法的实现 3.关于锁 segment锁和桶锁、线…

Java 中 Set 集合是如何实现添加元素保证不重复的?

Java 中的 Set 集合是一种不允许包含重复元素的集合。它主要通过两种方式来实现确保元素不重复的机制:一是依赖元素的 hashCode() 方法和 equals() 方法,二是底层数据结构的支持。 1. hashCode() 和 equals() 方法 在 Java 中,每个对象都有…

【服务器配置】docker环境配置

docker环境配置 本文是在ubuntu 22.04机器配置docker环境 查看系统的内核版本 uname -a Linux xxf-ThinkStation-P340 5.15.0-101-generic #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024 x86_64 x86_64 x86_64 GNU/Linuxx86 64位 系统 如果是32位 不能安装docker 更新软件…

分布式数据库Polardb-X架构及特点

PolarDB-X架构 计算节点(Compute Node,CN)是系统的入口,采用无状态设计的sql引擎提供分布式路由和计算,包括SQL解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务2PC协调…

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪,科技日新月异,经济、信息等方面都取得了长足的进步,特别是信息网络技术的飞速发展,对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利,开发一套基于java的大学生…

文献学习-37-动态场景中任意形状针的单目 3D 位姿估计:一种高效的视觉学习和几何建模方法

On the Monocular 3D Pose Estimation for Arbitrary Shaped Needle in Dynamic Scenes: An Efficient Visual Learning and Geometry Modeling Approach Authors: Bin Li,† , Student Member, IEEE, Bo Lu,† , Member, IEEE, Hongbin Lin, Yaxiang Wang, Fangxun Zhong, Me…

PHP01——php快速入门 之 在Mac上使用phpstudy快速搭建PHP环境

PHP01——php快速入门 之 在Mac上使用phpstudy快速搭建PHP环境 0. 前言1. 下载小皮面板1.1 下载phpstudy(小皮面板)1.2 启动、简单访问1.2.1 启动Apache1.2.2 访问1.2.3 访问自定义文件或页面 2. 创建网站2.1 创建网站2.2 可能遇到的问题2.2.1 hosts权限…

Prompt提示工程上手指南:基础原理及实践-思维树 (ToT)策略下的Prompt

前言 此篇文章已经是本系列的第五篇文章,之前我们已经将检索增强生成(RAG)策略,逐渐我们掌握的知识和技术都在不断提高,对于Prompt的技巧策略也不能只局限于局部运用而要适应LLM大模型的整体框架去进行改进休整。较为主流的LLM模型框架设计基…

提升数据质量的三大要素:清洗prompt、数据溯源、数据增强(含Reviewer2和PeerRead)​

前言 我带队的整个大模型项目团队超过40人了,分六个项目组,每个项目组都是全职带兼职,且都会每周确定任务/目标/计划,然后各项目组各自做任务拆解,有时同组内任务多时 则2-4人一组 方便并行和讨论,每周文档…

Vue3实现pdf本地预览功能

一、先直接看看效果吧 放大后 缩小后 也可以分页显示 二、选用vue-pdf-embed和vue3-pdfjs的原因 选用这两个的插件是因为如果实现pdf预览其实使用iframe标签就可以的,但是使用iframe标签实现的比较臭,vue-pdf-embed是能够自定义样式的,更…

如何使用hugging face的模型库?

Hugging Face 是一个流行的自然语言处理 (NLP) 模型库和社区,提供了大量预训练模型、工具和资源,使得 NLP 的开发者和研究人员能够快速高效地构建和应用各种文本相关应用。在这里,我将向您介绍如何在 1 天内快速熟悉 Hugging Face 的基本功能…

分析系统性能问题从哪里入手?

本人十年大厂经验,整理技术资料不易, 完整详细文章关注公众号,后续还会有免费学习资料 1. 高性能架构的三个核心优化手段 负载均衡:通过分发用户请求到多个服务器,降低单一服务器的负载压力。 应用层负载均衡&#xf…

Python零基础从小白打怪升级中~~~~~~~TCP网络编程

TCP网络编程 一、什么是TCP协议 TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 :数据传输之前客户端和…

Stable Diffusion AI绘画宝典:从新手到高手,一图胜千言!

在这个数字化时代的浪潮中,人工智能技术以其惊人的创造力和创新性席卷全球。党的二十大报告把“实施科教兴国战略,强化现代化建设人才支撑”作为战略举措进行系统阐述,彰显我国不断发展新动能、新优势的决心和气魄。 Stable Diffusion是一款…

Vue3 + Element-Plus 使用 Table 预览图片发生元素遮挡

Vue3 Element-Plus 使用 Table 预览图片发生元素遮挡 问题代码问题重现解决方法最终效果 问题代码 <el-table-column label"视频" align"center"><template #default"scope" style"display: flex;"><div style"…

碾压LoRA!Meta CMU | 提出高效大模型微调方法:GaLore,内存可减少63.3%

引言 大模型训练通常会遇到内存资源的限制。目前常用的内存减少方法低秩适应&#xff08;LoRA&#xff09;&#xff0c;通过引入低秩&#xff08;low-rank&#xff09;适配器来更新模型的权重&#xff0c;而不是直接更新整个权重矩阵。然而&#xff0c;这种方法在预训练和微调…