Skip to main content

Utility suite for sparse vectorization and document reranking using zvec

Project description

zvec-db

Version Python 3.12+ License Documentation

Sparse/dense vectorization and document reranking toolkit for zvec.


Quick Start

pip install zvec-db

1. Basic hybrid search with search()

from zvec_db import search, BM25Embedder, SentenceTransformersEmbedder
import zvec

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

# Hybrid search: sparse + dense + FTS
results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    fts_fields="text",
    fusion="auto",
    topk=10,
)

2. Two-stage retrieval with cross-encoder

from zvec_db.rerankers import SentenceTransformerReranker

reranker = SentenceTransformerReranker(
    model_name="cross-encoder/ms-marco-MiniLM-L-6-v2",
    topk=10,
)

results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    fts_fields="text",
    fusion="auto",
    reranker=reranker,
    topk=50,  # Fetch 50 candidates, rerank to 10
)

3. Custom fusion reranker (e.g., RRF)

from zvec_db.rerankers import RrfReranker

fusion_model = RrfReranker(topk=50, rank_constant=60)

results = search(
    collection=collection,
    query="neural networks",
    sparse_fields={"sparse": bm25},
    dense_fields={"dense": dense},
    fusion=fusion_model,  # Pre-instantiated fusion reranker
    topk=50,
)

Parameters: collection, query, sparse_fields, dense_fields, fts_fields, fusion ("auto" | dict | reranker instance | None), weights, reranker, topk, output_fields.

Note: Configure topk and cross_encoder_weight directly on the reranker instance.


Embedders

Sparse (lexical search)

Embedder Description
BM25Embedder Recommended — Standard BM25 scoring
BM25LEmbedder BM25L for documents with variable lengths
BM25PlusEmbedder BM25+ with delta smoothing
TfidfEmbedder TF-IDF weighting
CountEmbedder Simple term counts
DisMaxEmbedder Multi-field search (maximum score)

Example:

from zvec_db import BM25Embedder

bm25 = BM25Embedder(max_features=4096, k1=1.2, b=0.75)
bm25.fit(documents)

# Embed query
query_vector = bm25.embed("machine learning")

# Save/load
bm25.save("bm25.joblib")
bm25_loaded = BM25Embedder().load("bm25.joblib")

Dense (semantic search)

Embedder Description
SentenceTransformersEmbedder Local models (e.g., all-MiniLM-L6-v2)
OpenAIEmbedder OpenAI API (text-embedding-3-small)

Example:

from zvec_db import SentenceTransformersEmbedder

dense = SentenceTransformersEmbedder(model_name="all-MiniLM-L6-v2")
vector = dense.embed("machine learning")

Rerankers

Fusion (combine multiple sources)

Reranker Description
WeightedReranker Weighted score fusion with normalization
RrfReranker Reciprocal Rank Fusion (rank-based)
MultiFieldWeightedReranker Field-based weighted fusion

Example — WeightedReranker:

from zvec_db.rerankers import WeightedReranker

reranker = WeightedReranker(
    schema=collection.schema,
    weights={"sparse": 0.4, "dense": 0.6},
    normalize="auto",
    topk=10,
)
results = reranker.rerank({"sparse": sparse_docs, "dense": dense_docs})

Example — RrfReranker:

from zvec_db.rerankers import RrfReranker

reranker = RrfReranker(topk=10, rank_constant=60)
results = reranker.rerank({"sparse": sparse_docs, "dense": dense_docs})

Cross-Encoder (query + document scoring)

Reranker Description
SentenceTransformerReranker Local cross-encoder models
ClassificationReranker Multi-class classification
OpenAIReranker OpenAI API-based reranking

Example:

from zvec_db.rerankers import SentenceTransformerReranker

reranker = SentenceTransformerReranker(
    model_name="cross-encoder/ms-marco-MiniLM-L-6-v2",
    topk=10,
    cross_encoder_weight=0.8,  # Blend: 80% cross-encoder, 20% fusion
)
results = reranker.rerank({"bm25": docs}, query="machine learning")

Pipeline (chain multiple rerankers)

from zvec_db.rerankers import PipelineReranker, RrfReranker, SentenceTransformerReranker

pipeline = PipelineReranker(
    rerankers=[
        RrfReranker(topk=32, rank_constant=60),  # RRF fusion
        SentenceTransformerReranker(topk=10),    # Cross-encoder
    ],
    topk=10,
    query="neural networks",
)
results = pipeline.rerank({"sparse": sparse_docs, "dense": dense_docs})

Preprocessing

Improve sparse embedding quality with text normalization:

from zvec_db.embedders import BM25Embedder
from zvec_db.preprocessing import NormalizationConfig

config = NormalizationConfig.aggressive(language="english")
bm25 = BM25Embedder(max_features=4096, preprocessing_config=config)
bm25.fit(documents)

Install: pip install "zvec-db[preprocessing]"

Utilities: normalize_text(), stem_word(), remove_stopwords()


Advanced Usage

Manual query building

For full control, use multi_field_queries():

from zvec_db import multi_field_queries

queries = multi_field_queries(
    query_text="neural networks",
    sparse_fields={"sparse_title": bm25, "sparse_content": bm25},
    dense_fields={"dense_title": dense, "dense_content": dense},
    fts_fields=["title", "content"],
)

results = collection.query(queries=queries, topk=10, output_fields=["text"])

FTS with phrase matching

from zvec_db import fts_query

q = fts_query(field_name="title", query="deep learning", match_string="deep learning")
results = collection.query(queries=[q], topk=10)

Documentation

For detailed examples and API reference:


Development

git clone https://github.com/ccdv-ai/zvec-db.git
cd zvec-db
pip install -e ".[dev,test,docs,preprocessing]"

make test   # Run tests
make lint   # black, isort, flake8, mypy
make docs   # Build 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.9.0.tar.gz (95.6 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.9.0-py3-none-any.whl (115.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: zvec_db-0.9.0.tar.gz
  • Upload date:
  • Size: 95.6 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.9.0.tar.gz
Algorithm Hash digest
SHA256 3010d651452f543474a405cc1d31e9b924f22713c10343bab5e13f2beb88160e
MD5 418d996304497d4e0b6170bc1e9fea83
BLAKE2b-256 d99961a24c49e767543a7d65d6a92554e7c93716ba92849b5aa8d18e9b2c2d3e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zvec_db-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 115.0 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.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 98766d236e50129461c70b32dea2e0b14a80355bfd6c51c2650814331aa6f478
MD5 189ba67550f03442bdd63ef1d08fb570
BLAKE2b-256 5736b11a6089aeb56ade8e9d15d949d2d694653ef9ef75d24c98808e8b8c9a3d

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