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를 통한 인덱스 저장·로드를 네이티브하게 지원합니다.