高阶RAG-ReRank

news2024/10/6 20:29:52

1.背景-现RAG存在的问题

现在很明显,仅仅依靠向量检索技术不足以开发 RAG 应用程序,尤其是在生产环境中部署。

以下为案例:

  • 关键词搜索容易返回不回答问题的结果
  • 稠密检索容易返回不正确的结果

实际RAG检索中也有很多类型问题,关键词或者稠密检索知识基于向量相似度,完全没有考虑逻辑语义。导致检索失败,有时适得其反。

2.ReRank的原理

ReRank 在许多 QA 对上进行了训练

  • ReRank Model是通过监督学习训练好的预训练模型
  • 给定大量正确的查询-文件对(QA pairs),让模型学习给出高分数
  • 同时给定大量不正确的查询-文件对,让模型学习给出低分数
  • 通过最大化正确对的分数和最小化不正确对的分数来训练
  • 经过训练后,ReRank 就能区分查询和文件之间的关联性
  • 从而按照相关性对检索结果进行排序

直接看ReRank的原理图

  • ReRank 可以给查询和回答一个相关性分数,从而排序结果
  • ReRank 可以用来改进关键词检索和稠密检索,找到正确答案

rerank 模型通过根据候选文档与用户查询的语义一致性对候选文档进行重新排序来增强语义排序结果。 其核心原则包括计算用户问题与每个文档之间的相关性分数,然后返回按相关性排序的文档列表,从高到低。流行的rerank模型包括 Cohere rerank、bge-reranker 等。

通常,在rerank之前进行初步搜索,因为计算查询与数百万个文档之间的相关性分数效率非常低。因此,rerank通常位于搜索过程的末尾,使其成为合并和排序来自各种搜索系统的结果的理想选择。

然而,重新排名不仅限于组合来自不同搜索系统的结果。这在单一搜索模式下也很有用。引入重新排名步骤,例如语义重新排名后关键字搜索,可以显着提高文档召回率。

在实际应用中,除了规范化多个查询结果之外,传递给大型模型的文本段数量通常在提供它们之前受到限制(即 TopK,可在重新排名模型参数中调整)。此限制是由于大型模型的输入窗口大小,通常范围为 4K 到 128K token。因此,有必要选择与模型的输入窗口大小约束相一致的合适分割策略和 TopK 值。

重要的是,即使模型的上下文窗口足够大,过多的chunk片段也会带来不太相关的内容影响prompt结构内容,从而降低答案的质量。因此,重新排名中较大的 TopK 参数并不是越大越好。prompt中放入越多的无关知识,会干扰大模型的生成能力。

重新排序不应被视为搜索技术的替代品,而应被视为增强现有搜索系统的补充工具。它的主要优势在于提供了一种简单、低复杂性的方法来优化搜索结果,从而能够将语义相关性集成到当前的搜索系统中,而无需进行重大的基础设施修改。

3.基于LLM或者Agent的ReRank

以下过程展示了Embedding检索后,将检索结果返回给大模型去做一次评估。类似CRAG或者Self-RAG,本质上都是利用了大模型的推理能力加强检索的准确性。由之前的完全由 向量检索相似度 转化为逻辑推理相似度。但是这种方案会降低RAG的效率,提升了准确度。

4.其它ReRank方案 

4.1. 使用更精细的评分函数

RAG通常会在检索阶段根据输入问题或上下文生成一系列候选文档,然后利用这些文档的信息进行生成式回答。
reranking可以通过设计更精细的评分函数,对这些候选文档进行重新排序,优先选择与输入问题更相关、质量更高的文档作为生成回答的依据。
这可能涉及:
融合更多特征:除了原始的检索得分(如BM25分数),考虑加入其他特征,如文档长度、主题相关性、实体提及次数、段落位置等,以更全面地评估文档与问题的匹配程度。
引入深度学习模型:使用预训练的语言模型(如BERT、RoBERTa等)计算问题与文档的语义相似度,或者使用专门针对文档相关性设计的模型(如ANCE、DPR等)进行reranking。
考虑上下文敏感性:对于多轮对话或具有明确上下文的场景,评分函数应考虑上下文信息,确保所选文档不仅与当前问题相关,还与对话历史或上下文保持一致。

4.2. 集成外部知识

在reranking阶段,可以引入外部知识源(如百科、词典、专家规则等)来辅助判断文档的质量和相关性。例如:
利用领域专业知识:对于特定领域的应用,如医疗、法律、金融等,可以利用领域知识库或规则库来筛选出符合专业要求的文档。
利用常识知识:使用常识推理模型或知识图谱来判断文档内容是否符合常识,避免生成不符合事实的回答。

4.3. 采用多阶段reranking

将reranking过程分为多个阶段,逐步精细化文档排序:
粗排阶段:首先基于简单、高效的指标(如BM25得分)进行初步排序,筛选出一部分高潜力文档。
精排阶段:对粗排后的文档集使用更复杂的评分函数或模型进行二次排序,进一步提升相关文档的优先级。
微调阶段(可选):对于某些关键应用场景,可以加入人工规则或专家干预的微调阶段,确保最终选择的文档满足特定业务需求。
 

5.ReRank的意义

引入Rerank模型后的retrieval引擎能够去除上下文不相关的污染数据、提供更精准的上下文信息。重排后(Rerank)精准的上下文不仅可减少了token的使用量进而还可能提高LLM推理速度与准确率。

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

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

相关文章

stm32 st7735驱动 详解

初始化指令 void LCD_Init(void) { #if USE_SIM_SPILCD_SIM_SPI_GPIO_Init(); #endifLCD_RES_0();//复位HAL_Delay(100);LCD_RES_1();HAL_Delay(100);LCD_BLK_1();//打开背光HAL_Delay(100);//************* Start Initial Sequence **********//LCD_SPI_Send_Cmd(0x11); //Sl…

链表面试题目:反转一个单链表的两种方法(解析+代码)

我们继续来看一下单链表的题目和代码吧,把学习的知识运用到实际中,大家加油 先看OJ题目 OJ题目(反转单链表) 双指针法 1.创建两个指针,为pre curr,curr指向头结点,curr用来遍历链表 2.curr指向…

VisualGDB : 在windows上开发和调试Linux代码(一)

传送门: 《VisualGDB : 解决编码导致的编译错误》 一、补充windows上 VisualGDB的安装 这里给大家附一个官方的下载路径:https://visualgdb.com/download/,根据自己的系统选择下载 笔者另附一个云盘的下载路径 VisualGDB https…

129423-53-6,Na+荧光探针一种可透过细胞的钠选择性荧光指示剂

引言:在化学研究的海洋中,优质的化学试剂是实验成功的关键。今天,我要为大家分享一款备受好评的化学试剂——SBFI AM。这款试剂以其独特的性能和广泛的应用领域,赢得了众多科研人员的青睐。 中文名称:钠离子荧光探针 …

不止是搭建 | 极空间虚拟机安装一个可做生产力的Ubuntu桌面系统以及后续优化

不止是搭建 | 极空间虚拟机安装一个可做生产力的Ubuntu桌面系统以及后续优化 哈喽小伙伴们好,偶是Stark-C~ 我在上篇极空间文章中不是给小伙伴们分享了使用虚拟机安装软路由固件『iStoreOS』的教程嘛: 打造Docker完全体, 开箱即用的各类插…

【牛客】【模板】前缀和

原题链接:登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和:pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和:pre[r]-pre[l-1] 3.…

SARscape操作:GF3 数据预处理

1、设置 Prefrences 参数 点击 SARscape->Preferences->Preferences specific,弹出如下图所示的对话框; 点击 Load Preferences,在弹出的菜单栏中选择适用于GF3影像处理的 MR(between 10m and 30m) 模式; 点击 General p…

iphone忘记锁屏密码怎么解锁?这些解锁方法你必须知道!

在使用iPhone的过程中经常会遇到很多问题,比如忘记了iPhone的锁屏密码。面对这样的情况,许多用户可能会感到手足无措。别担心,本文将为您详细介绍iPhone忘记锁屏密码的解锁方法,让您轻松解决这一烦恼。 一、使用iTunes备份恢复 如…

scrapy抓取博客

scrapy主要的步骤: 创建一个scrapy项目获取博客内容和保存抓去url和title储存标题和链接获取文章内容 一.创建一个scrapy: 在桌面上会生成一个文件夹: 在开始爬虫前,打开items.py: class BlogspiderTtem(scrapy.Item):titlesc…

MacOS搭建docker本地私有镜像库

相关环境 macOS: bigsur 11.7.8 docker desktop: 4.22.0 docker engine: 24.0.5 准备工作 本机已经安装好docker desktop,未安装的自行参考其他教程。如果不能翻墙,可以修改本地的镜像地址,可在docker desktop 设置中的docker engine中修…

【数学建模】天然肠衣搭配问题

2011高教社杯全国大学生数学建模竞赛D题 天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。传统的生产方式依靠人工…

JVS物联网平台5.7功能新增说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务配置化的方式,提供了 低代码数据分析物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等&am…

【组合数学】2842. 统计一个字符串的 k 子序列美丽值最大的数目

本文涉及知识点 组合数学汇总 LeetCode 2842. 统计一个字符串的 k 子序列美丽值最大的数目 给你一个字符串 s 和一个整数 k 。 k 子序列指的是 s 的一个长度为 k 的 子序列 ,且所有字符都是 唯一 的,也就是说每个字符在子序列里只出现过一次。 定义 f…

MATLAB的Bar3函数调节渐变色

一. colormap函数 可以使用colormap函数: t1=[281.1,584.6, 884.3,1182.9,1485.2; 291.6,592.6,896,1197.75,1497.33; 293.8,596.4,898.6,1204.4,1506.4; 295.8,598,904.4,1209.0,1514.6];bar3(t1,1) set(gca,XTickLabel,{300,600,900,1200,1500},FontSize,10) set(gca,YTic…

面试题:集合篇

说说 List, Set, Queue, Map 四者的区别? List(对付顺序的好帮手): 存储的元素是有序的、可重复的。Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重…

Python 中使用私有成员的子类化

1、问题背景 Python 语言中,变量名与访问器同名是一个非常好的特性: self.__value 1def value():return self.__value但是,当我们想要子类化一个类,并访问其私有成员时,却没有一种简单的方法。通常,我们…

USB系列一:USB技术概念

在这里USB的历史就不赘述了,有兴趣可以自己去搜索。也省略掉USB接口的概述,这些都是一些飞技术性的常识性的知识,没必要浪费篇幅和文字来描述。 一、USB总线版本:(从USB1.1说起) 1、USB1.1 1998年9月23日…

Android进阶之路 - 静态会员进度条

年后这个新版本加入了VIP模块,有幸正好由我来负责,可以再积累一下这方面的知识。 那段时间看了一本书,书中说到初级码农的特性之一就是完全集中于某些功能,忽略了了很多成长机会,所以重复性劳作带来的成长值有限&#…

程序员必备的7大神器,效率飞起!

我们都知道程序员在工作时,会经常遇到任务繁重的情况,为了提高效率,程序员们也会借助一些软件,那么哪些软件可以帮助程序员们提高工作效率呢? 整理不易,关注一波!! 1. Xftp 7 Xft…

深度学习实例2_车牌识别分割——自学笔记

import cv2 from matplotlib import pyplot as plt import os import numpy as np from PIL import ImageFont, ImageDraw, Image彩色图片显示 def plt_show0(img):b,g,r = cv2.split(img)img = cv2.merge([r, g, b])plt.imshow(img)plt.show()灰度图片显示 def plt_show(img…