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

BM25 系列检索算法

我来系统科普一下 BM25 系列检索算法。这些算法都属于 基于词频统计的经典信息检索模型,常用于搜索引擎、文本匹配、向量数据库的倒排索引部分。


 1. BM25

BM25 (Best Matching 25) 是目前最常用的 词袋模型检索函数,基于 TF-IDF 改进
核心思想:

  • TF 部分(词频饱和): 对词频采用饱和函数,而不是简单计数,避免长文档因为词重复而被过度加权。

  • IDF 部分(逆文档频率): 罕见词权重大,常见词(如“的”“是”)权重小。

  • 文档长度归一化: 引入参数调节长文档惩罚。

公式(简化版):

  • f(t,d):词 ttt 在文档 ddd 中的词频

  • ∣d∣:文档长度

  • avgdl:平均文档长度

  • k1​:词频饱和参数(一般 1.2–2.0)

  • b:文档长度惩罚系数(0–1,常取 0.75)

 特点:相对稳健,效果好,是搜索引擎的基线模型。


 2. BM25L

BM25L 是 BM25 的一个变种,主要针对 长文档惩罚过度 的问题。
在 BM25 中,长文档往往被压低分数,而 BM25L 通过 线性调整 缓解了这个问题。

公式(直观差别):

  • 在 BM25 的分母中加上一个 常数 δ,确保长文档的词频贡献不会被过度稀释。

 特点:对长文本更友好,减少 BM25 对长文档的“歧视”。


 3. BM25+

BM25+ 是 BM25 的另一改进版,主要解决 短文档得分过低 的问题。
在 BM25 中,如果文档很短,即使包含查询词,得分也可能偏低。
BM25+ 在公式中加上 一个常数补偿项 ε,保证至少有一个“基线分数”。

 特点:

  • 对短文档更友好

  • 使得得分分布更加平衡


🔹 4. BM25Okapi(或 BM25-Okapi)

BM25Okapi 本质上就是 BM25 的标准实现版本
名字来源于 Okapi 信息检索系统,这是最早实现 BM25 的系统,因此很多库里会写 BM25Okapi 来区分。

 特点:和 BM25 等价,不是新的变体。
(例如 rank_bm25 Python 库里就是 BM25Okapi 类)。


 总结对比

算法主要改进点适用场景
BM25词频饱和 + 文档长度归一化通用搜索,稳健的基线
BM25Okapi标准 BM25 实现工程应用中常见的名字
BM25L缓解长文档惩罚长文本检索(如维基百科文章)
BM25+提升短文档得分短文本检索(如新闻标题、问答场景)

这张图展示了 BM25、BM25L、BM25+ 在文档长度变化时的打分趋势差异:

  • BM25(蓝线):随着文档变长,分数明显下降。

  • BM25L(橙线):下降趋势更平缓,减轻了长文档惩罚。

  • BM25+(绿线):整体曲线比 BM25 高,尤其在短文档时更友好。

http://www.lryc.cn/news/626954.html

相关文章:

  • 自学大语言模型之Transformer的Trainer
  • 工业电脑选得好生产效率节节高稳定可靠之选
  • 0基础安卓逆向原理与实践:第5章:APK结构分析与解包
  • 华为仓颉语言的class(类)初步
  • 比剪映更轻量!SolveigMM 视频无损剪切实战体验
  • 将集合拆分成若干个batch,并将batch存于新的集合
  • ubuntu下安装vivado2015.2时报错解决方法
  • 换根DP(P3478 [POI 2008] STA-StationP3574 [POI 2014] FAR-FarmCraft)
  • Qt 中最经典、最常用的多线程通信场景
  • 通过自动化本地计算磁盘与块存储卷加密保护数据安全
  • 链表-24.两两交换链表中的结点-力扣(LeetCode)
  • ansible playbook 实战案例roles | 实现基于firewalld添加端口
  • SSM从入门到实战:2.1 MyBatis框架概述与环境搭建
  • 【LeetCode 热题 100】279. 完全平方数——(解法三)空间优化
  • innovus auto_fix_short.tcl
  • 代码随想录Day57:图论(寻宝prim算法精讲kruskal算法精讲)
  • 3D检测笔记:相机模型与坐标变换
  • 今日行情明日机会——20250820
  • 算法提升树形数据结构-(线段树)
  • 数据结构与算法系列(大白话模式)小学生起点(一)
  • 关于 Flask 3.0+的 框架的一些复习差异点
  • 算法230. 二叉搜索树中第 K 小的元素
  • 雷卯针对香橙派Orange Pi 5B开发板防雷防静电方案
  • 力扣hot100:最大子数组和的两种高效方法:前缀和与Kadane算法(53)
  • Deepseek+python自动生成禅道测试用例
  • 自动化测试用例生成:基于Python的参数化测试框架设计与实现
  • 记一次pnpm start启动异常
  • Spring Boot 3整合Nacos,配置namespace
  • 质谱数据分析环节体系整理
  • Rust 入门 包 (二十一)