BM25BM25全称是 Best Matching 25是一种用于信息检索的排名函数。它用来计算一个查询Query与一组文档Documents的相关性得分并按照得分从高到低对文档进行排序。简单来说它的核心任务是给定一个用户搜索词如“苹果手机”从海量文档中找出最相关的文档并排名返回。BM25 并非一个突然出现的新算法而是基于经典的 TF-IDF 框架经过多年研究和改进从BM1到BM15等后在20世纪80-90年代形成的更为精确和健壮的版本。因此理解BM25最好从TF-IDF开始。TF-IDF 由两个部分组成TF词频一个词在当前文档中出现的次数越多说明该词对当前文档越重要。TF(单词, 文档) 单词在文档中出现的次数IDF逆文档频率一个词在整个文档集合中出现的次数越少说明这个词越有区分度越重要。IDF(单词) log(文档总数 / (包含该词的文档数 1))TF-IDF得分 TF × IDF这个公式的直觉是一个词的重要性与它在当前文档中出现的次数成正比与它在所有文档中出现的次数成反比。TF-IDF的缺陷文档长度不敏感一篇1000字的文章出现5次“苹果”和一篇50字的短文出现5次“苹果”TF值相同。但显然短文中的“苹果”密度更高可能更相关。TF线性增长问题一个词出现100次并不代表它比出现10次相关100倍。相关性不会随词频无限线性增长应该有上限饱和点。BM25 算法基本思想TF-IDF 的改进BM25 通过对文档中的每个词项引入饱和函数saturation function和文档长度因子改进了 TF-IDF 的计算。让算法在衡量词与文档相关性时更加精准。饱和函数在 BM25 中对于词项的出现次数TF引入了一个饱和函数来调整其权重。这是为了防止某个词项在文档中出现次数过多导致权重过大。在文档中某些词可能出现次数过多如果直接按照 TF-IDF 计算这些词的权重会过大可能会掩盖其他重要词的作用。BM25 算法引入饱和函数来调整词项出现次数TF的权重有效避免了某个词项权重过高的问题使得算法能更合理地评估每个词对文档相关性的贡献。文档长度因子BM25 考虑了文档的长度引入了文档长度因子使得文档长度对权重的影响不是线性的。这样可以更好地适应不同长度的文档。不同文档长度差异很大如果不考虑文档长度短文档可能因为词频较低在检索中处于劣势。BM25 引入的文档长度因子使得文档长度对权重的影响不再是简单的线性关系。它会根据文档的平均长度对不同长度文档中的词权重进行调整让算法能更好地适应各种长度的文档提高检索的公平性和准确性。BM25 的优缺点优点非监督学习BM25是一个无监督算法不需要人工标注的相关性数据即可直接使用简单高效。效果卓越在传统关键字匹配的检索任务中效果非常好多年来是学术研究和工业界实践的黄金标准。可解释性强得分由明确的公式计算可以分析每个词对最终得分的贡献易于理解和调试。计算高效可以建立倒排索引进行加速适合大规模文档集合的快速检索。缺点语义鸿沟和所有基于词袋模型的方法一样BM25无法理解语义。例如查询“轿车”无法匹配包含“汽车”但未出现“轿车”的文档。它无法理解同义词、上下位词等语义关系。词汇不匹配对拼写错误、缩写、词形变化等比较敏感。缺乏深层语义理解无法捕捉词语之间复杂的上下文关系。现代搜索引擎的实践通常采用 “混合检索” 策略结合两者的优点召回先用BM25等传统方法从海量文档中快速召回一批候选文档。精排再用BGE-M3这类深度模型对召回的候选文档进行更精细的语义重排选出最相关的结果。