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

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

一、引文在之前我们的检索环节只是使用了向量数据库提供的 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 编码器差异。整体梳理了从传统关键词检索到语义检索、混合召回再到精排的完整检索优化体系为高效检索系统构建提供清晰思路。

相关文章:

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

一、引文在之前我们的检索环节只是使用了向量数据库提供的 ANN 算法进行纯向量检索,原因在于它可以通过计算查询向量和文档向量之间的余弦相似度,在极短时间内从整个向量数据库找到几个语义相似的局部最优解。它的强大之处在于擅长理解语义,但…...

5步解锁VMware的macOS支持:Unlocker工具全面解析与实践指南

5步解锁VMware的macOS支持:Unlocker工具全面解析与实践指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 在虚拟化技术日益普及的今天,许多开发者和技术爱好者希望在非苹果硬件…...

ai赋能安装:让快马智能推荐openclaw本地部署的最优配置方案

最近在折腾OpenClaw的本地安装,发现这个爬虫框架虽然强大,但配置起来真是让人头大——不同的硬件环境和应用场景需要完全不同的参数组合。好在发现了InsCode(快马)平台的AI辅助开发功能,用它做了个智能配置工具,分享下实现思路和实…...

Ubuntu 20.04下Python调用海康SDK,解决FastAPI与libssl.so.1.1冲突的完整避坑指南

Ubuntu 20.04下Python调用海康SDK与FastAPI的SSL冲突深度解析与工程实践 在物联网和安防系统开发领域,将海康威视设备接入Python后端服务已成为常见需求。但当开发者尝试在Ubuntu 20.04上使用FastAPI框架集成海康SDK时,往往会遭遇一个令人困惑的陷阱——…...

新手零基础入门:借助快马AI轻松理解并创建你的无名小站

作为一个刚入门编程的新手,想要搭建一个属于自己的"无名小站"确实会感到无从下手。最近我在InsCode(快马)平台上尝试了这个项目,整个过程出乎意料地顺利,下面分享我的学习心得。 项目结构规划 首先需要明确网站的基本框架。我的无名…...

Amundsen仪表板连接器配置终极指南:Superset、Tableau等工具无缝对接

Amundsen仪表板连接器配置终极指南:Superset、Tableau等工具无缝对接 【免费下载链接】amundsen Amundsen is a metadata driven application for improving the productivity of data analysts, data scientists and engineers when interacting with data. 项目…...

transformer 优化笔记 持续更新

目录 方案2:安装 xformers(推荐) 🚀 核心作用:更高效地计算注意力 xfusers 💡 为什么需要 xfusers? 方案2:安装 xformers(推荐) pip install xformers 然…...

基于FPGA的车道线检测系统设计

基于FPGA的车道线检测系统设计 摘要 车道线检测是高级驾驶辅助系统(ADAS)中的核心功能模块,对实时性和计算效率有着严苛的要求。传统的软件实现方式在应对高分辨率视频流时往往面临延迟大、资源占用高等问题。本文设计并实现了一套基于FPGA的车道线检测系统,采用Altera C…...

终极Nintendo Switch文件解析工具:NSTool完整使用指南

终极Nintendo Switch文件解析工具:NSTool完整使用指南 【免费下载链接】nstool General purpose read/extract tool for Nintendo Switch file formats. 项目地址: https://gitcode.com/gh_mirrors/ns/nstool Nintendo Switch Tool(简称NSTool&am…...

如何永久保存微信聊天记录?WeChatMsg免费工具终极使用指南

如何永久保存微信聊天记录?WeChatMsg免费工具终极使用指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

文墨共鸣大模型高效写作工具链:替代Typora的AI增强Markdown编辑体验

文墨共鸣大模型高效写作工具链:替代Typora的AI增强Markdown编辑体验 如果你也像我一样,常年和Markdown文档打交道,那你一定对Typora不陌生。它简洁、优雅,所见即所得的编辑体验,让它成为了许多写作者和技术博主的心头…...

SynapseML计算机视觉实战:OpenCV与深度学习模型结合的终极指南

SynapseML计算机视觉实战:OpenCV与深度学习模型结合的终极指南 【免费下载链接】SynapseML Simple and Distributed Machine Learning 项目地址: https://gitcode.com/gh_mirrors/sy/SynapseML SynapseML是一个强大的分布式机器学习框架,它将Open…...

Bilibili API Python客户端深度解析与实战指南

Bilibili API Python客户端深度解析与实战指南 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-ap…...

ComfyUI Essentials:填补ComfyUI核心缺失功能的必备插件指南

ComfyUI Essentials:填补ComfyUI核心缺失功能的必备插件指南 【免费下载链接】ComfyUI_essentials 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_essentials ComfyUI Essentials是一款专门为ComfyUI用户设计的插件,它提供了ComfyUI核心…...

opencv透视变换实战:从算法原理到图像矫正的完整实现

1. 透视变换的数学原理与生活场景 第一次接触透视变换时,我盯着那些数学公式看了整整一个下午。直到有天在咖啡厅看到服务员端盘子,突然就明白了——这就像把倾斜的餐盘拍平的过程。想象你从侧面45度角拍了一张餐盘照片,透视变换就是把这个斜…...

Repomix性能基准测试:不同规模代码库表现终极指南

Repomix性能基准测试:不同规模代码库表现终极指南 【免费下载链接】repomix 📦 Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language …...

含分布式能源电网储能容量优化 双层优化模型 改进粒子群+cplex 内层以购电成本最低 外层以...

含分布式能源电网储能容量优化 双层优化模型 改进粒子群cplex 内层以购电成本最低 外层以综合运行成本(储能投运,新能源发电,网损等等) 有参考文献1. 项目概述 本项目实现了一个针对含分布式能源(光伏、风电&#xff0…...

革命性模糊测试平台ClusterFuzz:Google如何用10万+虚拟机发现27,000个安全漏洞

革命性模糊测试平台ClusterFuzz:Google如何用10万虚拟机发现27,000个安全漏洞 【免费下载链接】clusterfuzz Scalable fuzzing infrastructure. 项目地址: https://gitcode.com/gh_mirrors/clu/clusterfuzz 在软件安全领域,模糊测试已成为发现漏洞…...

LuatOS固件玩转多摄像头:Air8101开发板的USB端口切换技巧大全

LuatOS固件玩转多摄像头:Air8101开发板的USB端口切换技巧大全 在工业检测和安防监控领域,多摄像头系统的动态切换能力往往决定着整个方案的灵活性与可靠性。Air8101开发板搭载LuatOS固件后,其USB端口管理功能为开发者提供了前所未有的摄像头控…...

瑞典隆德大学 AI 模型血检识别 5 种神经疾病

瑞典隆德大学研发的 AI 模型 ProtAIDe-Dx,可通过单次血检精准识别 5 种神经退行性疾病,准确率高、早期筛查潜力大。 一、核心信息 发表时间:2026年3月31日(《Nature Medicine》)研发团队:隆德大学 Vogel &a…...

保姆级教程:从官网下载到成功运行,手把手搞定CANoe 16.0安装(附常见报错排查)

CANoe 16.0安装全攻略:从零开始到完美运行的避坑指南 第一次接触CANoe 16.0时,很多人会被复杂的安装流程和各种报错搞得焦头烂额。作为汽车电子领域最常用的网络测试工具之一,CANoe的安装过程确实比普通软件要复杂得多——从官网下载的正确姿…...

#星光计划4.0#鸿蒙界面设计技术解析与实战案例

鸿蒙界面设计技术解析与实战案例 随着万物互联时代的到来,鸿蒙操作系统(HarmonyOS)以“全场景智慧体验”为核心,构建了一套独特的界面设计体系。不同于传统单设备操作系统的界面逻辑,鸿蒙界面设计围绕“分布式协同、原…...

植物大战僵尸革新辅助工具:PVZ Toolkit全方位功能解析与使用指南

植物大战僵尸革新辅助工具:PVZ Toolkit全方位功能解析与使用指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 植物大战僵尸作为经典塔防游戏,多年来一直拥有庞大的玩家群…...

开源文献管理工具如何重塑学术研究工作流:Zotero Reference深度解析

开源文献管理工具如何重塑学术研究工作流:Zotero Reference深度解析 【免费下载链接】zotero-reference PDF references add-on for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reference 在数字化科研时代,学术工作者平均每周…...

Android位置伪装实战手册:7天掌握FakeLocation隐私保护技巧

Android位置伪装实战手册:7天掌握FakeLocation隐私保护技巧 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾因社交媒体应用暴露真实位置而担忧?是…...

PHP-WebDriver并发测试终极指南:多线程与分布式测试架构完全解析

PHP-WebDriver并发测试终极指南:多线程与分布式测试架构完全解析 【免费下载链接】php-webdriver PHP client for Selenium/WebDriver protocol. Previously facebook/php-webdriver 项目地址: https://gitcode.com/gh_mirrors/ph/php-webdriver PHP-WebDriv…...

ROS 2从入门到精通系列(八):参数与配置 - Launch文件进阶实战与架构设计

1. Launch文件在复杂系统中的核心价值 第一次接触ROS 2的Launch文件时,我把它当成了简单的启动脚本。直到参与一个自动驾驶小车项目,需要同时协调5个激光雷达、3个摄像头和多个算法节点时,才真正理解它的威力。Launch文件本质上是一个系统级编…...

避开Trace API的坑:Android方法耗时统计的正确姿势与实战技巧

避开Trace API的坑:Android方法耗时统计的正确姿势与实战技巧 在移动应用开发中,性能优化始终是开发者面临的核心挑战之一。特别是对于音视频、游戏等对帧率敏感的应用场景,毫秒级的性能差异都可能直接影响用户体验。而精准的方法耗时统计&am…...

Android Init 系列专题【篇二:Selinux启动流程】

Android Init 系列专题【总篇:深入浅出】https://blog.csdn.net/qq_27672101/article/details/144153376 Android Init 系列专题【篇一:fstab分区表挂载】https://blog.csdn.net/qq_27672101/article/details/146104979 Android Init 系列专题【篇二&a…...

用JSP+Servlet实现图书管理系统:从登录验证到CRUD完整流程

基于JSPServlet的图书管理系统实战开发指南 在当今企业级应用开发中,Java Web技术栈依然是构建稳健后台系统的首选方案之一。本文将带您从零开始,通过开发一个功能完整的图书管理系统,深入掌握JSPServlet的核心技术组合。不同于简单的CRUD示例…...