三十年前的BM25算法凭借其毫秒级响应、完美可解释性和稳定性能,在人工智能时代依然是搜索引擎的核心支柱,与神经网络形成优势互补。
先来认识下作者希瓦·贾斯瓦尔,他是一位专注于搜索技术和人工智能实践的技术专家,擅长通过实际项目验证技术方案的可行性。在这篇分享中,他通过亲手构建BM25搜索系统的经历,带我们重新认识这个历久弥新的算法。
什么是BM25算法呢?
它的全称是最佳匹配25算法,是一种基于概率论的文档排名函数。
它的核心思想非常巧妙:
一个文档中出现查询词的次数越多就越相关,但这种相关性是递减的;
同时越是罕见的词汇越能提供更多信息量。
比如文档中出现十次NASA这个词并不代表它比只出现一次的文档相关十倍,而卫星这样的罕见词比的出现更能说明问题。
来看看我的具体实现过程:
我使用Python中的sklearn库获取了1000篇来自三个新闻组的文档,内容涵盖航空航天、计算机图形学和棒球运动。然后使用bert分词器对文档进行预处理,最后使用rank_bm25库构建搜索引擎。核心代码展示如下:
from sklearn.datasets import fetch_20newsgroups
from rank_bm25 import BM25Okapi
from transformers import AutoTokenizer
Load and prep the data
newsgroups = fetch_20newsgroups(
subset="train",
categories=["sci.space", "comp.graphics", "rec.sport.baseball"],
remove=("headers", "footers", "quotes")
)
documents = newsgroups.data[:1000]
Smart tokenization using BERT's tokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokenized_docs = [tokenizer.tokenize(doc.lower()) for doc in documents]
The magic happens here
bm25 = BM25Okapi(tokenized_docs)
这个搜索系统的架构流程非常高效。
当用户输入查询语句比如NASA将新卫星发射入轨道时,系统在短短五毫秒内就能返回排名结果。
在我的测试中,排名前三的文档分别关于约翰霍普金斯大学的TRLAD卫星详情、重力操控与太空区域研究以及科罗拉多大学的臭氧与大气科学研究。值得注意的是这些文档的得分非常接近,分别是16.7853分、16.3620分和16.2479分,这说明BM25算法能够提供非常精细的相关度区分。
通过这个实践项目我获得了几个重要洞察。首先是数据处理流程的高效性,从分词到BM25计算再到排名输出的整个流程非常流畅。其次是评分机制的精细化程度,BM25不是简单判断相关与否而是提供有意义的梯度区分。最后是端到端的可靠性,从原始文本输入到排名结果输出,整个系统能够优雅地处理各种边界情况。
为什么在人工智能大行其道的今天,BM25仍然具有不可替代的价值呢?
我认为有五个关键原因:
首先是速度优势,我的BM25实现能在毫秒级处理查询,而类似的 transformer 模型可能需要数秒。在实际应用中这种差异至关重要,特别是当需要处理每天数百万次查询时。
其次是可解释性这个调试超级能力,我可以清楚理解为什么某个文档排名靠前,比如NASA多次出现卫星这个词在语料库中相对罕见文档长度适中等因素都很明确。而想要解释拥有1750亿参数的模型为什么将某个文档排在首位几乎是不可能的任务。
第三是性能表现的黄金平衡点,BM25在不同领域都保持稳定表现,无论是技术术语如图形渲染、命名实体如NASA和洋基队还是概念性查询如太空探索,它不需要微调或领域适配就能正常工作。
第四是作为完美初筛阶段的价值,现代搜索系统通常使用BM25进行快速初步检索,然后对候选结果进行神经网络的重新排序。
这种混合方法既保证了BM25的速度和覆盖范围,又结合了AI的细致理解能力。
现实世界的证据也支持这个观点,Elasticsearch使用BM25作为默认评分函数,Apache Solr实现了BM25的多种变体,学术搜索引擎严重依赖BM25,电子商务平台用它进行产品搜索。即使是那些标榜AI驱动搜索的系统,也经常使用BM25承担繁重的工作,而AI只负责最后的润色。
未来的发展方向不是BM25与AI的对立而是两者的结合。最佳架构正在悄然兴起:BM25负责快速广泛的文档过滤,神经网络对候选结果进行深度理解,混合评分系统结合词汇和语义信号。这样就能以初创公司友好的成本实现谷歌质量的搜索。
BM25不会消失的原因很明确:不是每个查询都需要或负担得起完整的神经处理;企业搜索需要可预测和可调试的系统;BM25与AI的结合比单独使用任何一种都更有效;BM25的新变体和改进持续涌现。经过这次实践我确信轻视经典信息检索技术是个错误,这个算法三十年的历史不是停滞的标志,而是其基本合理性的证明。
未来的最佳搜索系统不会用AI取代BM25,而是会使用BM25使AI变得实用高效和可靠。如果你也想尝试,我上面分享的实现代码是个很好的起点。用不同的数据集进行实验,调整参数,你就会明白为什么这个老算法仍然支撑着现代网络。