Skip to main content

Utility suite for sparse vectorization and document reranking using zvec

Project description

zvec-db

Version Python 3.12+ License Documentation ![Tests](https://img.shields.io/badge/tests-480+ passed-brightgreen.svg)

Sparse/dense vectorization and document reranking toolkit for zvec.

zvec-db provides:

  • 🚀 Hybrid search - Combine sparse (BM25) and dense (semantic) vectors with full-text search
  • 🔄 Score fusion - Weighted fusion and Reciprocal Rank Fusion (RRF)
  • 🎯 Cross-encoder reranking - Two-stage retrieval with local or API-based rerankers
  • 📦 6 sparse embedders - BM25, BM25L, BM25+, TF-IDF, Count, DisMax
  • 🔧 Normalization - Bayesian, minmax, percentile, and arctan-based normalization
  • Native fast path - C++ acceleration for fusion rerankers

Quick Start

pip install zvec-db

Complete Example: Hybrid Search with RerankPipeline

from zvec_db import search, RerankPipeline, ScoreNormalizer, WeightedReranker
from zvec_db.rerankers import SentenceTransformerReranker
from zvec_db.embedders import BM25Embedder, SentenceTransformersEmbedder
import zvec

# 1. Open collection and initialize embedders
collection = zvec.open("./my_collection")
bm25 = BM25Embedder(max_features=4096).load("./bm25.joblib")
dense = SentenceTransformersEmbedder(model_name="all-MiniLM-L6-v2")

# 2. Create rerank pipeline with auto-detection from schema
reranker = RerankPipeline(
    normalizer=ScoreNormalizer(
        method="bayes",
        schema=collection.schema,  # Auto-detect metrics (COSINE, L2, IP)
    ),
    fusion=WeightedReranker(
        weights={"sparse": 0.5, "dense": 0.3, "text": 0.2},
        topk=16,  # Top 16 after fusion
    ),
    cross_encoder=SentenceTransformerReranker(
        model_name="cross-encoder/ms-marco-MiniLM-L-6-v2",
        topk=8,  # Top 8 after cross-encoder
    ),
)

# 3. Search with full pipeline
results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    fts_fields="text",
    reranker=reranker,
    topk=32,  # Fetch 32 candidates
)

for doc in results:
    print(f"{doc.fields['text']} (score: {doc.score:.4f})")

Simple Search (No Reranking)

from zvec_db import search

results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    topk=10,
)

Custom Fusion Only

from zvec_db.rerankers import WeightedReranker

# List weights enable C++ fast path (2-5x faster)
reranker = WeightedReranker(weights=[0.7, 0.3])

results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    reranker=reranker,
)

API Reference

search() Parameters

Parameter Type Description
collection zvec.Collection Collection to search
query str Query text
sparse_fields dict[str, Embedder] Sparse fields (e.g., {"sparse": bm25})
dense_fields dict[str, Embedder] Dense fields (e.g., {"dense": dense})
fts_fields str | list[str] FTS fields
reranker Reranker Reranker instance
topk int Results to return
output_fields list[str] Fields to include

Reranker Types

Type Description
WeightedReranker(weights={...}) Weighted fusion
RrfReranker() Reciprocal Rank Fusion
SentenceTransformerReranker() Cross-encoder
RerankPipeline(normalizer=..., fusion=..., cross_encoder=...) Full pipeline

Embedders

Sparse (lexical): BM25Embedder (recommended), BM25LEmbedder, BM25PlusEmbedder, TfidfEmbedder, CountEmbedder, DisMaxEmbedder

Dense (semantic): SentenceTransformersEmbedder, OpenAIEmbedder

from zvec_db import BM25Embedder, SentenceTransformersEmbedder

bm25 = BM25Embedder(max_features=4096).load("./bm25.joblib")
dense = SentenceTransformersEmbedder(model_name="all-MiniLM-L6-v2")

bm25.save("bm25.joblib")

Rerankers

Fusion: WeightedReranker (weighted sum), RrfReranker (rank-based)

Cross-Encoder: SentenceTransformerReranker, OpenAIReranker

Pipeline: RerankPipeline (normalization + fusion + cross-encoder)

from zvec_db import RerankPipeline, ScoreNormalizer, WeightedReranker
from zvec_db.rerankers import SentenceTransformerReranker

# Full pipeline with schema auto-detection
pipeline = RerankPipeline(
    normalizer=ScoreNormalizer(method="bayes", schema=collection.schema),
    fusion=WeightedReranker(weights={"sparse": 0.7, "dense": 0.3}),
    cross_encoder=SentenceTransformerReranker(topk=10),
)

Performance tip: Use list weights for C++ fast path: WeightedReranker(weights=[0.7, 0.3])


Documentation


License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zvec_db-0.15.0.tar.gz (82.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zvec_db-0.15.0-py3-none-any.whl (105.6 kB view details)

Uploaded Python 3

File details

Details for the file zvec_db-0.15.0.tar.gz.

File metadata

  • Download URL: zvec_db-0.15.0.tar.gz
  • Upload date:
  • Size: 82.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zvec_db-0.15.0.tar.gz
Algorithm Hash digest
SHA256 5738ddb8b5cfa2703de2f3ac1f7e5c246dbb168f0f36f89823f4da85384ef8ea
MD5 e3880279ef484abfdd3eacd911a0c586
BLAKE2b-256 1163b02bcee3850a3b7c115dc6ff7af8463251c4a029d75f120dbb3dbc32d7c3

See more details on using hashes here.

File details

Details for the file zvec_db-0.15.0-py3-none-any.whl.

File metadata

  • Download URL: zvec_db-0.15.0-py3-none-any.whl
  • Upload date:
  • Size: 105.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zvec_db-0.15.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9771daccb3b6c4b5394e497e7ab8115f51e55f53f19bced5bfbe8e605ff8e2bd
MD5 53727c946b345cd2788ff0c2529da2dc
BLAKE2b-256 5fe776c0dad38f16269321cc03a5631c77b3a7b81cfd96a83e4e12c7592f98e8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page