news 2026/8/14 11:32:13

深入理解 BM25:原理篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解 BM25:原理篇
  1. BM25 解决的到底是什么问题?

全文检索首先需要回答两个不同的问题:

  1. 哪些文档匹配查询词?
  2. 匹配的文档应该如何排序?

倒排索引解决第一个问题。对于查询词database,搜索引擎可以直接找到包含该词的文档列表。

BM25 主要解决第二个问题:同样包含database的文档,哪一篇更相关?

直觉上,一个合理的词项相关性模型至少应考虑三件事:

  • 查询词在当前文档中出现得越多,文档通常越相关;
  • 一个词在整个语料库中越少见,它越有区分度;
  • 同样出现三次,短文档中的三次通常比超长文档中的三次更重要。

BM25 正是把这三种信号组合起来:

  • TF(Term Frequency):词频信号,表示查询词在当前文档中出现了多少次。
  • IDF(Inverse Document Frequency):稀有度信号,表示一个查询词在整个语料库中有多稀有。
  • 字段长度归一化:长文档天然更容易包含查询词,不能仅因为篇幅长,就获得更高分数。

不过 BM25 并不是语义模型。它不知道“数据库”和“DBMS”语义相近,也不理解句子的真实含义。它做的是一种非常高效、可解释、面向词项匹配的相关性估计。

  1. 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 较高。

例如,在技术文档库中:

  • theisdata可能很常见;
  • MVCCDiskANNfieldnorm可能更稀有。

因此,后者通常能给文档带来更高的相关性增量。

公式中的+0.5和外层1+是平滑处理,使 IDF 在极端数据分布下仍保持稳定且为正。

2.2 TF 不是线性增长,而是逐渐饱和

假设当前字段长度正好等于平均长度,即:

BM25 的词频部分可以简化为:

使用 Tantivy 的 :

词频TF 部分
11.000
21.375
41.692
101.964
趋近无穷2.200

第一次命中很重要;从一次增加到两次仍然有明显收益;但从一百次增加到一百零一次,几乎不会改变排序。

这就是“词频饱和”。

如果词频完全线性增长,一篇反复堆砌关键词的文档会轻易压过正常文档。BM25 用 抑制了这种行为。

2.3 字段长度归一化

BM25 的长度归一化项为:

当 时,完全不考虑字段长度。

当 时,完整地按照字段长度相对平均长度进行归一化。

Tantivy 使用 ,意味着长度是重要因素,但不会完全主导评分。

假设查询词在文档中都出现三次,平均字段长度为 100:

当前字段长度不含 IDF 的 TF 得分
501.760
1001.571
2001.294

同样出现三次,短字段中的命中更集中,因此得分更高。

这里有一个容易被忽略的关键点:

BM25 归一化的是“字段经过 analyzer 后得到的 token 数”,不是原始字符串长度,也不是整篇文档所有字段长度的总和。

分词器、停用词过滤、N-gram 参数都会改变 token 数,因此也会间接改变 BM25 分数。

  1. 落地 BM25 需要哪些数据?

把公式翻译成存储引擎语言,需要四类数据:

范围数据Tantivy 中的来源
当前文档、当前词项词项出现次数 ,即 term frequencypostings 中记录的 term frequency
当前文档、当前字段字段长度 ,即该字段分词后的 token 数fieldnorm /FieldNormReader
全局字段统计该字段的总 token 数,以及索引文档总数各 segment 的倒排索引元数据
当前查询词的全局统计包含该词项的文档数 ,即 document frequencyterm dictionary 中TermInfo记录的 doc frequency

BM25 看起来只是一个公式,但它要求索引在写入阶段提前保存:

  • 每个 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%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 11:31:58

建设网站好学吗 揭秘零基础小白从入门到精通的真实学习路径与心路历程

咱们今天不绕弯子,直接聊点干货。很多人在深夜刷朋友圈或者在社交媒体上看到那些光鲜亮丽的独立站、个人博客,心里头总会冒出一个念头:我也想拥有一个属于自己的网站。但是紧接着,另一个更现实的问题就会像冷水一样泼下来:建设网站好学吗?是不是要像我当年学高数一样,头…

作者头像 李华
网站建设 2026/8/14 11:31:29

Linux大容量硬盘分区挂载实战:从GPT分区到fstab配置

1. 当一块“巨无霸”硬盘来到你面前最近给服务器加装了一块8TB的硬盘,准备用来做数据归档。插上线,开机,敲下lsblk命令,看着那个孤零零的/dev/sdb设备名,心里盘算着怎么把它用起来。这场景对于任何一个运维、开发或者数…

作者头像 李华
网站建设 2026/8/14 11:31:25

济南想建设网站怎么避坑选对靠谱团队?揭秘企业数字化转型的核心秘籍

在济南这座历史悠久且充满现代活力的城市里,做生意的老板们最近都有一个共同的烦恼,那就是济南想建设网站的事宜。咱们济南人做生意讲究的是“实诚”和“地道”,但到了互联网这个虚虚实实的领域,很多人却容易踩坑。你想想,现在哪个行业没有网上店?卖煎饼果子的有抖音,搞…

作者头像 李华
网站建设 2026/8/14 11:30:59

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

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

作者头像 李华
网站建设 2026/8/14 11:30:37

2024顺德外贸网站建设指南:如何打造高转化率的跨境出海第一阵地

大家好,我是老李,一个在顺德扎根多年的互联网老兵。今天咱们不聊那些高大上、虚头巴脑的理论,咱们来聊聊最实在的——顺德企业的老板们,还有那些正在为外贸订单发愁的销售精英们,都在关心的一件事:到底该怎么做好顺德外贸网站建设。我知道,很多老板一听到“网站建设”这…

作者头像 李华