检索增强(RAG)的方式---重排序re-ranking

提升RAG:选择最佳嵌入Embedding&重排序Reranker模型

检索增强生成(RAG)技术创新进展:自我检索、重排序、前瞻检索、系统2注意力、多模态RAG

RAG的re-ranking指的是对初步检索出来的候选段落或者文章,通过重新排序的方式来提升检索质量。具体来说:

  • RAG首先采用信息检索模型在知识库中检索出与用户查询最相关的一些候选段落或者文章。
  • 然后这些候选结果作为输入,通过一个深度学习模型对它们进行重新评分。
  • 这个深度学习模型通常会考虑更丰富的特征,比如:
    • 用户查询和候选结果中的关键词匹配程度
    • 用户查询和候选结果上下文匹配程度
    • 用户历史偏好信息
    • 候选结果质量反馈信号,如被用户点击次数等
  • 经过这个模型计算后的新得分就表示候选结果的真实质量,将得分高的排在前面,实现初步检索结果的重新排序。
  • 这样就可以将最相关和质量最高的几个段落或者文章作为RAG系统后续生成对话的输入知识。

所以总体来说,RAG的re-ranking是采用深度学习模型,在初步检索结果基础上加入更多维度的证据,对它们进行全面评估,得出一个重新排序的结果,以提升整体系统性能。

Rerank模型:

  • CohereAI
  • bge-reranker-base
  • bge-reranker-large

为了评估检索系统的准确性,主要依靠两个广泛应用的指标:命中率(Hit Rate)和平均倒数排名(MRR)。考虑到命中率和MRR时,OpenAI+CohereRerankVoyage+big-reranker-large的组合成为最热门的竞争者。 

命中率(Hit Rate)和平均倒数排名(Mean Reciprocal Rank,简称MRR)是两种常用的信息检索系统性能指标:

命中率(Hit Rate):

  • 计算一个查询中的有效文档是否在前K个检索结果中,如果有则算命中。

  • Hit Rate = 有效查询中的命中次数 / 总查询次数

  • 用于衡量是否能检索出相关文档,值越大表示系统检索能力越强。

平均倒数排名(MRR):

  • 对每个查询,计算第一位有效文档的倒数排名。如排在第二位,倒数排名为1/2。

  • MRR = 查询数量的倒数排名总和 / 总查询数量

  • 用于衡量有效文档检索的平均排名位置,值越大表示平均检索效果越好。

区别:

  • Hit Rate看重是否能检索出相关文档,但不考虑排序质量。

  • MRR同时考虑检索能力和排序能力,强调首个有效文档应排在前面。

所以两者补充考察了检索系统不同层面的性能,通常结合使用可以获得更全面评估。Hit Rate>=50%,MRR>=0.9表示检索质量较高。

不同的重排序方法

  • 使用检索模型进行二次检索:一种常见的重排序方法是使用检索模型进行二次检索。在初始检索后,通过利用更复杂的模型,例如基于嵌入的检索模型,可以再次检索相关文档。这有助于更精确地捕捉文档与查询之间的语义关系。

  • 使用交叉模型进行打分:另一种方法是利用交叉模型进行文档打分。这种模型可以考虑文档和查询之间的交互特征,从而更细致地评估它们之间的关联度。通过结合不同特征的交互,可以得到更准确的文档排序。

  • 利用大模型进行重排序:大型语言模型(LLM)等大模型的崛起为重排序提供了新的可能性。这些模型通过对整个文档和查询进行深层次的理解,能够更全面地捕捉语义信息。

方法1:交叉模型进行重排序

与嵌入模型不同,重新排序器使用问题和文档作为输入,直接输出相似度而不是嵌入。通过将查询和段落输入到重新排序器中,你可以获得相关性分数。重新排序器是基于交叉熵损失进行优化的,因此相关性分数不受限于特定范围。

BGE Reranker

https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/reranker

import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizertokenizer = AutoTokenizer.from_pretrained('BAAI/bge-reranker-large')
model = AutoModelForSequenceClassification.from_pretrained('BAAI/bge-reranker-large')
model.eval()pairs = [['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']]
with torch.no_grad():inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)scores = model(**inputs, return_dict=True).logits.view(-1, ).float()print(scores)

这个重新排序器是从xlm-roberta-base初始化的,并在混合的多语言数据集上进行训练:

  • 中文:来自T2ranking、MMmarco、dulreader、Cmedqa-v2和nli-zh的788,491个文本对。
  • 英文:来自msmarco、nq、hotpotqa和NLI的933,090个文本对。
  • 其他语言:来自Mr.TyDi的97,458个文本对(包括阿拉伯语、孟加拉语、英语、芬兰语、印度尼西亚语、日语、韩语、俄语、斯瓦希里语、泰卢固语、泰语)。

CohereRerank

# pip install cohereimport cohere
api_key = ""
co = cohere.Client(api_key)query = "What is the capital of the United States?"
docs = ["Carson City is the capital city of the American state of Nevada. At the 2010 United States Census, Carson City had a population of 55,274.","The Commonwealth of the Northern Mariana Islands is a group of islands in the Pacific Ocean that are a political division controlled by the United States. Its capital is Saipan.","Charlotte Amalie is the capital and largest city of the United States Virgin Islands. It has about 20,000 people. The city is on the island of Saint Thomas.","Washington, D.C. (also known as simply Washington or D.C., and officially as the District of Columbia) is the capital of the United States. It is a federal district. The President of the USA and many major national government offices are in the territory. This makes it the political center of the United States of America.","Capital punishment (the death penalty) has existed in the United States since before the United States was a country. As of 2017, capital punishment is legal in 30 of the 50 states. The federal government (including the United States military) also uses capital punishment."]results = co.rerank(query=query, documents=docs, top_n=3, model='rerank-english-v2.0') # Change top_n to change the number of results returned. If top_n is not passed, all results will be returned.

实验结果

从数据中清晰可见重新排序器在优化搜索结果方面的重要性。几乎所有嵌入都受益于重新排序,表现出改善的命中率和MRR。

  • bge-reranker-large:对于多个嵌入,该重新排序器经常提供了最高或接近最高的MRR,有时其性能与CohereRerank相媲美甚至超过。

  • CohereRerank:在所有嵌入上一致提升性能,往往提供最佳或接近最佳的结果。

方法2:大模型进行重排序

现有的涉及LLM的重排方法大致可以分为三类:用重排任务微调LLM,使用prompt让LLM进行重排,以及利用LLM做训练数据的增强。

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

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

相关文章

mac安装部署gitbook教程

mac安装部署gitbook教程 前言一、安装准备二、GitBook安装项目初始化 前言 一些自己实际操作的记录。 一、安装准备 Node.js gitbook基于Node.js,所以需要提前安装。 下载地址:https://nodejs.org/en/,可以下载比较新的版本。(但我的建议是不…

Linux指令补充和权限简单介绍

一.tar指令 形式:tar [-cxtzjvf] 文件与目录 ....
 参数:
 -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! -…

为什么C++17要引入std::string_view?

目录 1.引言 2.原理分析 2.1.结构 2.2.构造函数 2.3.成员函数 2.4.std::string_view字面量 3.实例 3.1.std::string_view和std::string的运算符操作 3.2.查找函数使用 3.3.std::string_view和临时字符串 4.总结 1.引言 在C/C日常编程中,我们常进行数据的…

JDK8新增的时间类

目录 内容大纲&#xff1a; 1、Zoneld时区 2、Instant时间戳 3、ZoneDateTime带时区的时间 4、DateTimeFormatter用于时间的格式化和解析 5、Calendar类&#xff1a; 6、工具类 内容大纲&#xff1a; 1、Zoneld时区 方法名说明static Set<String>getArailableZoneIds()获…

java集合(4)

1.HashSet集合 1.1HashSet集合概述和特点【应用】 底层数据结构是哈希表 存取无序 不可以存储重复元素 没有索引,不能使用普通for循环遍历 1.2HashSet集合的基本应用【应用】 存储字符串并遍历 public class HashSetDemo {public static void main(String[] args) {//创…

MCU常用外设总线

目录 前言一、时钟与中断二、GPIO三、ADC四、定时器4.1 基本定时器4.2 通用定时器4.2.1 输入捕获4.2.2 输出比较 五、UART六、IIC七、SPI 前言 本文主要讲单片机外设的功能&#xff0c;即这些外设是什么&#xff0c;可以用来干什么&#xff0c;了解了之后我们就可以通过相应的寄…

学校服务器hpc东南大学,下载国家基因组科技中心数据 gsa-human ascp chatpt建议 Linux系统中写代码

使用ascp批量下载数据 You files.csv 帮我写个批量下载的脚本&#xff0c;批量下载时候&#xff0c;把路径中最后的HRR659816批量替换成 Accession列的内容就行了。下面是示例 ascp -v -QT -l 300m -P33001 -k1 -i ~/.aspera/connect/etc/aspera01.openssh_for_gsa -d asper…

贝锐蒲公英云AP体验:云端快速部署、远程管理,轻松满足办公环境

公司原本的网络由于采用多个路由器&#xff0c;导致无线信号杂乱&#xff0c;管理不便&#xff0c;且远程办公体验较差&#xff0c;作为IT负责人的我&#xff0c;一直想寻找一个可以实现网络统一管理并有效提升远程工作便捷性的产品。 于是&#xff0c;我决定在公司内部部署贝…

5G_射频测试_基础概念(二)

定义了测试参考点&#xff0c;不同的RRU类型 C类型传统RRU Conducted and radiated requirement reference points 4.3.1 BS type 1-C&#xff08;传统RRU一般测试点就是连接天线的射频接头&#xff09; 4.3.2 BS type 1-H&#xff08;宏站MassiveMIMO 矩阵天线&#xff…

Nginx实现html页面注入浏览器监控js代码片段

一、背景 最近看到关于浏览器监控相关的东西&#xff0c;顺带着就记录一下其实现的大致原理过程。 在我们没对web应用做浏览器监控的时候&#xff0c;我们其实无法感知到用户对我们应用页面的使用习惯、使用中是否遇到问题&#xff0c;例如白屏情况出现多少次、请求失败情况、j…

ROS第 12 课 Launch 启动文件的使用方法

文章目录 第 12 课 Launch 启动文件的使用方法1.本节前言2.Lanuch 文件基本语法2.2 参数设置2.3 重映射嵌套 3.实操练习 第 12 课 Launch 启动文件的使用方法 1.本节前言 我们在前面的教程里面通过命令行来尝试运行新的节点。但随着创建越来越复杂的机器人系统中&#xff0c;打…

【Java】Maven的基本使用

Maven的基本使用 Maven常用命令 complie&#xff1a;编译clean&#xff1a;清理test&#xff1a;测试package&#xff1a;打包install&#xff1a;安装 mvn complie mvn clean mvn test mvn package mvn installMaven生命周期 IDEA配置Maven Maven坐标 什么是坐标&#xff1f;…

可视化 | 【echarts】中国地图热力图

文章目录 &#x1f4da;html和css&#x1f4da;js&#x1f407;整体框架&#x1f407;getGeoJson&#x1f407;echarts绘图⭐️整体框架⭐️option配置项 【echarts】渐变条形折线复合图【echarts】金字塔图 &#x1f4da;html和css html&#xff1a;整合<!DOCTYPE html&g…

5G_射频测试_发射机测量(四)

6.2 Base station output power 用于测量载波发射功率的大小&#xff0c;功率越大小区半径越大但是杂散也会越大 载波功率&#xff08;用频谱仪测&#xff09;天线口功率&#xff08;用功率计测&#xff09;载波功率是以RBW为单位的filter测量的积分功率不同带宽的多载波测试时…

java垃圾回收GC过程

GC&#xff08;Gabage Collection&#xff09; 用于回收堆中的垃圾数据 清理方法 1.标记-清理 对数据标记&#xff0c;然后清理 缺点&#xff1a;容易产生内存碎片 2.标记-整理 对标记后的数据清理&#xff0c;剩下数据前移 缺点&#xff1a;每次清理后数据都要迁移&#xff0…

JAVA算法-查找

目录 基本查找*&#xff1a; 二分查找*&#xff1a; 数据单调递增&#xff1a; 数据单调递减&#xff1a; 总结规律&#xff1a; 插值查找*&#xff1a; 斐波那契查找&#xff08;了解原理&#xff09;&#xff1a;以后补 分块 查找*&#xff1a; 特殊 情况&#xff0…

docker部署

//创建一个文件夹 mkdir soft //进入soft文件夹 cd soft 安装必要的系统工具: yum install -y yum-utils device-mapper-persistent-data lvm2 配置阿里云Docker Yum源: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…

c# 视频播放之Windows Media Player

最近想给软件加个视频播放功能&#xff0c;在网上看有好几个方式&#xff0c;最后决定用 Windows Media Player 和Vlc.DotNet.Forms。 这篇文章主要讲Windows Media Player&#xff0c;它的优点&#xff1a;代码简单&#xff0c;视频操作功能都有&#xff0c;能播放网络和本地…

数据结构之顺序表的增删查改

别丢了你的勇敢 前言&#xff1a; 自今日起&#xff0c;我们正式越过C语言的大山&#xff0c;走向了数据结构的深山&#xff0c;现如今摆在我们面前的第一个坎就是顺序表&#xff0c;我们需要了解顺序表的定义&#xff0c;并且知道&#xff0c;如何对其进行增删查改&#xff0…

MyBatis 使用报错: Can‘t generate mapping method with primitive return type

文章目录 前言问题原因解决方案个人简介 前言 今天在新项目中使用 MyBatis 报如下错误&#xff1a;Cant generate mapping method with primitive return type 问题原因 发现是 Mapper 注解引入错误&#xff0c;错误引入 org.mapstruct.Mapper, 实际应该引入 org.apache.ibat…