BM25 (Best Matching 25) 是一种用于全文搜索的排名算法,用于确定文档与给定查询的相关性。它通过更好地平衡词频(查询词在文档中出现的频率)和文档长度来改进像 TF-IDF 这样的早期方法。核心思想是根据文档内容与搜索词的匹配程度对文档进行评分,同时避免过度优先考虑非常长或非常短的文档。这使得 BM25 成为搜索引擎和数据库中一种强大且广泛采用的相关性排名方法。
BM25 使用两个主要组成部分计算相关性:词频饱和度和文档长度归一化。词频饱和度确保词频的影响不会过度增长——例如,一个词在文档中出现 10 次的重要性不会是一个词出现 1 次的 10 倍。相反,BM25 应用阻尼效应(由参数k1控制)来防止过度加权。文档长度归一化根据文档相对于语料库中平均大小的大小调整分数。包含所有查询词的较短文档将比包含相同词的较长文档排名更高,因为较短的文本被认为更集中。像b这样的参数微调这种归一化——设置b=0禁用它,而b=1应用完全归一化。
开发人员在 Elasticsearch、Apache Lucene 等系统以及支持全文搜索的数据库中使用 BM25。 例如,搜索“机器学习”可能会优先考虑一篇 500 字的博客文章,该博客文章解释了基础知识,而不是一篇 10,000 字的教科书章节,该章节多次提到该术语,但涵盖了更广泛的主题。 BM25 的灵活性允许针对特定数据集进行调整——调整k1和b可以优化技术文档与社交媒体帖子的结果。 其效率和适应性使其成为许多搜索实现中的默认选择,有效地平衡了相关性和计算成本。