首页 > 其他分享 >【高级RAG技巧】使用二阶段检索器平衡检索的效率和精度

【高级RAG技巧】使用二阶段检索器平衡检索的效率和精度

时间:2024-04-26 15:34:27浏览次数:17  
标签:检索 RAG 模型 句子 精度 Encoder 精排 向量

一 传统方法

之前的文章已经介绍过向量数据库在RAG(Retrieval Augmented Generative)中的应用,本文将会讨论另一个重要的工具-Embedding模型。

一般来说,构建生产环境下的RAG系统是直接使用Embedding模型对用户输入的Query进行向量化表示,并且从已经构建好的向量数据库中检索出相关的段落用户大模型生成。但是这种方法很明显会受到Embedding模型性能的影响,比如是否支持多语言、跨语言检索、训练数据的质量等。因此,以改进Embedding模型为目标提升RAG系统性能一般会有两种做法:

方法1,在使用向量模型获取密集向量后,再使用Cross-encoder作为精排模型,对第一次召回的结果进行重排,以提高最终结果的质量。
方法2,使用稀疏向量搭配密集向量进行召回。密集向量即对整个文本进行向量化表示产生的向量,稀疏向量则是对原始文本的编码表示,如TF-IDF,BM25等。其中,稀疏向量可以帮助识别和捕捉特定的语义信息,比如文本中的关键词,而密集向量则可以提供更丰富的语义表达,是通过大量长文本学习而来的。通过同时将这两种向量进行召回,可以获得更丰富、更全面的信息,从而提升 RAG 的效果。

方法1和方法2既可以独立使用,也可以搭配使用,这就大大增加了算法工程师的武器库,通过搭积木的方式来提高RAG系统的效果。

二 Reranker模型剖析

本文主要讨论二阶段检索的方法,对于稀疏向量的讨论不在本文范围之内。

使用精排模型的原因

原因之一,向量数据库中存储大量的向量数据,而想要从大量数据中精确地检索出最相似的向量势必会带来极大的延迟,这在任何应用中都是无法接受的,因此向量数据库一般都会通过建立索引来优化查找过程,这实际上是一种近似检索而非精确检索,是准确与效率的折衷方案。如果数据库中没有那么多的向量,或者全表检索的时间损耗能够接受,则完全没必要用近似检索,但这在实际生产系统中是不可能的。

其二,LLM受限于上下文长度的限制,所以能利用到的向量片段数量是有限的,尽管现在越来越多的研究使得LLM的上下文窗口越来越长,如改进位置编码或者注意力机制等,但也有实验表明再长的上下文输入给大模型总会由遗失或者处理不好的情况,称为“Lost in middle”现象。因此,更好的办法是把更有用的上下文筛选出来,重点在于提升质而不是量。

精排模型结构

下面有两个模型,分别是Bi-Encoder和Cross-Encoder。左边的Bi-Encoder实际上就是我们常见的向量化模型,需要注意的是模型的结构并不是有2个Bert,而是只有1个Bert模型,但是对于两个句子分别做了向量化表示,最终比较这两个向量的相似度。这里‘Bi’表示的是处理的过程,而不是实际的结构

而精排模型用到的Cross-Encoder结构则是把两个句子的输入concat到一起,最终预测这两个句子是否相关,有点类似于Bert训练时的next sentence prediction(NSP)。不难发现,这实际上就是一个分类模型,而且并不会产生具体的向量表示,只会产生一个介于0和1之间的值,用于表示句子对的相似性。而且,在使用时,需要将Query与待查询的句子拼接到一起再输入给模型,所以这就决定了输入的句子对数量不能太多,否则带来的计算耗时将会是无法估量的。

精排模型的本质

直观上来讲,用Bi-Encoder“目的更加通用”,是为了得到输入的向量化表示,这些向量不仅有大小,还有方向,因此就有这么一个学习向量化时遇到的经典例子:$国王-男人=女王-女人$。

而使用了Cross-Encoder的精排模型,因为输入部分包含了两个原始的句子,因此是从文本空间直接表示句子的相似度,而不是到了向量空间再表示。具体而言就是:传统的向量是经过了模型输出之后再根据不同的算子计算向量之间的相似度,而这个模型是句子对由模型得到端到端的结果。

能否再使用一次向量比较?或者说一阶段后再对检索出的向量计算精确的相似度有意义吗?
意义不大。因为这时候就算再计算精确的向量相似度,也只是在经过转换后的向量空间进行比较,因为这个空间比较“通用”,必定有所损失,无法在某种程度上准确表示所有的向量。

精排模型为什么准呢?
如前面说的,Bi-Encoder必须将所有的文档都映射到一个向量中,这个过程会丢失信息。而且,检索时query和已有的向量是没有交互的,是离线的状态,只是通过额外的相似度计算方法得到比较相似的向量,对query来说,缺乏必要的上下文信息。

而刚好精排模型是同时对两个句子进行编码的,这时候对query来说会含有上下文信息,而且从原始空间映射到隐空间是一个句子对而不是单独的句子,也更保证最终得到的相似度包含用户查询的文档信息。但是相对的,精排模型的结构决定了它的计算是实时的,而且计算量会比单纯的相似度计算大不少。

现有的精排模型

现有开源的Reranker模型已经非常多了,国内比较出门的有Jina-8k、bge-reranker以及bce-reranker等,且更新得非常快,目前看起来就是哪个最新用哪个,基本差异不大。值得一提的是Jina的模型是基于Alibi改进的注意力机制,所以能支持8K的上下文窗口,而bce本身只支持512k的上下文窗口,但是对较长的上下文进行切分,并且以其中一段最好的得分作为最终的相似度。bge模型没看过源码,等以后有时间针对这几个模型再研究一番。

总结

虽然目前二阶段方法用来提升RAG的性能表现越来越受到关注,但是具体来看,其中所含的技术都是早就有的内容。Cross-Encoder这种架构在当时显得比较鸡肋,只能用来比较句子的相似度,甚至无法输出向量,在大部分自然语言处理场景中都不受待见,谁能想到在如今又焕发生机了呢?

标签:检索,RAG,模型,句子,精度,Encoder,精排,向量
From: https://www.cnblogs.com/deeplearningmachine/p/18160184

相关文章

  • 京东广告研发——效率为王:广告统一检索平台实践
    1、系统概述实践证明,将互联网流量变现的在线广告是互联网最成功的商业模式,而电商场景是在线广告的核心场景。京东服务中国数亿的用户和大量的商家,商品池海量。平台在兼顾用户体验、平台、广告主收益的前提推送商品具有挑战性。京东广告检索平台需要在保证服务高效可靠的前提下,......
  • 助力数智化转型:使用检索增强生成【RAG】构建物业行业大模型
    ​本文作者:蔡冠杰,碧桂园服务后端开发高级工程师,拥有8年开发经验。1 (RAG)检索增强生成技术介绍1.1检索增强生成是什么?举个例子,比如我作为员工,直接问大模型:提问:我们公司几点下班?大模型在没有“接触”过我们公司《员工手册》等企业私有数据的情况下,大模型往往难以给出正确......
  • rerank来提升RAG的准确度的策略
     RAG(Retrieval-AugmentedGeneration)是一种结合检索和生成两种技术的模型,旨在通过检索大规模知识库来增强文本生成任务的准确性。要通过reranking(重排序)来提升RAG的准确度,可以采取以下策略:1.使用更精细的评分函数RAG通常会在检索阶段根据输入问题或上下文生成一系列候选文档......
  • 解决Long类型在前端、后端传输精度丢失问题
    @ConfigurationpublicclassJacksonConfiguration{/***DateTime格式化字符串*/privatestaticfinalStringDEFAULT_DATETIME_PATTERN="yyyy-MM-ddHH:mm:ss";/***Date格式化字符串*/privatestaticfinalStringDEFAUL......
  • LLM学习(四)——构建 RAG 应用
    4.1接入Langchain首先我们导入所有需要的库文件importgoogle.generativeaiasgenaiimportosfromlangchain_google_genaiimportChatGoogleGenerativeAIfromlangchain_google_genaiimportGoogleGenerativeAIEmbeddingsfromlangchain.promptsimportPromptTemplate......
  • 将C++代码文件路径、行号、函数名称等打包到#pragma message输出的方法
    #include<iostream>#define__GEN_STRING_IMPL(x)#x#define__GEN_STRING(x)__GEN_STRING_IMPL(x)#define__GEN_LOCATION_STRING()__FILE__"("__GEN_STRING(__LINE__)"):"classCTestObject{public:voidprint1(){......
  • AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率
    产品概述:AP8852是一款内部集成有功率MOSFET管的降压型开关稳压器。以电流模式控制方式达到快速环路响应并提高环路的稳定性。宽范围输入电压(4.5V至60V)提供0.5A电流的高效率输出,可在移动环境输入的条件下实现各种降压型电源变换的应用。0.1uA的关机静态电流适合电池供电场合的应......
  • 光学雨量计:高精度测量降水量的理想解决方案
    光学雨量计:高精度测量降水量的理想解决方案河北稳控科技光学雨量计是一种高精度测量降水量的理想解决方案。它利用光学原理,通过光束的衰减来测量降雨强度和累积降水量。相比传统的雨量计,光学雨量计具有更高的精度和可靠性,成为现代气象观测的重要工具。 传统的雨量计通过测量......
  • multi-agent框架camel学习笔记(二)RAG和向量数据库
    本系列想学习如何从零开始搭建一个multi-agent系统并融入到应用中,这篇文章主要写其中的LLM-agent的核心模块RAG和向量数据库,以及Camel系统中是如何使用RAG。1.为什么要用RAG(检索增强生成)先聊下什么是RAG,为什么我们要用RAG:RAG和向量数据库本身不是很新的技术,传统的搜广推里也......
  • 浅谈sparse vec检索工程化实现
    前面我们通过两篇文章:BGEM3-Embedding模型介绍和Sparse稀疏检索介绍与实践介绍了sparse稀疏检索,今天我们来看看如何建立一个工程化的系统来实现sparsevec的检索。之前提过milvus最新的V2.4支持sparse检索,我们先看看milvus的实现。milvus的sparse检索实现milvus检索......