3 个月前

BM25S:通过积极稀疏打分实现数量级加速的词法搜索

BM25S:通过积极稀疏打分实现数量级加速的词法搜索

摘要

我们提出 BM25S,这是一个基于 Python 的高效 BM25 实现,仅依赖 NumPy 和 SciPy。BM25S 在索引阶段通过预先计算 BM25 分数并将其存储为稀疏矩阵,相较于目前最流行的 Python 框架,速度最高提升达 500 倍。此外,与广泛应用于主流商业产品的高度优化的 Java 实现相比,BM25S 也实现了显著的性能提升。最后,BM25S 通过引入一种新颖的分数偏移(score shifting)方法,将预计算机制扩展至非稀疏版本,精确复现了 Kamphuis 等人(2020)提出的五种 BM25 变体的实现。代码开源地址为:https://github.com/xhluca/bm25s。

代码仓库

基准测试

基准方法指标
retrieval-on-hotpotqaBM25S
Queries per second: 20.88
retrieval-on-hotpotqaElasticsearch
Queries per second: 7.11
retrieval-on-hotpotqaRank-BM25
Queries per second: 0.04
retrieval-on-natural-questionsElasticsearch
Queries per second: 12.16
retrieval-on-natural-questionsRank-BM25
Queries per second: 0.10
retrieval-on-natural-questionsBM25S
Queries per second: 41.85
retrieval-on-quora-question-pairsElasticsearch
Queries per second: 21.8
retrieval-on-quora-question-pairsBM25-PT
Queries per second: 6.49
retrieval-on-quora-question-pairsRank-BM25
Queries per second: 1.18
retrieval-on-quora-question-pairsBM25S
Queries per second: 183.53
text-retrieval-on-climate-feverLucene (BM25S)
nDCG@10: 16.2
text-retrieval-on-dbpediaLucene (BM25S)
nDCG@10: 31.9
text-retrieval-on-feverLucene (BM25S)
nDCG@10: 63.8
text-retrieval-on-hotpotqaLucene (BM25S)
nDCG@10: 62.9
text-retrieval-on-ms-marcoLucene (BM25S)
NDCG@10: 22.8
text-retrieval-on-natural-questionsLucene (BM25S)
NDCG@10: 30.5
text-retrieval-on-nfcorpusLucene (BM25S)
nDCG@10: 31.8
text-retrieval-on-quora-question-pairsLucene (BM25S)
nDCG@10: 78.7
text-retrieval-on-scidocsLucene (BM25S)
nDCG@10: 67.6
text-retrieval-on-scifactLucene (BM25S)
nDCG@10: 15
text-retrieval-on-trec-covidLucene (BM25S)
nDCG@10: 58.9

用 AI 构建 AI

从想法到上线——通过免费 AI 协同编程、开箱即用的环境和市场最优价格的 GPU 加速您的 AI 开发

AI 协同编程
即用型 GPU
最优价格
立即开始

Hyper Newsletters

订阅我们的最新资讯
我们会在北京时间 每周一的上午九点 向您的邮箱投递本周内的最新更新
邮件发送服务由 MailChimp 提供
BM25S:通过积极稀疏打分实现数量级加速的词法搜索 | 论文 | HyperAI超神经