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

搜索召回:召回聚合

召回聚合

用户的查询意图往往是复杂多样的,可能涉及到不同的领域、主题和语义层面。因此,召回体系中通常通过多路召回的方式从不同角度去理解和满足用户的查询需求。此外,多路召回通过各召回通道并行计算可以在海量数据中能够快速响应,同时实现负载均衡。

在面对多个差异化设计的召回通道同时触发并返回文档的情况下,需要充分发挥各通道的优势,从大量召回候选中筛选整合以实现各通道互补,最终在保障的系统效率的同时,提高召回的准确率和业务目标的达成率,确保整体效果的最优化。召回聚合通过采用轻量级的算法策略对召回结果筛选,最终将数千篇文档传递给粗排模块进行更精细的排序操作。

蛇形合并

蛇形合并策略通过交替、蛇形的方式将来自不同通道的候选项进行融合,通常会先选择一种通道的候选项,然后交替选择其他通道的候选项。

假设有三个召回通道(A、B、C),那么可以按如下方式选取:

  • 第1个候选项来自通道A
  • 第2个候选项来自通道B
  • 第3个候选项来自通道C
  • 第4个候选项再从通道A选取,以此类推

RRF合并(Reciprocal Rank Fusion)

RRF 对来自不同召回通道的排序结果进行加权,赋予排名靠前的候选项更高的权重,最终生成一个综合排序。具体来说,对于每个检索结果,计算其在每个路径中的排名,然后取这些排名的倒数之和作为该结果的最终得分。

RRF 的计算公式如下:

R R F S c o r e ( d ) = ∑ i = 1 k 1 R a n k i ( d ) + K {\mathrm{RRF~Score}}(d)=\textstyle{\sum_{i=1}^{k}{\frac{1}{\mathrm{Rank}_{i}(d)+K}}} RRF Score(d)=i=1kRanki(d)+K1

其中, d d d 表示召回结果, R a n k i ( d ) \mathrm{Rank}_{i}(d) Ranki(d) 表示该结果在第 i i i 条路径中的排名, K K K 为调节参数(通常取值为60),用于平滑排名,使得即使排名较低的候选项也能获得一定的权重。

贝叶斯优化合并

贝叶斯调参可以帮助自动化调整融合策略中的参数,从而找到最优的合并方式。通过贝叶斯优化,我们可以根据召回合并过程中不同通道的重要性、权重等参数,寻找最佳的合并策略,以提升召回的质量和效率。

贝叶斯优化(Bayesian Optimization)是一种基于贝叶斯统计方法的全局优化算法,通常用于优化函数比较复杂、代价高昂、无法直接求导的情况。具体步骤如下:

  1. 定义目标函数:定义目标函数 f ( x ) f(x) f(x) x x x 是超参数)用于评估召回合并策略的效果

    • f ( w ) = M e t r i c ( M e r g e ( R e c a l l s ( w ) ) ) f(\mathbf{w})=\mathbf{Metric}(\mathbf{Merge}(\mathrm{Recalls}(\mathbf{w}))) f(w)=Metric(Merge(Recalls(w)))

    • Recalls ( w ) = [ R 1 ( w 1 ) , R 2 ( w 2 ) , … , R n ( w n ) ] \text{Recalls}(\mathbf{w}) = [R_1(w_1), R_2(w_2), \dots, R_n(w_n)] Recalls(w)=[R1(w1),R2(w2),,Rn(wn)] 表示来自不同通道的召回结果,每个 R i ( w i ) R_i(w_i) Ri(wi) 是通道 i i i 根据权重 w i w_i wi 所返回的候选集

    • Merge ( ⋅ ) \text{Merge}(\cdot) Merge() 表示将各个通道的召回结果按权重加权融合

    • Metric ( ⋅ ) \text{Metric}(\cdot) Metric() 是根据合并后的候选集评估的性能指标

  2. 设置参数空间:如果使用加权平均的合并方式,可以将每个通道的权重作为调节参数进行优化

    • 比如,设定权重参数 w = [ w 1 , w 2 , ⋅ ⋅ ⋅ , w n ] \mathbf{w}=[w_{1},w_{2},\cdot\cdot\cdot,w_{n}] w=[w1,w2,,wn],每个召回通道的权重 w i w_{i} wi 影响候选项排名和选择

    • w = [ w 1 , w 2 , ⋅ ⋅ ⋅ , w n ] w i t h ∑ i = 1 n w i = 1 , w i ∈ [ 0 , 1 ] {\bf w}=[w_{1},w_{2},\cdot\cdot\cdot,w_{n}]\;\;\;\;\mathrm{with}\;\;\;\;\sum_{i=1}^{n}w_{i}=1,\;\;\;\;w_{i}\in[0,1] w=[w1,w2,,wn]withi=1nwi=1,wi[0,1]

  3. 初始化高斯过程:为待优化的参数空间设定先验分布,通常使用高斯过程(Gaussian Process, GP)作为先验,表示对参数空间的初步认识

    • p ( f ( w ) ) ∼ G P ( m ( w ) , k ( w , w ′ ) ) p(f(\mathbf{w}))\sim{\mathcal{G P}}(m(\mathbf{w}),k(\mathbf{w},\mathbf{w}^{\prime})) p(f(w))GP(m(w),k(w,w))

    • 其中 m ( w ) m(\mathbf{w}) m(w) 是目标函数的均值函数,通常假设为零; k ( w , w ′ ) k(\mathbf{w}, \mathbf{w}') k(w,w) 是协方差函数,用于表示不同参数配置之间的相似性

  4. 更新后验分布:在每次迭代中,根据当前的参数空间和目标函数值,更新高斯过程的后验分布,并基于当前的后验分布生成新的参数选择。贝叶斯调参使用获取函数(Acquisition Function)来选择下一个要评估的参数点。常见的获取函数如期望改进(Expected Improvement, EI)

    • α ( w ) = E [ Δ f ( w ) ] = E [ max ⁡ ( 0 , f ( w best ) − f ( w ) ) ] \alpha(\mathbf{w}) = \mathbb{E}[ \Delta f(\mathbf{w}) ] = \mathbb{E}[ \max(0, f(\mathbf{w}_{\text{best}}) - f(\mathbf{w})) ] α(w)=E[Δf(w)]=E[max(0,f(wbest)f(w))]

    • f ( w best ) f(\mathbf{w}_{\text{best}}) f(wbest) 是当前最好的目标函数值

    • Δ f ( w ) \Delta f(\mathbf{w}) Δf(w) 是期望的改进

  5. 选择下一个评估点:通过最大化获取函数来决定下一个评估点。获取函数根据当前的后验分布选择一个最有可能提升目标函数值的参数组合,从而进行下一轮评估

    • w ∗ = arg ⁡ max ⁡ w α ( w ) \mathbf{w}^*=\arg \max _{\mathbf{w}} \alpha(\mathbf{w}) w=argwmaxα(w)
  6. 重复迭代:贝叶斯优化会根据每一轮评估的结果,调整先验分布,不断优化目标函数,最终找到全局最优的参数配置

    • p ( f ( w ) ∣ w ∗ , f ( w ∗ ) ) ∼ G P ( μ ( w ) , Σ ( w ) ) p(f(\mathbf{w})\mid\mathbf{w}^{*},f(\mathbf{w}^{*}))\sim{\mathcal{G}}{\mathcal{P}}({\mu}(\mathbf{w}),\Sigma(\mathbf{w})) p(f(w)w,f(w))GP(μ(w),Σ(w))

最终,贝叶斯优化会返回最优的参数 w ∗ \mathbf{w}^* w

此外,除了参数为各通道的权重,对于每篇文档的综合打分(Query-Doc相关性、Doc质量、Doc时效性等分数)的融合公式的权重参数也可以采用贝叶斯优化的方式设定,以此通过对Doc打分实现排序。

总结

在召回模块中,各召回通道通常会通过不同的算法、模型或策略获取候选文档。由于这些召回通道目标、算法和策略的差异,它们生成的候选项通常具有不同的质量和覆盖面。召回聚合的任务是将这些候选项通过一定的方式进行加权、排序和融合,动态控制各个通道的召回量配额,确保最终的候选集合既具有足够的多样性,又能保持较高的相关性。

参考文献

  1. Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods
  2. Practical Bayesian Optimization of Machine Learning Algorithms
更多内容请点击:搜索系统算法解析

相关文章:

搜索召回:召回聚合

召回聚合 用户的查询意图往往是复杂多样的,可能涉及到不同的领域、主题和语义层面。因此,召回体系中通常通过多路召回的方式从不同角度去理解和满足用户的查询需求。此外,多路召回通过各召回通道并行计算可以在海量数据中能够快速响应&#…...

NTFS 文件搜索库

NTFS 文件搜索库 中文 | English 一个快速搜索NTFS卷文件的库 在这里插入图片描述 特性 快速扫描 NTFS 格式驱动器上的所有文件实时快速同步文件变更(创建, 更名, 删除)支持通配符查询文件名或文件路径重启自动更新文件变动, 无需重新进行全盘扫描 API描述 初始化并指定…...

【GoF23种设计模式】02_单例模式(Singleton Pattern)

文章目录 前言一、什么是单例模式?二、为什么要用单例模式?三、如何实现单例模式?总结 前言 提示:设计者模式有利于提高开发者的编程效率和代码质量: GoF(Gang of Four,四人帮)设计…...

UniApp:uni-segmented-control 自定义布局

自定义tabs选项&#xff0c;items 为tabs名称数组&#xff0c;横向滚动 <scroll-view scroll-x><view class"segmented-control"><view v-for"(item, index) in items" :key"index" class"control-item ":class"…...

【算法day17-day18】回溯:解决组合问题

不好意思呀各位&#xff0c;最近在忙期末考今天才彻底结束&#xff0c;来让我们继续算法之路吧~ 题目引用 组合电话号码的字母组合组合总和组合总和II分割回文串 1.组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回…...

从监控异常发现网络安全

前言 最近在前端异常监控系统中&#xff0c;发现一些异常信息&#xff0c;从中做了一些分析&#xff0c;得到一些体会&#xff0c;因此作文。 发现异常 某天早上打开监控系统发现&#xff0c;当天凌晨1点过测试环境有2个前端上报的异常&#xff0c;报错的原因都是由于没有获取…...

Qt之自定义标题栏拓展(十)

Qt开发 系列文章 - user-defined-titlebars&#xff08;十&#xff09; 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 1.初始化函数 2.功能函数 3.窗口关…...

Verilog中initial的用法

在 Verilog 语言中&#xff0c;initial 语句用于在仿真开始时执行一次性初始化操作。它是顺序执行的&#xff0c;用来描述在仿真启动时立即运行的代码块&#xff0c;通常用于赋初值、生成波形或控制信号行为。 语法 initial begin // 语句1 // 语句2 ... end特点 只…...

(14)D-FINE网络,爆锤yolo系列

yolo过时了&#xff1f;传统的yolo算法在小目标检测方面总是不行&#xff0c;最新算法DEIM爆锤yolo&#xff0c;已经替yolo解决。 一、创新点 ​ 这个算法名为DEIM&#xff0c;全称是DETR with Improved Matching for Fast Convergence&#xff0c;其主要创新点在于提出了一…...

Python :冬至快乐

第1部分&#xff1a;基础设置 首先创建一个新的 Python 文件&#xff0c;命名为 fireworks.py。 步骤 1.1: 导入必要的库 import pygame import random import sys from pygame.locals import * import math import time这些库的作用&#xff1a; pygame: 用于创建游戏和图…...

重拾设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…...

稀疏矩阵的存储与计算 gaxpy

1, gaxpy 数学公式 其中&#xff1a; &#xff0c; &#xff0c; 2, 具体实例 3&#xff0c;用稠密矩阵的方法 本节将用于验证第4节中的稀疏计算的结果 hello_gaxpy_dense.cpp #include <stdio.h> #include <stdlib.h>struct Matrix_SP {float* val; //…...

基于LabVIEW的USRP信道测量开发

随着无线通信技术的不断发展&#xff0c;基于软件无线电的设备&#xff08;如USRP&#xff09;在信道测量、无线通信测试等领域扮演着重要角色。通过LabVIEW与USRP的结合&#xff0c;开发者可以实现信号生成、接收及信道估计等功能。尽管LabVIEW提供了丰富的信号处理工具和图形…...

基于LSTM长短期记忆神经网络的多分类预测【MATLAB】

在深度学习中&#xff0c;长短期记忆网络&#xff08;LSTM, Long Short-Term Memory&#xff09;是一种强大的循环神经网络&#xff08;RNN&#xff09;变体&#xff0c;专门为解决序列数据中的长距离依赖问题而设计。LSTM因其强大的记忆能力&#xff0c;广泛应用于自然语言处理…...

物联网:全面概述、架构、应用、仿真工具、挑战和未来方向

中文论文标题&#xff1a;物联网&#xff1a;全面概述、架构、应用、仿真工具、挑战和未来方向 英文论文标题&#xff1a;Internet of Things: a comprehensive overview, architectures, applications, simulation tools, challenges and future directions 作者信息&#x…...

volatility2工具的使用vol2工具篇

vol2工具 命令格式&#xff1a;vol.py -f [image] --profile[profile] [plugin] 1、查看系统的操作版本&#xff0c;系统镜像信息 2.查看用户名密码信息&#xff0c;当前操作系统中的password hash&#xff0c;例如SAM文件内容 3.从注册表提取LSA密钥信息&#xff08;已解密&…...

R 基础运算

R 基础运算 R 是一种广泛使用的统计编程语言&#xff0c;它提供了强大的数据操作和分析功能。基础运算在 R 中非常重要&#xff0c;因为它们是进行更复杂计算和数据分析的基础。本文将详细介绍 R 中的基础运算&#xff0c;包括算术运算、逻辑运算、向量化和矩阵运算。 一、算…...

javaScriptBOM

1.1、BOM概述 1.1.1、BOM简介 BOM&#xff08;browser Object&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window。 BOM由一系列的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 BOM缺乏标准…...

Godot RPG 游戏开发指南

Godot RPG 游戏开发指南 一、基础准备 1. 开发环境 下载并安装最新版 Godot 4.x选择使用 GDScript 或 C# 作为开发语言准备基础美术资源&#xff08;角色、地图、道具等&#xff09; 2. 项目结构 project/ ├── scenes/ # 场景文件 ├── scripts/ # 脚…...

目标检测数据集图片及标签同步旋转角度

前言 在深度学习领域&#xff0c;尤其是目标检测任务中&#xff0c;数据集的质量直接影响模型的性能。为了提升模型的鲁棒性和对各种场景的适应能力&#xff0c;数据增强技术被广泛应用于图像数据集处理。旋转角度是常见的数据增强方法&#xff0c;通过对图像及其对应的标签&am…...

2025前端面试热门题目——计算机网络篇

计算机网络篇——面试 1. 到底什么是 TCP 连接? TCP 连接的定义 TCP&#xff08;传输控制协议&#xff09;是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路&#xff0c;保证了在不可靠网络&#xff08;如互联网&#xff09;上的数据传输的准确…...

LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS---正文

题目 最少到最多的提示使大型语言模型能够进行复杂的推理 论文地址&#xff1a;https://arxiv.org/abs/2205.10625 摘要 思路链提示在各种自然语言推理任务中表现出色。然而&#xff0c;它在需要解决比提示中显示的示例更难的问题的任务上表现不佳。为了克服这种由易到难的概括…...

Java开发经验——日志治理经验

摘要 本文主要介绍了Java开发中的日志治理经验&#xff0c;包括系统异常日志、接口摘要日志、详细日志和业务摘要日志的定义和目的&#xff0c;以及错误码规范和异常处理规范。强调了日志治理的重要性和如何通过规范化错误码和日志格式来提高系统可观测性和问题排查效率。 1. …...

使用复数类在C#中轻松绘制曼德布洛集分形

示例在 C# 中绘制曼德布洛特集分形解释了如何通过迭代以下方程来绘制曼德布洛特集&#xff1a; 其中 Z(n) 和 C 是复数。程序迭代此方程&#xff0c;直到 Z(n) 的大小至少为 2 或程序执行最大迭代次数。 该示例在单独的变量中跟踪数字的实部和虚部。此示例使用Complex类来更轻松…...

VSCode 启用免费 Copilot

升级VSCode到 1.96版本&#xff0c;就可以使用每个月2000次免费额度了&#xff0c;按照工作日每天近80次免费额度&#xff0c;满足基本需求。前两天一直比较繁忙&#xff0c;今天周六有时间正好体验一下。 引导插件安装GitHub Copilot - Visual Studio Marketplace Extension f…...

常见问题整理

DevOps 和 CICD DevOps 全称Development & Operation 一种实现开发和运维一体化的协同模式&#xff0c;提供快速交付应用和服务的能力 用于协作&#xff1a;开发&#xff0c;部署&#xff0c;质量测试 整体生命周期工作内容&#xff0c;最终实现持续继承&#xff0c;持续部…...

使用Vue创建前后端分离项目的过程(前端部分)

前端使用Vue.js作为前端开发框架&#xff0c;使用Vue CLI3脚手架搭建项目&#xff0c;使用axios作为HTTP库与后端API交互&#xff0c;使用Vue-router实现前端路由的定义、跳转以及参数的传递等&#xff0c;使用vuex进行数据状态管理&#xff0c;后端使用Node.jsexpress&#xf…...

【Springboot知识】Redis基础-springboot集成redis相关配置

文章目录 1. 添加依赖2. 配置Redis连接3. 配置RedisTemplate&#xff08;可选&#xff09;4. 使用RedisTemplate或StringRedisTemplate5. 测试和验证 集群配置在application.properties中配置在application.yml中配置 主从配置1. 配置Redis服务器使用配置文件使用命令行 2. 配置…...

网络安全概论——身份认证

一、身份证明 身份证明可分为以下两大类 身份验证——“你是否是你所声称的你&#xff1f;”身份识别——“我是否知道你是谁&#xff1f;” 身份证明系统设计的三要素&#xff1a; 安全设备的系统强度用户的可接受性系统的成本 实现身份证明的基本途径 所知&#xff1a;个…...

OpenHarmony-4.HDI 框架

HDI 框架 1.HDI介绍 HDI&#xff08;Hardware Device Interface&#xff0c;硬件设备接口&#xff09;是HDF驱动框架为开发者提供的硬件规范化描述性接口&#xff0c;位于基础系统服务层和设备驱动层之间&#xff0c;是连通驱动程序和系统服务进行数据流通的桥梁&#xff0c;是…...