深入理解 BM25:原理篇
BM25 解决的到底是什么问题全文检索首先需要回答两个不同的问题哪些文档匹配查询词匹配的文档应该如何排序倒排索引解决第一个问题。对于查询词database搜索引擎可以直接找到包含该词的文档列表。BM25 主要解决第二个问题同样包含database的文档哪一篇更相关直觉上一个合理的词项相关性模型至少应考虑三件事查询词在当前文档中出现得越多文档通常越相关一个词在整个语料库中越少见它越有区分度同样出现三次短文档中的三次通常比超长文档中的三次更重要。BM25 正是把这三种信号组合起来TFTerm Frequency词频信号表示查询词在当前文档中出现了多少次。IDFInverse Document Frequency稀有度信号表示一个查询词在整个语料库中有多稀有。字段长度归一化长文档天然更容易包含查询词不能仅因为篇幅长就获得更高分数。不过 BM25 并不是语义模型。它不知道“数据库”和“DBMS”语义相近也不理解句子的真实含义。它做的是一种非常高效、可解释、面向词项匹配的相关性估计。BM25 公式拆解对于查询 中的每个词项 文档 的 BM25 得分通常写成其中符号含义查询词 在文档 中的出现次数即 term frequency当前文档该字段的 token 数avgdl所有文档该字段的平均 token 数文档总数包含词项 的文档数即 document frequency控制词频饱和速度控制字段长度归一化强度Tantivy 0.26.1 中固定使用const K1: Score 1.2;const B: Score 0.75;这也是常见的默认参数组合。2.1 IDF越少见的词区分度越高Tantivy 使用的 IDF 为当一个词几乎出现在所有文档中时它没有多少区分能力IDF 较低。当一个词只出现在少量文档中时它更可能代表用户真正关心的主题IDF 较高。例如在技术文档库中the、is、data可能很常见MVCC、DiskANN、fieldnorm可能更稀有。因此后者通常能给文档带来更高的相关性增量。公式中的0.5和外层1是平滑处理使 IDF 在极端数据分布下仍保持稳定且为正。2.2 TF 不是线性增长而是逐渐饱和假设当前字段长度正好等于平均长度即BM25 的词频部分可以简化为使用 Tantivy 的 词频TF 部分11.00021.37541.692101.964趋近无穷2.200第一次命中很重要从一次增加到两次仍然有明显收益但从一百次增加到一百零一次几乎不会改变排序。这就是“词频饱和”。如果词频完全线性增长一篇反复堆砌关键词的文档会轻易压过正常文档。BM25 用 抑制了这种行为。2.3 字段长度归一化BM25 的长度归一化项为当 时完全不考虑字段长度。当 时完整地按照字段长度相对平均长度进行归一化。Tantivy 使用 意味着长度是重要因素但不会完全主导评分。假设查询词在文档中都出现三次平均字段长度为 100当前字段长度不含 IDF 的 TF 得分501.7601001.5712001.294同样出现三次短字段中的命中更集中因此得分更高。这里有一个容易被忽略的关键点BM25 归一化的是“字段经过 analyzer 后得到的 token 数”不是原始字符串长度也不是整篇文档所有字段长度的总和。分词器、停用词过滤、N-gram 参数都会改变 token 数因此也会间接改变 BM25 分数。落地 BM25 需要哪些数据把公式翻译成存储引擎语言需要四类数据范围数据Tantivy 中的来源当前文档、当前词项词项出现次数 即 term frequencypostings 中记录的 term frequency当前文档、当前字段字段长度 即该字段分词后的 token 数fieldnorm /FieldNormReader全局字段统计该字段的总 token 数以及索引文档总数各 segment 的倒排索引元数据当前查询词的全局统计包含该词项的文档数 即 document frequencyterm dictionary 中TermInfo记录的 doc frequencyBM25 看起来只是一个公式但它要求索引在写入阶段提前保存每个 term 在每个文档中的频率每个文档字段的长度每个 term 的文档频率每个字段的全局 token 统计。如果索引只保存“这个 term 出现在哪些文档中”而不保存频率和字段长度那么就无法完整计算 BM25。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

微信逆向编程必备:gh_mirrors/we/wechatPc中的Hook技术与内存分析

微信逆向编程必备:gh_mirrors/we/wechatPc中的Hook技术与内存分析

微信逆向编程必备:gh_mirrors/we/wechatPc中的Hook技术与内存分析 【免费下载链接】wechatPc PC微信hook源码,PC微信注入,逆向编程,可以制作微信机器人玩玩,仅供学习,请不要用于商业、违法途径,…

2026/10/19 18:07:36 阅读更多 →
免费文档下载工具:一个脚本搞定 30+ 平台

免费文档下载工具:一个脚本搞定 30+ 平台

免费文档下载工具:一个脚本搞定 30 平台 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的烦恼而…

2026/10/18 11:40:39 阅读更多 →
模拟位置总被检测?3步让应用彻底查不到

模拟位置总被检测?3步让应用彻底查不到

模拟位置总被检测?3步让应用彻底查不到 【免费下载链接】HideMockLocation Xposed module to hide the mock location setting. 项目地址: https://gitcode.com/gh_mirrors/hi/HideMockLocation 打开某款打车软件准备定位打卡,结果提示"检测…

2026/10/18 11:40:43 阅读更多 →

最新新闻

Oracle expdp异地导出:dmp文件落点与三种实现方案

Oracle expdp异地导出:dmp文件落点与三种实现方案

接手一个“expdp异地导出”的需求时,我第一反应从来不急着敲命令,而是先问一句:你说的“异地”,到底指什么落在异地?这个看似简单的问题,其实决定着后面整个方案的设计方向。做了这么多年 Oracle 运维&…

2026/10/19 18:06:54 阅读更多 →
蓝桥杯备赛Day1:P1101单词方阵,用方向枚举取代DFS

蓝桥杯备赛Day1:P1101单词方阵,用方向枚举取代DFS

1. 为什么第一天的第一题选了P1101 单词方阵如果今天是你的蓝桥杯备赛第一天,我建议你先把 P1101 单词方阵 这道题做透。原因很简单:它不是难题,却把搜索类题目里最容易被忽略的细节全暴露出来了——方向怎么枚举、边界怎么判、标记怎么打。我…

2026/10/19 18:06:54 阅读更多 →
AI+RPA融合安全:五大核心维度与落地实践

AI+RPA融合安全:五大核心维度与落地实践

AI与RPA的融合这两年几乎是所有流程自动化项目绕不开的话题,我接触的客户里,十家有八家在聊“给机器人装上大脑”这件事。传统RPA只是按照规则机械执行,遇到非结构化数据、模糊判断就卡壳,而AI正好补上这个短板——OCR识别票据、自…

2026/10/19 18:06:54 阅读更多 →
SX126x LoRa驱动移植实战:从工程结构到低功耗收发

SX126x LoRa驱动移植实战:从工程结构到低功耗收发

简介:这份资源面向嵌入式开发初学者与无线通信方向工程师,提供基于STM8的SX126x LoRa芯片完整驱动方案,解决LoRa模块从底层寄存器配置到收发数据链路搭建的问题。包内共136个文件,以h头文件、c源文件、xcl链接配置、o编译产物及ew…

2026/10/19 18:06:54 阅读更多 →
VS中_CRT_SECURE_NO_WARNINGS宏的作用、用法与避坑指南

VS中_CRT_SECURE_NO_WARNINGS宏的作用、用法与避坑指南

1. 为什么你的VS里总是报“CRT_SECURE_NO_WARNINGS”这个错用微软系编译器(Visual Studio、VS Code搭配MSVC工具链)写C/C程序的人,几乎都见过这行报错:error C4996: scanf: This function or variable may be unsafe. Consider us…

2026/10/19 18:06:54 阅读更多 →
Product Hunt热榜复盘:从票数与评论区看产品冲榜策略

Product Hunt热榜复盘:从票数与评论区看产品冲榜策略

我每天早上都会打开 Product Hunt 的热榜页面,这已经是雷打不动的习惯。2026-03-31 的这份榜单,我点开之前其实没抱太大期待——毕竟“每日热榜”四个字听起来就像流水账。但真正逐条把当天上榜的产品翻完、把评论区看完、把背后几位创始人的发布策略捋清…

2026/10/19 18:05:50 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →