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.10.0.tar.gz (96.0 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.10.0-py3-none-any.whl (115.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: zvec_db-0.10.0.tar.gz
  • Upload date:
  • Size: 96.0 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.10.0.tar.gz
Algorithm Hash digest
SHA256 0d99f3008cd4d72cb0077e465b7dbd3dd1711f337ebff2bc1a1ff5722f76a705
MD5 e0ee5d232e48030b802dbe1560366699
BLAKE2b-256 8288b005c8864af8a4ce6849c3fded5ea50ff1977bc8f7d1e15fb94cd271b94d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zvec_db-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 115.5 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.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dbf488e4f7c69c720da82d6989147e10dc5e82912d229bff8eceaf158c00e7a3
MD5 4c3c3c9e56596c89280a7c5b9781e390
BLAKE2b-256 cdcf0ff6e33c57ddc232ac2ce134bd64dc9ab8b6c2b8c0b8a6957c377ed9ffd7

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