xhluca/bm25s

Fast BM25 search in Python, powered by Numpy and Numba

What it solves

bm25s 是一个超高速的 Python 实现 BM25 排序函数,用于词汇搜索和文本检索。它通过提供显著更快的文档排序方式,解决了现有 Python 库的性能瓶颈,使其在许多使用场景下成为 Elasticsearch 等重型搜索服务的可行替代方案。

How it works

该库利用 Numpy 与稀疏矩阵来存储所有文档 token 的即时计算分数。这种方法让查询时的评分极为快速。它还支持通过 numba 进行可选的 JIT 编译,以在更大数据集上获得额外加速,并提供内存映射 (mmap) 选项,允许在不占用全部系统内存的情况下加载索引。

Who it’s for

它面向构建搜索服务、RAG(检索增强生成)流水线,或任何需要在 Python 中快速进行基于关键字的文档检索且不想承担 Java 或 PyTorch 开销的应用开发者。

Highlights

  • High Performance: 声称相较于流行的 Python BM25 实现有数量级的速度提升。
  • Low Dependency: 纯 Python 实现,依赖 Numpy;无需 Java 或 PyTorch。
  • Flexible API: 支持多种 BM25 变体(Robertson、ATIRE、BM25L、BM25+、Lucene)和可自定义的分词。
  • Tooling: 包含命令行界面(CLI)用于索引和搜索,并内置 Model Context Protocol (MCP) 服务器,将索引作为工具提供给 LLM。
  • Ecosystem Integration: 原生支持通过 Hugging Face Hub 保存和加载索引。