BM25 的原理是什么?
未标记
考查重点:词频饱和与长度归一化。BM25 累加查询词贡献:词频会饱和,稀有词权重更大,并用文档长度归一化避免长文天然占优
本题目录
参考答案
核心回答
BM25是一种基于词项统计的文档相关性打分方法。它把查询中各词的贡献相加,主要考虑三件事:词在当前文档出现多少次、在整个语料中是否稀有、文档相对平均长度有多长。词频贡献逐渐饱和,稀有词通常更能区分文档,长度归一化避免长文仅因更容易出现查询词而占优。
它通常结合倒排索引实现:先通过查询词找到可能命中的文档,再根据词频和语料统计打分排序,不需要先把文档编码成稠密语义向量。
公式怎样理解
一种常用形式是:
score(q,d) = Σ IDF(t) × f(t,d)(k1+1) / [f(t,d)+k1(1-b+b|d|/avgdl)]
对查询词t求和;f是它在文档中的出现次数,|d|是文档或字段长度,avgdl是对应语料的平均长度。k1控制词频饱和,b控制长度归一化强度;b=0不使用长度因素,b=1使用完整的相对长度归一化。
常见正IDF写法为 ln[1+(N-df(t)+0.5)/(df(t)+0.5)],N是统计范围内文档数,df是包含该词的文档数。不同实现存在IDF、字段统计和常数因子的差异,核对实际实现后再比较分数,不把公式当答案正确概率。
一个词的贡献如何变化
只看词频和长度部分,设k1=1.2、b=0.75、文档等于平均长度。词出现1次时该因子为1,出现3次为约1.571,出现6次为约1.833;出现次数翻倍并不会让贡献翻倍,极限趋近k1+1。
词只出现1次时,若文档长度变为平均值的2倍,因子约0.710。这里保持词频不变,长度变长会降低该词贡献;不能理解为所有长文都比短文分数低,因为实际还要看其他词及出现次数。
工程上哪些细节影响结果
中文分词、大小写、领域词典、停用词、字段选择都会改变词项和统计;错误码或产品型号被拆坏,算法再正确也可能匹配失败。标题、正文等字段可以采用不同权重,统计范围和切片粒度改变后也应重新评估。
BM25对精确术语有优势,但缺少同义词、改写或多跳语义推断能力,词项相同也不保证条件正确。可结合查询改写、语义检索和重排改善覆盖,具体组合由评测决定。
常见追问
为什么不直接用TF-IDF? BM25在词频非线性饱和和长度归一化上给出可调形式,能减少重复词堆积和文档长度差异的影响;效果仍依赖语料与任务。
k1和b取多少? 从所用实现默认值建立基线,在代表性查询上调参,不把一个库的默认值当业务最优值。
参考资料
- 国内:JavaGuide:RAG优化与混合检索:关键词与语义召回的对照说明BM25适合明确词项、实体和错误码,以及为何常与向量检索互补。
- 国内:腾讯云:稀疏向量基本介绍:依据词项权重与稀疏表示的区别,说明正文中 BM25 的词级检索信号并不依赖稠密语义编码。
- 国内:百度智能云:全文检索:倒排索引和字段分词示例说明BM25评分之前需要怎样组织词项,中文分词为什么会影响匹配。
- 国外:Robertson、Zaragoza:The Probabilistic Relevance Framework: BM25 and Beyond:依据词频饱和与长度归一化推导,解释正文中重复词频不会线性增加贡献的数例。
- 国外:Apache Lucene 9.12.3:BM25Similarity:依据 k1、b、正 IDF 与字段统计的实现约定,说明正文中公式变体和默认配置需按具体系统核对的原因。
相关面经
6 篇小天才
AI 应用工程师(穿戴)了解 BM25 和混合检索吗?
东方财富
AI 应用开发工程师BM25 的计算过程和主要考虑因素是什么?
长鑫存储
Agent 开发实习生我看你提到bm25,bm25的底层原理
虾皮
Agent 应用开发工程师讲一下 BM25 的计算原理。
百度
AI 应用开发工程师BM25原理?(当时没答到逆文档频率这点)
展开剩余 1 篇面经
美团
后端开发工程师BM25 的工作原理?

