xhluca/bm25s

Fast BM25 search in Python, powered by Numpy and Numba

What it solves

bm25s は、レキシカル検索とテキスト取得に使用される BM25 ランキング関数の超高速 Python 実装です。クエリに基づくドキュメントのランク付けを大幅に高速化することで、既存の Python ライブラリのパフォーマンスボトルネックを解消し、多くのユースケースで Elasticsearch のような重厚な検索サービスの代替手段となります。

How it works

このライブラリは Numpy とスパース行列を活用し、すべてのドキュメントトークンのスコアを事前に計算して保存します。このアプローチにより、クエリ時のスコアリングが極めて高速になります。また、numba によるオプションの JIT コンパイルをサポートし、より大規模なデータセットでさらなる高速化を実現します。さらに、インデックスをフルメモリにロードせずに使用できるメモリマッピング (mmap) オプションも提供します。

Who it’s for

Java や PyTorch のオーバーヘッドなしに、Python だけで高速なキーワードベースのドキュメント取得を必要とする検索サービス、RAG(Retrieval‑Augmented Generation)パイプライン、またはあらゆるアプリケーションの開発者向けに設計されています。

Highlights

  • High Performance: 主流の Python BM25 実装に比べて桁違いの速度向上を実現。
  • Low Dependency: Numpy のみで動作する純粋な Python 実装。Java や PyTorch は不要。
  • Flexible API: Robertson、ATIRE、BM25L、BM25+、Lucene など多様な BM25 バリアントとカスタマイズ可能なトークナイゼーションをサポート。
  • Tooling: インデックス作成と検索のためのコマンドラインインターフェース(CLI)を含み、Model Context Protocol (MCP) サーバーを内蔵してインデックスを LLM 用ツールとして公開。
  • Ecosystem Integration: Hugging Face Hub を通じたインデックスの保存・ロードをネイティブにサポート。