15 种高级 RAG 技术 ——从预检索到生成

2024-08-27 19:12

本文主要是介绍15 种高级 RAG 技术 ——从预检索到生成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

15 种高级 RAG 技术 ——从预检索到生成

检索增强生成(RAG)是一个丰富、快速发展的领域,它为增强由大型语言模型(LLM)驱动的生成式人工智能系统创造了新的机会。在本指南中,WillowTree的数据与人工智能研究团队(DART)分享了15种先进的RAG技术,用于微调您自己的系统,在优化客户的应用程序时,我们信任所有这些技术。

原文链接:15 Advanced RAG Techniques | WillowTree (willowtreeapps.com)

image

内容整理

什么是检索增强生成RAG?

检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强大的功能基础上,RAG 将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进 LLM 输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。

为什么检索增强生成很重要?

LLM 是一项关键的人工智能(AI)技术,为智能聊天机器人和其他自然语言处理(NLP)应用程序提供支持。目标是通过交叉引用权威知识来源,创建能够在各种环境中回答用户问题的机器人。不幸的是,LLM 技术的本质在 LLM 响应中引入了不可预测性。此外,LLM 训练数据是静态的,并引入了其所掌握知识的截止日期。

LLM 面临的已知挑战包括

  • 在没有答案的情况下提供虚假信息
  • 当用户需要特定的当前响应时,提供过时或通用的信息
  • 从非权威来源创建响应
  • 由于术语混淆,不同的培训来源使用相同的术语来谈论不同的事情,因此会产生不准确的响应

你可以将大型语言模型看作是一个过于热情的新员工,他拒绝随时了解时事,但总是会绝对自信地回答每一个问题。不幸的是,这种态度会对用户的信任产生负面影响,这是你不希望聊天机器人效仿的!

RAG 是解决其中一些挑战的一种方法。它会重定向 LLM,从权威的、预先确定的知识来源中检索相关信息。组织可以更好地控制生成的文本输出,并且用户可以深入了解 LLM 如何生成响应。

本文探讨了 15 种高级 RAG(检索增强生成)技术,旨在提升生成式 AI 系统的输出质量和整体性能稳健性。这些技术涵盖了从预检索到最终文本生成的各个阶段,为 AI 系统的精细化调整提供了丰富的选项

1. 预检索和数据索引技术

提高信息密度: 利用 LLM 对原始数据进行处理、清理和标记,剔除无关信息,提高信息密度,降低 LLM token 使用量和成本,并提升检索准确性。文中以使用 GPT-4 提取网页关键信息为例进行了说明,并强调了信息损失的风险和缓解策略。

应用分层索引检索 利用 LLM 生成文档摘要,创建多层检索系统,先通过摘要筛选相关文档,再进行更精细的检索,提高检索效率

利用假设问题索引****提升检索对称性: 使用 LLM 生成文档对应的假设问题和答案,并将问题作为检索单元,以解决查询与文档之间语义不对称的问题,提高检索准确性。

使用 LLM 对数据索引中的信息进行去重 通过聚类和 LLM 的信息提取能力,将数据索引中的信息去重,减少冗余,优化 LLM 的上下文窗口。

测试和优化分块策略 根据 embedding 模型、内容性质、查询复杂度、LLM 能力、数据量等因素,对分块策略进行 A/B 测试和优化,找到最佳分块大小和重叠率

2. 检索技术

利用 LLM 优化搜索查询 利用 LLM 的理解能力和对搜索引擎规则的掌握,将用户查询转化为更有效的搜索查询,提升检索效率和结果质量。文中分别给出了简单搜索查询和对话式 AI 系统查询优化的示例

利用假设文档嵌入****解决查询-文档不对称问题(HyDE): 利用 LLM 根据用户查询生成假设文档或文档片段,并将其用于语义搜索,解决查询-文档不对称问题,提高检索准确性

实施查询路由****或 RAG 决策器模式: 使用 LLM 将查询路由到适当的数据库,或判断是否需要进行 RAG 检索,以降低成本和提升效率

3. 检索后技术

使用重排序****优化搜索结果: 使用重排序模型优化搜索结果的优先级,将最相关的文档置于最前,提升 LLM 回答的准确性

使用上下文提示压缩****优化搜索结果: 利用 LLM 过滤、重新格式化或压缩检索到的信息,使之更适合 LLM 生成最终回复

使用纠正性 RAG 对检索到的文档进行评分和过滤: 使用训练好的模型对检索结果进行评估,过滤掉不正确或不相关的文档,提升 LLM 回答的准确性

4. 生成技术

优化提示和上下文窗口大小: 对生成提示进行优化,并通过实验确定最佳的上下文窗口大小,提升 LLM 回答的质量

使用思维链****提示消除噪声: 使用思维链提示引导 LLM 进行推理,增强其在存在噪声或无关上下文时的稳健性

使用 Self-RAG 使系统具备自我反思能力: 通过微调,使 LLM 能够在生成过程中输出特殊的反射标记(检索或批判标记),从而评估检索结果的相关性和生成结果的质量,并进行优化

通过微调忽略不相关上下文: 对 LLM 进行微调,使其能够忽略不相关的上下文,提升其在 RAG 任务中的性能

使用自然语言推理使 LLM 对不相关上下文更加稳健: 使用自然语言推理模型过滤掉不相关的上下文,提升 LLM 回答的准确性

其他考虑因素

输入和输出防护: 对 RAG 系统的输入和输出进行防护,防止出现越狱或恶意攻击,尤其是在金融服务和医疗保健等高监管行业

评估 RAG 系统: 建立可扩展的自动化评估方法,以监控 RAG 系统的性能,确保其质量和准确性

幻觉率: 关注 AI 幻觉问题,并采取措施进行检测、测量和缓解

其他潜在改进

  • 微调 embedding 模型
  • 使用知识图谱
  • 使用长上下文 LLM

总而言之,高级 RAG 技术为提升生成式 AI 系统的性能提供了丰富的工具和方法。通过合理地选择和应用这些技术,可以显著提高信息密度、检索准确性和用户回复质量。

这篇关于15 种高级 RAG 技术 ——从预检索到生成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112533

相关文章

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、