BM25全文检索

概述

BM25是一种经典的全文检索排序算法,常用于搜索引擎、RAG和文档检索。它的核心目标是:根据用户查询中的关键词,判断哪些文档最相关,并给这些文档打分排序。

你可以把BM25理解成,比简单关键词匹配更聪明的TF-IDF( Term Frequency-Inverse Document Frequency , 词频-逆文档频率 )。

比如用户搜索:

latex 复制代码
GitNexus MCP Stdio

系统里有3篇文档:

latex 复制代码
文档A:GitNexus MCP Server使用Stdio通信
文档B:MCP支持Stdio和SSE
文档C:GitNexus代码索引架构

BM25会分别计算这3篇文档和查询的相关性分数:

latex 复制代码
文档A:8.7
文档B:6.2
文档C:2.1

然后按分数排序返回:

latex 复制代码
文档A
文档B
文档C

BM25考虑3件事

关键词出现次数

比如搜索:

latex 复制代码
MCP Stdio

如果一篇文章里频繁出现:

latex 复制代码
MCP
Stdio

那么它通常会获得更高分。

但BM25不会认为出现越多越无限重要。

例如:

latex 复制代码
出现1次 → 提升明显
出现3次 → 继续提升
出现20次 → 提升已经很有限

这叫**词频饱和**。因为一个词出现100次,并不意味着相关性就是出现10次的10倍。


关键词的稀有程度

假设整个文档库里:

latex 复制代码
"the"出现100万次
"GitNexus"出现100次

那么搜索:

latex 复制代码
GitNexus

这个词的信息量明显更大。所以BM25会让稀有词获得更高权重。

这部分本质上就是IDF(Inverse Document Frequency, 逆文档频率),也就是说:一个词在整个语料库里越少见,它越有区分度。

比如:

latex 复制代码
"server" → 权重较低
"GitNexus" → 权重较高
"CompatibleStdioServerTransport" → 权重更高

文档长度

假设:

latex 复制代码
文档A:100字,其中MCP出现5次
文档B:10000字,其中MCP出现5次

虽然出现次数一样,但显然文档A更可能专门讨论MCP。所以BM25会做文档长度归一化。也就是说:短文档中关键词密集通常比长文档中偶尔出现关键词得分更高。

BM25公式

给定查询Q和文档D主要,经典形式可以写成:

$ score(D,Q)=\sum_{q_i\in Q}

IDF(q_i)

\cdot

\frac{f(q_i,D)(k_1+1)}

{f(q_i,D)+k_1(1-b+b\frac{|D|}{avgdl})} $

看几个变量:

  • f(q_i,D) 表示某个关键词在文档中出现几次。
  • IDF(q_i) 表示这个词有多稀有
  • \|D\| 表示当前文档长度
  • avgdl 表示所有文档的平均长度。
  • k1控制词频饱和程度, 常见k1 ≈ 1.2~2.0
  • b控制文档长度归一化程度,b ≈ 0.75
相关推荐
宿州派大星32 分钟前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
承渊政道2 小时前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(开源大模型ChatGLM高级定制化应用实战)
人工智能·pytorch·python·llm·模型微调·glm
Joy T3 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
专注仿真7 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes7 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停7 小时前
自动化测试(java)
java·开发语言·selenium·自动化
Smoothcloud润云8 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook8 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
棉猴9 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
诺伦9 小时前
GEO优化数据实证:78%引用流向官网的机制拆解与小品牌三步管线实战教程 | RiseClaw玄策
python·seo·geo·内容营销·ai搜索