当前位置: 首页 > news >正文

深度解析RAG:你必须要了解的RAG优化方法

RAG(Retrieval-Augmented Generation)是一种结合检索和生成能力的技术框架,旨在通过从外部知识库中检索相关信息来增强生成模型的输出。其基本思想是利用大型语言模型(LLM)的生成能力,同时通过检索机制获取更准确和相关的信息,从而提高生成内容的质量和准确性。RAG的应用场景广泛,尤其适用于需要结合外部知识或实时信息的任务,如问答系统、信息摘要和聊天机器人等。

传统模型通常被视为黑盒,因为它们的内部机制和决策过程对用户而言是不透明的。这种不透明性使得用户难以理解和解释模型的输出,尤其是在复杂任务或大量数据处理的情况下。正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generation,RAG)应时而生,成为LLM时代的一大趋势。

下边我们将从RAG的每个环节来探讨如何优化RAG的效果。

文本预处理

  • 实体解析:消除实体术语的歧义,实现实体和术语的一致性。例如:RAG、检索增强生成等。
  • 文档划分:合理的区分不同主题文档。如果人类无法区分,那么检索系统也不行。例如:上课安排相关、售卖相关等。
  • 数据增强:简单的理解就是数据够多。扩充检索系统使其可以理解同义词、词汇意思的解释等;
  • 数据过期机制:多变的数据要能过期或者更新。
  • 增加周边数据:例如摘要、时间、问题的附加信息等。

文本分割

因为文本长度通常非常长,可能回超过LLM所能承受的上限,所以要对文本进行分割。理想的情况是在不超过LLM输入长度上限的基础上,每个分割的块(trunking)内部是一致的,块之间是有差异的。这样的好处是可以尽量的提供给LLM有效信息,而不会分散其注意力。常用的分割方法有以下几种:

  • 根据长度分割。例如设定每个块512个token,然后分割的每个块保证不超过512个token。可以通过OpenAI的相关库来计算token。还有一种方法也是比较常用的,就是后一个块包含前一个块的部分内容。
  • 按照句子进行分割。这部分可以通过NLTK等库来做。
  • 基于段落分割,然后在基于行分割。在dify中就有类似的分割方式实现。例如线根据\n\n进行按段分割。如果超长度,再根据\n分割。
  • 自定义分割。自己可以根据数据类型进行分割。例如word、excel或者JSON这样的数据可能就会根据其自身需要进行分割。
  • 基于语义分割。这种方法的目的还是要保证块内部信息的一致性。我们可以简单的理解就是先对文本分成句子,然后根据前后句子的相关度来进行合并。具体方法有可以依据嵌入的方法(在langchain有实现)、基于模型的方法以及基于LLM的方法(实际就是让模型帮我们分段)

Embedding(嵌入)

  • 尽可能使用动态嵌入。一开始看到这个词可能会比较蒙。实际非常好理解,他和静态嵌入的区别就在于是否可以捕获上下文信息,然后根据上下文信息使得每个词有不同的含义。例如:打飞机可能在不通的语境中含义是不一样的。bert就是动态嵌入,因为它引入了多头自注意力机制(self-attention)。Word2Vec就是静态嵌入。
  • 微调嵌入。这个上手较高,主要是对垂类数据来说的。大多数模型都是基于通用语料库进行训练,为了让嵌入有更好的效果可以对垂类数据的训练。增加模型对垂类领域数据的理解。
  • 混合嵌入。对不同问题或者不同的知识库使用不同的嵌入模型。

查询优化

  • 利用LLM从不同的视角根据用户提出的问题生成多个问题。然后根据生成的问题进行查询。最后把所有的问题并集。理论上这对于解决复杂问题非常有用。

  • **HyDE&QueryDoc。**使用假设文档嵌入 (HyDE) 改进检索增强生成。参考下边的两张图:

在这里插入图片描述
传统检索和HyDE的区别

在这里插入图片描述

实现原理我们来解释一下这张图。1.  根据用户的问题使用类似于ChatGPT这样的模型进行寻找答案。
1.  根据ChatGPT生成的答案去嵌入。
1.  然后使用向量相似性去查询文档。注意原始问题不做查询。
1.  用检索到的结果来生成最终结果。详细信息可以阅读:[**Advanced RAG: Improving Retrieval-Augmented Generation with Hypothetical Document Embeddings (HyDE)**](https://www.pondhouse-data.com/blog/advanced-rag-hypothetical-document-embeddings/)这总方法也并非总是有效,如果模型对知识了解较少则问题较大。
  • Back Prompting。后退提示法指导 LLM 首先从给定的细节中提取高级概念和原则,然后使用这些概念引导其推理得到正确的解决方案。这种提示法基于以下事实:“在关键决策中,人类发现抽象很有帮助,因为它提供了对环境的更广阔的视野”。例如:我想知道汉武帝某个时间段的成就,就可以想让模型给出汉武帝的所有经历,然后再给出答案。

检索

检索的目的是确保最终的答案出现在候选列表中。

  • 句子窗口搜索。这个本质不是一种检索优化。核心原理是就是检索到相应结果后,把周边数据一并提交给LLM,增加LLM对问答案的理解。
  • 使用Agent。这个方法就是使用Agent决定应该采用什么样的索引的方法。例如:根据问题选择不同的专注于不同领域的索引。
  • 混合检索。为了提高查询的**召回率,**可以采用向量索引和关键词检索的方法来组合RAG的检索功能。因为在RAG的搜索方法中大部分的场景的主要目的还是确保结果出现在候选列表中。

检索后处理

检索后处理比较典型的方法就是Rerank。核心思想是利用专有模型对结果进行重新排序。这些模型会对结果进行更深入的相关度的理解然后重新排序。确保相关对最高的答案排在最前面,以便于LLM更好的输出答案。

生成

生成这部分重点要考虑的是体验。比较简单的方式就是根据检索后的结果进行润色、整理然后输出给用户,但也可能存在无法找到答案的场景,这时候就要引导用户进行多轮对话来进行问题以及上下文的理解。涉及到一下基本部分。

  • 如果问题不够清晰,进行多轮用户对话引导,对问题进行追问或者采用其它策略结束会话。
  • 建立科学的用户反馈录入机制。根据用户反馈的答案进行知识库更新。

在这里插入图片描述

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

在这里插入图片描述

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
在这里插入图片描述

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

相关文章:

深度解析RAG:你必须要了解的RAG优化方法

RAG(Retrieval-Augmented Generation)是一种结合检索和生成能力的技术框架,旨在通过从外部知识库中检索相关信息来增强生成模型的输出。其基本思想是利用大型语言模型(LLM)的生成能力,同时通过检索机制获取…...

深度学习驱动下的字符识别:挑战与创新

一、引言 1.1 研究背景 深度学习在字符识别领域具有至关重要的地位。随着信息技术的飞速发展,对字符识别的准确性和效率要求越来越高。字符识别作为计算机视觉领域的一个重要研究方向,其主要目的是将各种形式的字符转换成计算机可识别的文本信息。近年…...

使用 JAXB 将内嵌的JAVA对象转换为 xml文件

使用 JAXB 将内嵌的JAVA对象转换为 xml文件 1. 需求2. 实现(1)FileDesc类(2)MetaFileXml类(3)生成对应的xml文件 1. 需求 获取一个目录下所有文件的元数据信息(文件名、大小、后缀等&#xff0…...

若依项目后台启动报错: [网关异常处理]、503

拉取代码启动项目,网关控制台报错: 21:31:59.981 [boundedElastic-7] WARN o.s.c.l.c.RoundRobinLoadBalancer - [getInstanceResponse,98] - No servers available for service: ruoyi-system 21:31:59.981 [boundedElastic-7] ERROR c.r.g.h.Gateway…...

【C++ Qt day10】

2、 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&am…...

GO HTTP库使用

Go的 net/http 包是一个强大且易于使用的库,用于构建HTTP服务器和客户端。通过它,你可以轻松实现HTTP请求的处理、路由、静态文件服务等功能。下面重点以及一个简单的Demo示例。 文章目录 1. **基础HTTP服务器**2. **处理请求与响应**3. **路由与处理器*…...

数据结构 - 顺序表

0.线性表 1.定义 线性表就是零个或多个相同数据元素的有限序列。 2.线性表的存储结构 ①.顺序结构 ②.链式结构 3.线性表的表示方法 例如: 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表,就…...

企业如何组建安全稳定的跨国通信网络?

组建一个安全稳定的跨国通信网络对于现代企业来说至关重要,尤其是当企业在全球范围内运营时。以下是一些关键步骤和考虑因素: 需求分析: 确定企业的具体通信需求,包括带宽要求、延迟敏感度、数据类型(如语音、视频、文…...

OCR在线识别网站现已上线!

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 由作者亲自开发的ocr识别网站哈哈,暂时汇聚了三十多种验证码模型以及算法,欢迎各路朋友去尝试,网站地址如下 http://gbj5w3.natappfree.cc/ocr 验证码类型包括但…...

排名再升2位 中国平安位列BrandZ最具价值中国品牌第9位

9月10日,凯度华通明略发布“2024年BrandZ最具价值中国品牌”榜单,中国平安位列榜单第9位,较2023年榜单排名上升2位,品牌价值韧性增长至205.14亿美元,十度蝉联中国保险行业品牌价值第一位。榜单特别提到,中国…...

k8s集群部署:环境准备

本教程基于centos9 arm架构展开。 1. 设置主机名 为每个节点设置主机别名,以便于集群中的角色识别: # 设置主节点的主机名为 kmaster sudo hostnamectl set-hostname kmaster --static# 设置工作节点1的主机名为 kworker1 sudo hostnamectl set-hostn…...

<C++> set、map模拟实现

目录 一、适配器红黑树 二、红黑树再设计 1. 重新设计 RBTree 的模板参数 2. 仿函数模板参数 3. 正向迭代器 构造 operator*() operator->() operator!() operator() operator--() 正向迭代器代码 4. 反向迭代器 构造 operator* operator-> operator operator-- operat…...

软考学习 数据结构 查找

1. 顺序查找(Sequential Search) 基本原理: 顺序查找是一种最简单、最直观的查找算法。它从数据集合的第一个元素开始,依次与目标元素进行比较,直到找到目标元素或遍历完所有元素为止。 适用条件: 适用…...

h264 视频流中添加目标检测的位置、类型信息到SEI帧

在 H.264 视频编码中,SEI(Supplemental Enhancement Information)消息用于传输额外的、非编码的数据,例如目标检测的信息。SEI 数据可以嵌入到 H.264 流中,以在解码过程中传递这些附加信息。 一、步骤 确定 SEI 类型&…...

大模型api谁家更便宜

1 openai 可点此链接查询价格:https://openai.com/api/pricing/ 2 百度 可点此链接查询价格:https://console.bce.baidu.com/qianfan/chargemanage/list 需要注意,百度千帆平台上还提供其他家的模型调用服务, 如llama, yi-34b等…...

代码随想录算法训练营第二十三天| 455. 分发饼干、376. 摆动序列、53. 最大子序和

今日内容 贪心理论基础Leetcode. 455 分发饼干Leetcode. 376 摆动序列Leetcode. 53 最大子序和 贪心理论基础 贪心算法的本质就是选择每一阶段的最优,达到全局上的最优。 贪心算法和之前学到的所有方法相比,它没有固定的使用套路,也没有固…...

react js 路由 Router

完整的项目,我已经上传了 资料链接 起因, 目的: 路由, 这部分很难。 原因是, 多个组件,进行交互,复杂度比较高。 我看的视频教程 1. 初步使用 安装: npm install react-router-dom 修改 index.js/ 或是 main.js 把 App, 用 BrowserRouter 包裹起来 2. Navigate 点击…...

AplPost使用

请求get 方法 1,添加token 2,填写get 的参数 2,post方法 把对象的形式直接复制到row里面 3,delete方法 可以直接后面拼接参数...

【Qt】Qt与Html网页进行数据交互

前言:此项目使用达梦数据库,以Qt制作服务器,Html制作网页客户端界面,可以通过任意浏览器访问。 1、Qt与网页进行数据交互 1.1、第一步:准备qwebchannel.js文件 直接在qt的安装路径里复制即可 1.2、第二步&#xf…...

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号:9】教师节到了,今天我要分享一组由AI绘制的教师节主题卡通人物插画,每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象,向辛勤的园丁们致敬! 🎓【教师形象】 这…...

SprinBoot+Vue智慧农业专家远程指导系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...

AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元

大规模语言模型(Large Language Models,LLM)泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比,大语言模型的构建过程涉及到更为复杂的训练方法,进而展现出了强大的自然语言理解能力…...

FLV 格式详解资料整理,关键帧格式解析写入库等等

FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头,Metadata元数据,然后一系列的音视频数据。 资料够多: FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图,比较全,但默认背景是白色&#xff…...

《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现

目录 一、图像直方图 1、什么是图像直方图 2、作用 1)分析图像的亮度分布 2)判断图像的对比度 3)检测图像的亮度和色彩偏移 4)图像增强和调整 5)阈值分割 3、举例 二、直方图用法 1、函数用法 2、参数解析…...

coredump-N: stack 消耗完之后,用户自定义信号处理有些问题 sigaltstack

https://mzhan017.blog.csdn.net/article/details/129401531 在上面一篇是关于stack耗尽的一个小程序例子。 https://www.man7.org/linux/man-pages/man2/sigaltstack.2.html 这里提到一个问题,就是如果栈被用光了,这个时候SIGSEGV的用户自定义的handler处理可能就没有空间进…...

数据库有关c语言

数据库的概念 SQL(Structured Query Language)是一种专门用来与数据库进行交互的编程语言,它允许用户查询、更新和管理关系型数据库中的数据。关系型数据库是基于表(Table)的数据库,其中表由行&#xff08…...

【网页播放器】播放自己喜欢的音乐

// 错误处理 window.onerror function(message, source, lineno, colno, error) {console.error("An error occurred:", message, "at", source, ":", lineno);return true; };// 检查 particlesJS 是否已定义 if (typeof particlesJS ! undefi…...

【第27章】Spring Cloud之适配Sentinel

文章目录 前言一、准备1. 引入依赖2. 配置控制台信息 二、定义资源1. Controller2. Service3. ServiceImpl 三、访问控制台1. 发起请求2. 访问控制台 总结 前言 Spring Cloud Alibaba 默认为 Sentinel 整合了 Servlet、RestTemplate、FeignClient 和 Spring WebFlux。Sentinel…...

怎么debug python

1、打开pycharm,新建一个python程序,命名为excel.py。 2、编写代码。 3、点击菜单栏中的“Run”,在下拉菜单中选择“debug excel.py”或者“Debug...”,这两个功能是一样的,都是调试功能。 4、调试快捷键:C…...

Java 递归

目录 1.A方法调用B方法,很容易理解! 2.递归:A方法调用A方法,就是自己调用自己! 3. 递归的优点: 4. 递归结构包括两个部分: 5. 递归的三个阶段 6. 递归的缺点&#…...