CoolFace
Modelpublic

nanovdr/NanoVDR-Q-ModernBERT-Qwen3VL8B-4096-ML

sourceHugging Facemitupdated 2mo agoView on Hugging Face
1likes25downloads
Model Card

<p align="center"> <img width="440" src="https://huggingface.co/nanovdr/NanoVDR-Q-DistilBERT-Qwen3VL2B-2048-ML/resolve/main/banner.png" alt="NanoVDR"/> </p>

<h3 align="center">NanoVDR-Q-ModernBERT-Qwen3VL8B-4096-ML: the most accurate query tower for the 4096-d space</h3>

<p align="center"> <a href="https://huggingface.co/nanovdr">Models</a> &nbsp;|&nbsp; <a href="https://github.com/Ryenhails/NanoVDR">Code</a> &nbsp;|&nbsp; <a href="https://arxiv.org/abs/2608.10636">Paper</a> </p>


A 152M text-only encoder that maps a query into the embedding space of Qwen3-VL-Embedding-8B, distilled by pointwise cosine alignment against that teacher's cached query embeddings. The -ML suffix marks the multilingual training mixture: 711K English queries plus 778K MarianMT translations into five Latin-script European languages.

This is the strongest of the three query backbones we distilled, at 2.2x the parameters and 5x the latency of the DistilBERT tower that ships as the default. Take this one when retrieval quality matters more than query latency; take DistilBERT when you are serving many queries per second on CPU.

What it pairs with

A pair is valid when the teacher and the width both match. This tower targets Qwen3-VL-Embedding-8B at 4096-d, so it pairs with:

NanoVDR-D-HiRes-Qwen3VL8B-4096457M document tower, 6 tiles, best quality
NanoVDR-D-Fast-Qwen3VL8B-4096457M document tower, 2 tiles, 2.7x faster indexing
Qwen3-VL-Embedding-8B itselfthe teacher, if you index with it

The 2048-d query towers from the earlier NanoVDR release target a different teacher and width and do not pair with these document towers.

Usage

python
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("nanovdr/NanoVDR-Q-ModernBERT-Qwen3VL8B-4096-ML")
q = model.encode(["What was the revenue growth in Q3 2024?"])   # (1, 4096), L2-normalised

Retrieval is a dot product against page vectors from a matching document tower:

python
from transformers import AutoModel, AutoImageProcessor

doc = AutoModel.from_pretrained("nanovdr/NanoVDR-D-HiRes-Qwen3VL8B-4096", trust_remote_code=True).eval()
proc = AutoImageProcessor.from_pretrained("nanovdr/NanoVDR-D-HiRes-Qwen3VL8B-4096", trust_remote_code=True)
d = doc.encode(pages, proc, batch_size=4)

scores = q @ d.T

Do not add an instruction prefix

Pass the raw query. The teacher's targets were cached with an instruction, but the student was trained to reproduce those targets from the bare query text, and every number below was measured that way. Prepending an instruction at inference moves the input off the distribution the tower was fitted on.

Results

NDCG@5 on ViDoRe. Query side in isolation, scored against teacher-encoded pages, which isolates this tower from document-side error:

v1v2v3Avg
NanoVDR-Q-ModernBERT-Qwen3VL8B-4096-ML85.3665.4051.4367.40
Qwen3-VL-Embedding-8B (teacher)87.3169.7656.0771.05

94.9% of the teacher on the side this tower replaces.

Backbone comparison

All three distilled from the same teacher on the same data, measured under query-side isolation. Latency is one query at batch 1 on an H200, including tokenisation:

BackboneParamsv1v2v3AvgLatency
ModernBERT-base (this model)152M85.3665.4051.4367.4010.61 ms
DistilBERT-base70M84.6864.3050.0966.362.07 ms
BERT-base113M81.8158.5244.5561.634.78 ms

ModernBERT leads DistilBERT by 1.04 average points. Whether that is worth 5x the latency depends on your query volume; the published end-to-end system uses DistilBERT for that reason.

<sub>End-to-end numbers paired with the document towers are published for the DistilBERT tower (61.74 average with HiRes). That pairing has not been measured for this backbone, so the isolation numbers above are what this card claims.</sub>

Reproducibility

Re-encoding the 500 ViDoRe arxivqa queries with this package and scoring against the cached teacher page embeddings:

NDCG@5  teacher queries x teacher pages : 86.91
NDCG@5  student queries x teacher pages : 86.03   (99.0% retention)

The DistilBERT tower reaches 83.77 (96.4%) on the same check.

Training

Objective1 - cos(student, teacher), nothing else
TeacherQwen3-VL-Embedding-8B, frozen, 4096-d
Data1.49M queries (the NanoVDR training set plus MarianMT translations)
OptimizerAdamW, one-cycle, peak LR 5e-4, 3% warmup
Effective batch512
Epochs15

No relevance labels, no negative mining, no contrastive term. Teacher targets are cached once before training, so this tower was trained without the teacher ever running during training.

Limitations

  • —English and five Latin-script European languages. The multilingual portion comes from a MarianMT translation pipeline. Non-Latin scripts such as Chinese, Japanese and Arabic are untested.
  • —Text-only. Image-conditioned queries are out of scope.
  • —Bounded by the teacher. Nothing in the objective lets the student exceed Qwen3-VL-Embedding-8B on the side it replaces.
  • —Slower than the default. 5x the query latency of the DistilBERT tower for 1.04 average points.

Citation

bibtex
@article{distilvdr2026,
  title   = {DistilVDR: A Compact End-to-End Visual Document Retriever
             via Dual-Student Distillation},
  author  = {Liu, Zhuchenyang and Wang, Ziyi and Zhang, Yao and Xiao, Yu},
  journal = {arXiv preprint arXiv:2608.10636},
  year    = {2026}
}

License

MIT.