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

news2024/9/22 15:33:32

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%免费】🆓

在这里插入图片描述

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

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

相关文章

OpenStack × OceanBase: 打造高可用可扩展的基础设施平台

OceanBase 社区资深总监封仲淹在9月3日参加 OpenInfra 亚洲峰会中,分享了OceanBase与OpenStack的联合解决方案。本文将介绍这一联合方案的技术亮点及其为用户带来的独特价值。 OpenStack长期以来一直是云计算领域的先行者,通过提供强大的开源平台&#x…

西门子博途零基础学PLC必会的100个指令

#西门子##PLC##自动化##工业自动化##编程##电工##西门子PLC##工业##制造业##数字化##电气##工程师# 工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群

MATLAB求解0-1线性规划问题的详细分析

引言 0-1线性规划是整数规划中的一种特殊形式,它广泛应用于资源分配、工厂选址、投资组合优化、物流运输等多个领域。0-1线性规划的特点是,决策变量只能取0或1的离散值,通常用于描述“是-否”决策问题。随着计算机技术的发展,数学…

红日靶机(一) 笔记

红日靶机(一)笔记 概述 域渗透靶机,可以练习对域渗透的一些知识,主要还是要熟悉 powershell 语法,powershell 往往比 cmd 的命令行更加强大,而很多渗透开源的脚本都是 powershell 的。例如 NiShang,PowerView 等等。…

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示,也让人摸不着头脑。只能是记下来备用吧。

Ai+若依(集成easyexcel实现excel表格增强)

EasyExcel 介绍 官方地址:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一…

Web3 项目安全手册

现如今针对 Web3 项目的攻击手法层出不穷,且项目之间的交互也越发复杂,在各个项目之间的交互经常会引入新的安全问题,而大部分 Web3 项目研发团队普遍缺少的一线的安全攻防经验,并且在进行 Web3 项目研发的时候,重点关…

JavaWeb中处理 Web 请求的方式总结

文章目录 JavaWeb中处理 Web 请求的方式总结1. 原始的 Servlet 方式1.1. 环境搭建**创建 Maven 或 Gradle 项目**:**添加 Servlet 依赖**:**创建 Servlet 类**:**配置项目**:**配置 Tomcat**: 1.2. 路由机制1.3. 示例代…

[产品管理-4]:NPDP新产品开发 - 2 - 制定企业经营战略目标的结构化方法与工具

目录 一、SWOT分析工具 1、SWOT分析工具概述 2、SWOT分析与企业战略目标制定的关系 3、SWOT分析在企业战略目标制定中的应用实例 4、SWOT分析的改进与应用建议 二、P E S T L E 分 析:外部环境分析 2.1 概述 1. 政治因素(Political) …

2024第三届大学生算法大赛 真题训练3 解题报告 | 珂学家

前言 题解 C. 洞穴探险 题目描述: 简单来说,就是 在一个无向图中,两个点之间关系 (存在多条简单路径,一条简单路径,不联通), 请判断两点之间的关系。 思路: 并查集 tarjan割边 对于通联和非联通&#x…

Java学习Day41:手刃青背龙!(spring框架之事务)

1.spring事务概念 在数据层和业务层保证一系列数据库操作原子性成功失败!(相比事务可以在业务层开启) 1.事务定义:关键字:Transactional(一般写在接口上) 2.事务管理器:在JdbcCon…

vscode ssh离线远程连接ubuntu调试

遇见问题: 1 ssh连接上无法启动服务器的虚拟环境; 2 ssh连接上启动服务器的虚拟环境后无法打断点; 对于问题需要参考下面连接安装python和debugy的插件拓展,并且配置json文件link。VSCode - 离线安装扩展python插件教程_vscode…

web 自动化测试框架 TestCafe 安装和入门使用

一、TestCafe 介绍: TestCafe 是一款基于 Node.js 的端到端 Web 自动化测试框架,支持 TypeScript 或 JavaScript 来编写测试用例,运行用例,并生成自动化测试报告。 TestCafe 兼容 Windows,MacOS 和 Linux 系统&#x…

基于C++实现(控制台+界面)通讯录管理系统

个人通讯录管理系统 问题描述: 主要内容: 个人通讯录是记录了同学(包含一起上学的学校名称)、同事(包含共事的单位名称)、朋友(包含认识的地点)、亲戚(包含称呼&#…

国家级|加速科技成功入选国家级专精特新“小巨人”企业

9月6日,浙江省通过的第六批专精特新“小巨人”企业名单在省经济和信息化厅官网完成公示,经过严格评审,杭州加速科技有限公司正式获国家级专精特新“小巨人”企业认定。 专精特新”小巨人”企业具备专业化、精细化、特色化、新颖化特征&#x…

“我”变小了但更强了!英伟达发布最新大语言模型压缩技术,无损性能且提升数倍!

1. 摘要 英伟达研究团队提出了一份全面报告,详细介绍了如何使用剪枝和蒸馏技术将Llama 3.1 8B和Mistral NeMo 12B模型分别压缩至4B和8B参数。他们探索了两种不同的剪枝策略:深度剪枝和联合隐藏/注意力/MLP(宽度)剪枝。 研究人员…

Adoptium Temurin JDK 的下载

在当今的软件开发领域,Java 无疑是最受欢迎和广泛使用的编程语言之一。Java 开发工具包(JDK)是任何 Java 开发者不可或缺的工具,它提供了编译、调试和运行 Java 应用程序所需的所有工具和库。Eclipse Temurin 是一个流行的开源 JD…

网络药理学:分子动力学模拟入门、gromacs能量最小化

推荐视频 B站: 讲的都是有效的概论,其中关于分子动力学模拟归纳的三步挺有用的。 B站:也没有讲清楚关于分子对接后得到的文件该如何处理。 B站: 需要用的是autodock vina,而且走过一遍up主之前分子对接的视频才比较…

mysql笔记3(数据库、表和数据的基础操作)

文章目录 一、数据库的基础操作1. 显示所有的仓库(数据库)2. 创建数据库注意(命名规范): 3. 删除数据库4. 查看创建数据库的SQL5. 创建数据库时跟随字符编码6. 修改数据库的字符编码 二、表的基础操作1. 引入表的思维2. 引用数据库3. 查看该数据库下面的表4. 创建表…

终端安全如何防护?一文为你揭晓答案!

终端安全防护是确保组织内部网络及其连接设备免受威胁的关键措施。 以下是终端安全防护的一些核心方法: 1. 资产管理与识别 摸清家底:识别所有连接到网络的终端设备及其状态,包括硬件和软件配置。 资产分类:确定哪些资产最为关…