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

RAG 的优化进阶与引入 Reranker

引言

在简单的 RAG 系统中,通过结合检索和生成技术,已经可以显著提升了对复杂查询的响应质量。Reranker 作为 RAG 系统中一个关键的进阶组件,通过对原 RAG 中检索到的内容进行重新组织,可以进一步提高系统的准确性。

本文将深入探讨 RAG 系统的优化方式,其中会着重介绍 Reranker 技术的基本工作原理、评估方法、优点与局限以及在 RAG 系统中的应用。

RAG 优化分析

RAG 系统的核心是检索Retrieval)与增强生产Augmentation & Generation),因此优化的方向可以从检索质量增强生产效果这两个方面入手。

请添加图片描述

检索质量

总体而言,RAG 系统的检索质量是局限于索引构建阶段向量索引算法的。其中索引构建阶段往往是既定的全局且粗粒度的方式,其优化层度将极大的决定 RAG 检索的精度和召回效果。常见的优化手段有添加滑动窗口数据清洗等(索引构建发生在 Retrieval 之前,此处将之归入 Pre-Retrieval 阶段)。

  • 滑动窗口:在将原始数据切分成数据块时,允许相邻数据块之间的首位各重叠部分,如要将"abcdef"切分成长度为 3 的块,可以允许 1 字符的重叠,那么滑动窗口的切分结果就是:[“abc”, “cde”, “ef”](不允许重叠的切分结果则是:[“abc”, “def”])。 这样可以一定层度保障数据块信息及其索引的完整性,从而提升召回率。
  • 数据清洗:清洗掉不相关的、过时的、不准确的、冗余的信息。

另一方面是向量索引算法方面的优化,对向量索引算法直接进行深入研究和优化往往是不划算的,我们只需要了解这些算法的特性,在不同的场景选择合适的算法及其用法,就能起到很好的优化效果。常见的优化方式是定制 Embedding Model采用动态 Embedding Model进行混合搜索等(此处向量索引算法对应了向量数据库对索引数据的存储和开放检索的能力,归入 Retrieval 阶段正好合适)。

  • 定制 Embedding Model:针对特定领域,使用领域相关的数据对 Embedding Model 进行微调,增强向量转换准度。
  • 动态 Embedding Model:基于 Transformer 架构的 Embedding Model,因为其注意力机制的存在,模型在将词转换为向量时,可以注意到词所处的上下文信息,从而动态的调整词准确的含义。
  • 混合搜索:同时使用关键词过滤和向量相似度搜索两种检索模式,其中关键词可以准确且“硬性的”排除一些不相关内容,而向量相似度搜索则基于对内容的“理解”去筛选最相关的内容,结合了两者优势。

增强生成效果

RAG 系统的增强生成是指将检索到的内容与原始提示整合成更优的提示,将此提示传给 LLM,令 LLM 生成的内容质量提升。这一步中“整合”的优劣,也将极大影响 LLM 最终生成结果的质量(整合实际发生在 Augmentation & Generation 之前,Retrivial 之后,因此可以将这一过程归入 Post-Retrivial 阶段)。

整合环节往往从提示与检索内容的相关性、连贯性、冗余度等方面进行优化,常用的方式是Prompt 压缩Reranking 等。

  • Prompt 压缩:与检索阶段的数据清洗类似,移除无关内容和冗余内容等,突出最相关内容。
  • Reranking:引入 Reranker 模型,增加知识检索范围,比如多路召回,然后对检索到的内容进行相关性排序和筛选,提升检索内容的相关性。

引入 Reranker

上文提到优化增强生产效果的方式有一种是引入 Reranker 模块。Reranker 在信息检索方面所扮演的角色以及产生的效果相当重要,关于 Reranker 的研究和落地也是一个不小的课题,因此这里有必要进一步探索一下。

Reranker 实现方式

在 RAG 系统中,Reranker 模块对检索到的内容与原始提示进行相关度评估,并给出其排序的结果,可以将知识检索范围设置成多路,如此便可以更广泛、更精细地把控最终检索到的内容,从而提高了 RAG 系统的性能。

Reranker 模块可以直接是一个基于加权得分算法的统计方法,也可以是用深度学习模型训练得到端到端(提示和检索内容到得分)的模型。

  • 统计方法:将多路召回的相识度按照一定的权重计算得分,这种方式的很明确,延迟影响也很小。
  • 深度学习模型:神经网络可以很好的分析输入之间语义的相关性,并以得分的形式直接输出,这种方式一定程度上是直接基于语义理解得出的最相关性,具有“柔性”的优点,而且不受多路召回中内容原始相对位置的影响。

Reranker 性能评估

Reranker 的性能通常通过命中率平均倒数排名这两个指标进行评估。

  • 命中率(Hit Rate):检索到的文档中找到正确答案的查询所占的比例。
  • 平均倒数排名(Mean Reciprocal Rank, MRR):所有查询中正确答案排名的倒数的平均值。如果第一个相关文档就是搜索结果的第一位,那么倒数就是 1;如果是第二位,倒数就是 1/2,以此类推。

Hit Rate 和 MRR 也是 Embedding Model 的评估指标,我们可以在不使用 Reranker 的场景下评估 Embedding Model 的这两个性能值,然后再适配不同的 Reranker 模型进行整体性能评估,最终找到综合得分最好的 Embedding + Reranker 组合。

优点与局限性

  1. Reranker 的优点
  • 提高精度:Reranker 通过对检索结果重新排序,可以显著提高最终检索结果的准确性。
  • 灵活性:适用于单路召回和多路召回场景,能够链接各种类型的查询和知识库类型。
  • 减少幻觉:通过提供更准确的上下文减少生成模型产生幻觉的风险。
  • 实时应用:在 RAG 系统中,Reranker 的影响是实时的,它可以作为一个独立模块进行评估和优化。
  1. Reranker 的局限性
  • 增加计算成本:Reranker 的计算成本较高,尤其是基于深度学习模型的计算。
  • 增加系统延时:Reranker 的引入会增加系统的响应时间,尤其是使用深度学习模型时。
  • 增加系统复杂性:集成 Reranker 需要复杂的系统设计支持,并需要持续维护 Reranker 模块。
  • 引入数据隐私和安全风险:Reranker 可能接收到敏感数据。

在对精度和准确性要求较高的场景下,Reranker 的引入是不错的选择;反之,在对响应速度和成本控制要求较高的场景下,需要对 Reranker 吃保守态度,可以优先考虑基于统计方法的 Reranker。

应用场景

RAG 系统通过 Reranker 实现了对检索结果的优化,提升了生成模型的输入质量。在 RAG 系统中,Reranker 的应用包括但不限于问答系统、内容创作、自动摘要和搜索等场景。

  • 问答系统:Reranker 帮助系统从大量文档中检索并重排答案,提供更加准确的问题回答。
  • 内容创作:Reranker 通过检索和重排相关信息,为创作者提供灵感和素材。
  • 自动生成摘要:Reranker 在自动摘要的任务中对文档的关键部分进行重排,以生成更加精炼和准确的摘要。

结论

RAG 的优化可以从检索质量和增强生成效果两个方面入手,其中 Reranker 作为 RAG 系统的重要组成部分,通过对检索结果的重新排序,可以显著提高最终检索结果的准确性。

Reranker 的优点在于提高精度、灵活性、减少幻觉和实时应用,但也存在增加计算成本、增加系统延时、增加系统复杂性和引入数据隐私和安全性等局限性。

Reranker 是高精度要求场景下的优选方案,但在对响应速度和成本控制要求较高的场景下,需要对 Reranker 保持保守态度。

Reranker 在问答系统、内容创作、自动摘要和搜索等场景中有着广泛的应用前景。


  • 上一篇:检索增强生成(RAG):智能内容生成的新纪元
  • 专栏:「机器学习」 | 「数智通识」

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 频率的工程测量01 - Rif算法的构造
  • 双阈值最大最小值筛选
  • 锂离子电池健康状态预测(Part1,Python)
  • Unity Shader unity文档学习笔记(十八):unity雾效原理
  • 算法板子:树形DP、树的DFS——树的重心
  • 除湿机的标准
  • 深入探究CSRF与SSRF漏洞复现:从原理到实践
  • 智能驾驶学习笔记,第一天
  • opencascade AIS_ViewCube源码学习小方块
  • Linux中栈的大小的修改
  • vue3+element-plus实现table表格整列的拖拽
  • 函数对象/仿函数
  • 【机器学习】逻辑回归的梯度下降以及在一变量数据集、两变量数据集下探索优化的梯度下降算法
  • 26.9 Django书籍管理练习
  • vue实现简易的全局加载动画效果
  • __proto__ 和 prototype的关系
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • React-Native - 收藏集 - 掘金
  • RxJS: 简单入门
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 少走弯路,给Java 1~5 年程序员的建议
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微服务核心架构梳理
  • 微信支付JSAPI,实测!终极方案
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • Nginx实现动静分离
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ![CDATA[ ]] 是什么东东
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (06)金属布线——为半导体注入生命的连接
  • (1)bark-ml
  • (1)常见O(n^2)排序算法解析
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (5)STL算法之复制
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (规划)24届春招和25届暑假实习路线准备规划
  • (黑马C++)L06 重载与继承
  • (七)Knockout 创建自定义绑定
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (译) 函数式 JS #1:简介
  • (转) 深度模型优化性能 调参
  • (转)母版页和相对路径
  • ***监测系统的构建(chkrootkit )
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .chm格式文件如何阅读
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 回调、接口回调、 委托
  • .NET/C# 使窗口永不获得焦点
  • .NET开发者必备的11款免费工具
  • .NET序列化 serializable,反序列化
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [Android]通过PhoneLookup读取所有电话号码