Amadeus的知识库 | 纯向量检索关键词识别弱?带上BM25算法搞混合检索 + Reranking做召回优化,RAG生成质量大幅增强!

news2026/4/6 21:11:44
一、引文在之前我们的检索环节只是使用了向量数据库提供的 ANN 算法进行纯向量检索原因在于它可以通过计算查询向量和文档向量之间的余弦相似度在极短时间内从整个向量数据库找到几个语义相似的局部最优解。它的强大之处在于擅长理解语义但是一旦面对一些关键词却不敏感比如某个手机的特定型号、某个专业名词的英文简写、亦或是一些订单编号纯向量检索对识别这些关键词的能力是远远不够的因此极有可能召回另一种型号的手机或者其他专业名词亦或是与订单相关的文档而非订单号。二、BM25算法的核心机理BM25 (Best Matching 25)是信息检索Information Retrieval领域中最主流的算法之一。它是TF-IDF算法的改进版目前是 Elasticsearch、Lucene 和 Solr 等主流搜索引擎默认的相关性评分算法。简单来说BM25 的作用是给定一个查询语句Query计算它与文档Document之间的相关性得分。1.核心评判标准BM25 在 TF-IDF 的基础上引入了两个重要的改进词频饱和度TF Saturation和文档长度归一化Document Length Normalization。它的评判标准主要由以下三个维度组成1逆文档频率 (IDF) —— 词的稀有程度逻辑如果一个词在所有文档中出现得越少如“量子纠缠”它对搜索意图的区分度就越高如果一个词随处可见如“的”、“是”它的权重就应该很低。计算BM25 的 IDF 计算公式与传统略有不同但核心一致词越稀有得分越高。2词频 (Term Frequency, TF) —— 词在文档中的频率逻辑词在当前文档中出现的次数越多文档越相关。BM25 的改进饱和度限制在 TF-IDF 中TF 是线性的即一个词出现 100 次的得分是出现 1 次的 100 倍。但 BM25 认为当词频达到一定程度后其重要性增长应该放缓。例子如果一篇文档出现了 10 次“苹果”再增加到 100 次相关性提升其实非常有限。BM25 通过参数 k1​ 来控制这个“饱和曲线”。3文档长度 (Document Length) —— 篇幅公平性逻辑长文章包含某个词的概率天然比短文章高。BM25 的改进如果一个词在短文中出现了 3 次在万字长文中也出现了 3 次显然短文的相关性更高。BM25 引入了平均文档长度avgdl。如果文档比平均长度短得分会得到提升反之则被惩罚。通过参数 b 来控制惩罚的力度。2.得分计算公式3.具体运作流程当你在搜索框输入“如何学习 RAG”时BM25 在系统内部是如何运作的1分词系统将你的查询语句拆解。Query: [如何, 学习, RAG]2计算 IDF针对全库系统去索引库中查看这三个词的分布情况“如何”出现频率极高IDF 极低权重小。“学习”出现频率中等IDF 中等。“RAG”相对专业词汇IDF 较高权重大。3针对每个文档计算得分 (TF 长度)对于库中的某篇文档 D1​词频计算计算 RAG 在 D1​ 中出现了几次。长度缩放看 D1​ 的长度。如果 D1​ 很短那么它的 TF 得分会被放大如果 D1​ 是个长篇大论TF 得分会被压缩。计算加权分将这三个词的IDF × 调整后的TF分分别算出。4求和与排序将所有词的得分相加得到该文档的总分。搜索引擎对所有候选文档重复此过程最后按得分从高到低排列展示给用户。4.BM25 相较于 TF-IDF的优化它更符合人类直觉它知道一个词出现 20 次和出现 30 次的区别远小于出现 0 次和出现 10 次的区别词频饱和。它更公平它不会因为文档长、单词多就盲目给高分长度归一化。可调性强通过调节 k1​ 和 b开发者可以根据业务场景是短文本搜索还是长文库检索优化搜索效果。三、混合检索的最佳实践1.BM25 关键词检索 VS 向量检索维度BM25 关键词检索向量检索核心思想统计词频和文档频率计算关键词重要性把文本转成向量计算语义相似度能否理解语义不能。“七天无理由退货”和”买了一周的东西还能退吗”匹配不上能。两句话语义相近向量距离也近能否精确匹配能。“订单号 2026012345”能精确命中不能。数字和编号容易被理解成语义丢失精确信息对同义词的处理不行。“手机”和“移动电话”匹配不上行。Embedding 模型能把同义词映射到相近的向量对专有名词的处理很强。“iPhone 16 Pro Max”能精确匹配一般。可能被拆成“iPhone16”“Pro”“Max”分别理解计算成本低。只需要统计词频不需要调用模型高。需要调用 Embedding 模型把 query 转成向量典型应用搜索引擎Google、Elasticsearch语义搜索、推荐系统、RAG2.混合检索流程通过上述表格对 BM25 关键词检索与向量检索进行对比我们发现了它们并非是非此即彼的关系而是相互补充的关系。因此在 RAG 的检索环节我们通常会同时使用 BM25 关键词检索和向量检索也就是混合检索。大致流程图如下3.分数融合的难题向量检索返回的是余弦相似度0~1 之间BM25 返回的是相关性分数0~正无穷两者的值域不一样不能直接相加。打个比方向量检索说“这个 chunk 和 query 的相似度是 0.85”BM25 说“这个 chunk 的相关性分数是 12.3”你怎么判断哪个更相关直接相加0.85 12.3 13.15显然不合理因为 BM25 的分数天然比余弦相似度大得多。你可能会想到做归一化——把两种分数都映射到 0~1 之间然后再相加或加权平均。但这也有问题如果某一路检索的分数分布很集中比如都在 0.8~0.9 之间归一化后会把微小的差异放大如果分数分布很分散比如 0.1~0.9 都有归一化后会把大的差异压缩。所以实际工程中最常用的融合策略不是基于分数而是基于排名——这就是 RRFReciprocal Rank Fusion倒数排名融合。1RRF 核心策略RRF 不依赖分数本身只看排名。核心思想一个结果在两路检索中排名都靠前那它大概率是最相关的。2计算方式对于某个 chunk d它的 RRF 分数计算公式是‘RRF(d) Σ 1 / (k rank_i(d))rank_i(d)是 chunk d 在第 i 路检索中的排名从 1 开始k是一个平滑常数通常取 60Σ表示对所有检索路求和四、Reranking召回优化混合检索已经能把相关的 chunk 召回来了为什么还需要重排序因为召回阶段向量检索 / BM25 / 混合检索追求的是快速召回尽可能多的相关结果但排序不一定精准。打个比方你在图书馆找书召回阶段是把可能相关的书都搬到桌子上重排序是仔细翻看每本书把最相关的几本排到最前面。最终给 LLM 的上下文窗口很小真正关键的是 Top-3 或 Top-5 的排序是否正确。如果 Top-1 是不相关的 chunkLLM 很可能被误导生成错误的答案。重排序就是解决这一步——用更强的模型对候选集重新打分把最相关的结果排到最前面。1.基本流程重排序的基本流程是1.初检阶段向量检索 / 混合检索快速召回候选集比如 Top-20 或 Top-502.重排序模型逐个评估这个 chunk 和用户问题到底有多相关给每个候选打分3.按重排序分数重新排序取 Top-K比如 Top-5作为最终结果用一张图来表示为了平衡速度和精度目前业界标准做法是“分级过滤”第一步粗筛 (召回)使用BM25或者Bi-Encoder(向量检索) 从 1 亿个文档中快速捞出前 100 个候选项。目标保证相关文档在里面哪怕混入了一些噪音。第二步精筛 (重排)将这 100 个候选项交给Cross-Encoder (Reranker)。Reranker 对这 100 个文档进行深度语义打分。目标把最相关的文档排在第一名。2.Bi-Encoder vs Cross-Encoder1Bi-Encoder双编码器这是目前向量检索Vector Search的核心原理。工作原理查询词Query和文档Document被分别送入两个独立的或参数共享的模型。模型将它们分别转化为两个定长的向量Embedding。计算两个向量之间的相似度如余弦相似度。优点极快文档向量可以提前计算并存入数据库如 Milvus, Pinecone。在线搜索时只需要计算查询词的向量然后进行向量匹配速度是毫秒级的。缺点精度瓶颈因为 Query 和 Doc 是分开编码的它们之间没有“深度交流”模型无法捕获两者之间细微的词汇级对应关系。2Cross-Encoder (交叉编码器) —— 精度之王这就是典型的Reranker模型所采用的架构。工作原理将查询词Query和文档Document拼接在一起中间用 [SEP] 符号隔开作为一条长文本输入到同一个模型中。模型内部的 Attention 机制可以同时看到 Query 和 Doc 的每一个词。模型直接输出一个 0 到 1 之间的相关性分数。优点极高精度模型能捕捉到 Query 中的某个词与 Doc 中某个词之间的精准联系比如复杂的否定词、语序关系。缺点极慢无法预计算。每来一个查询必须将它与候选文档逐一拼接并运行一遍深度模型。如果召回 1000 个文档就要跑 1000 次推理计算开销极大。五、总结我们先是介绍了 BM25 算法的核心机理围绕 IDF、词频、文档长度三大评判标准展开说明其计算公式与分词、计算 IDF、文档打分、排序的完整流程并指出其相比 TF-IDF 在抑制长文档、平滑词频上的优化。随后对比 BM25 关键词检索与向量检索的优劣前者精于关键词匹配、成本低后者擅长语义理解与同义词处理。接着阐述混合检索实践及分数融合难点重点讲解 RRF 分数融合策略与计算公式。最后介绍 Reranking 召回优化流程对比 Bi-Encoder 与精度更高的 Cross-Encoder 编码器差异。整体梳理了从传统关键词检索到语义检索、混合召回再到精排的完整检索优化体系为高效检索系统构建提供清晰思路。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…