当前位置: 首页 > 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.dtcms.com/a/341286.html

相关文章:

  • Python Day32 JavaScript 数组与对象核心知识点整理
  • 用 Go 库 urfave/cli 轻松构建命令行程序
  • Linux上安装多个JDK版本,需要配置环境变量吗
  • STM32存储结构
  • Vue3 结合 html2canvas 生成图片
  • GISBox工具:FBX到3DTiles文件转换指南
  • SpringBoot - 公共字段自动填充的6种方案
  • 使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
  • Mac编译Android AOSP
  • Vue2+Vue3前端开发_Day3
  • vue3中,如何解决数字精度问题(big.js的使用)
  • 计算机毕设Spark项目实战:基于大数据技术的就业数据分析系统Django+Vue开发指南
  • SQL count(*)与 sum 区别
  • 【iOS】NSRunLoop
  • Preprocessing Model in MPC 2 - 背景、基础原语和Beaver三元组
  • 计算机网络--HTTP协议
  • Jenkins服务器配置SSH
  • 强制重启导致Ubuntu24.04LTS amd的WIFI无法使用的解决方案
  • 超长视频生成新突破!LongVie框架问世,创作不再受时长限制
  • spring第9课,spring对DAO的支持
  • C语言---编译的最小单位---令牌(Token)
  • 基于 Java 调用泛微 OA WebService 创建表单流程
  • 如何保障内部网络安全前提下,实现与外部互联网之间的文件传输?
  • 一种融合AI与OCR的施工许可证识别技术,提升工程监管效率,实现自动化、精准化处理。
  • 【CUDA编程】CUDA编程入门第一课
  • QT聊天项目DAY20
  • 【unitrix数间混合计算】3.3 无符号整数标记trait(bin_unsigned.rs)
  • C++:仿函数部分的补充、模版进阶(非类型模版参数、模板的特化、模板的分离编译)
  • 1277. 统计全为 1 的正方形子矩阵
  • 含钼溶液中回收钼