tencent/EVIE-4.5B

Model

πŸ† EVIE: The Most Accurate and Lightweight Visual Document Retriever

39

41 commits

2 repos using this model

1 linked in READMEs

updated Oct 9, 2026

See the code

README

πŸ† EVIE: The Most Accurate and Lightweight Visual Document Retriever

Evidence-Vector-Informed Embedding (EVIE)

ViDoRe Leaderboard SOTA Papers with Code SOTA

arXiv License GitHub Hugging Face 4.5B Hugging Face 8B Backbone Storage

High-Precision Late-Interaction Retrieval β€’ Dynamic Prefix-MRL (64D–2048D) β€’ Training-Free HAC Token Compression

πŸ€— EVIE-4.5B (Prefix-MRL & HAC) Β β€’Β  πŸ€— EVIE-8B (Flagship Teacher) Β β€’Β  πŸ™ GitHub: Tencent/EVIE Β β€’Β  πŸ“„ Paper: arXiv:2610.11553


πŸ“’ Release Announcement: All model weights, training pipelines, token compression algorithms (HAC), and evaluation suites have been fully open-sourced in this repository. The technical report is available on arXiv: EVIE: Evidence-Vector-Informed Embeddings for Visual Document Retrieval.


🌟 Highlights

  • Top-Tier Benchmark Performance: 66.75 on ViDoRe V3 for EVIE-8B and 66.02 for EVIE-4.5B with single-projection Prefix-MRL.
  • ⚑ Prefix-MRL Elasticity: Single 2048D linear projection. Freely truncate at runtime into ${64, 128, 256, 512, 1024, 2048}$ dimensions without separate models.
  • πŸ“¦ Ultra-Compact Index (HAC): Training-free Hierarchical Agglomerative Clustering compresses token counts from ~750 down to 32 vectors/page, slashing index storage to 3.81 GiB per million pages.
  • 🌐 138 Multilingual Tasks Evaluated: Thoroughly evaluated across ViDoRe V1, V2, V3, and JinaVDR across 4 metric families (nDCG, Recall, MAP, MRR @1/5/10).
  • πŸ”¬ ARD Distillation Recipe: Anchor-preserving, capacity-aware relation distillation reproducing full student training from the 8B teacher.

🧠 Architecture & Technical Highlights

 Query Text  ────────► ColQwen3.5 (BiDir Attention) ────► Elastic Multi-Vectors (64D–2048D)
                                                                    β”‚
                                                           MaxSim Matching
                                                                    β”‚
 Doc Image   ────────► ColQwen3.5 (Vision Encoder)  ────► HAC Compression ──► 32 Vectors / Page
  • Late-Interaction Multi-Vector Paradigm: Unlike dense single-vector retrieval that collapses high-resolution document pages into a single point, EVIE preserves fine-grained visual details (complex tables, layout structures, charts, and small typography) through token-level representations, scoring relevance via late-interaction MaxSim:

$$ S(Q, D) = \sum_{i=1}^{|Q|} \max_{j=1}^{|D|} (q_i \cdot d_j) $$

  • Prefix-MRL (Single-Head Elastic Representation): EVIE-4.5B introduces single-projection Prefix-MRL. A single 2048D linear projection natively supports runtime truncation down to {64, 128, 256, 512, 1024, 2048} dimensions without maintaining multiple heads or separate checkpoints.
  • ARD (Anchor-preserving Relation Distillation): The 4.5B student is distilled from the 8B teacher using token-relation topological geometry, hard-negative margin calibration, and anchor-preserving alignment, maintaining peak retrieval accuracy even under low-dimensional prefixes.
  • HAC Token Compression (Hierarchical Agglomerative Clustering): A plug-and-play, training-free token reduction algorithm that aggregates visual patch tokens into 32 or 64 semantic centroids in joint feature-spatial space, reducing 1M-page index footprints to as little as 3.81 GiB.

πŸ† ViDoRe V3 Leaderboard

Official ranking on the ViDoRe leaderboard (ViDoRe V3, Mean Task).

RankModelParametersMean (Task)
πŸ₯‡ #1tencent/EVIE-8B8.4B66.24
πŸ₯ˆ #2tencent/EVIE-4.5B4.5B65.70
#3webAI-ColVec1.1-8b8.4B64.95
#4VultronRetrieverPrime-Qwen3.5-8B8.4B64.26
#5webAI-ColVec1.1-4b4.5B63.90
#6VultronRetrieverCore-Qwen3.5-4.5B4.5B63.57

πŸ“Š Comprehensive ViDoRe Leaderboard Comparison

Performance comparison across modern multi-vector late-interaction visual document retrievers on ViDoRe:

RankModelBase ModelParamEmbed DimViDoRe V1 (nDCG@5)ViDoRe V2 (nDCG@5)ViDoRe V3 (nDCG@10)
πŸ₯‡EVIE-8BQwen3.5-9B8.41B4096D92.1874.2366.75
πŸ₯ˆEVIE-4.5BQwen3.5-4B4.61B64–2048D Prefix-MRL92.0773.3866.02
πŸ₯‰EVIE-Preview-4.5BQwen3.5-4B4.54B128D91.7370.8765.36
4webAI-ColVec1.1-8bQwen2.5-VL8.40B640D91.3065.8265.32
5VultronRetrieverPrime-8BQwen3.5-9B8.40B320D92.0868.1864.26
6webAI-ColVec1.1-4bQwen2.5-VL4.54B640D90.4963.6063.90
7VultronRetrieverCore-4.5BQwen3.5-4B4.50B320D92.2166.1263.57
8nemotron-colembed-vl-8b-v2Nemotron-8B8.80B4096D92.6565.1663.54
9tomoro-colqwen3-embed-8bQwen2.5-VL8.00B320D90.7665.4061.60
10nemotron-colembed-vl-4b-v2Nemotron-4B4.80B2560D91.6264.4961.42
11athrael-soju/colqwen3.5-4.5B-v3Qwen3.5-4B4.60B128D91.5464.2561.46
12tomoro-colqwen3-embed-4bQwen2.5-VL4.00B320D90.5764.6960.16
13VultronRetrieverFlash-0.8BQwen3.5-0.8B0.85B320D88.1560.3656.16

πŸ” ViDoRe V3 Per-Domain Breakdown (nDCG@10)

ModelAvgCompSciEnergyFinance ENFinance FRHRIndustrialPharmaPhysics
EVIE-8B66.7581.8672.5171.2356.4069.2959.7770.8152.11
EVIE-4.5B66.0281.7272.3270.0054.9067.8259.4070.2751.69
webAI-ColVec1.1-8b65.3280.0870.1271.9054.8768.5557.6567.8851.50
nemotron-colembed-vl-8b-v263.5479.3069.8267.2951.5466.3256.0367.1950.84
VultronRetrieverPrime-8B64.2679.8070.3069.0054.5066.8057.4068.2051.70
VultronRetrieverCore-4.5B63.5779.8069.2068.9052.0066.1056.1067.5050.20
tomoro-colqwen3-embed-8b61.6075.3568.4165.0849.1063.9854.4166.3650.13

🎯 Prefix-MRL Elastic Multi-Vector Head

EVIE-4.5B embeds document and query tokens with a single 2048D linear projection head trained via ARD. You can truncate the channel dimension on-the-fly without maintaining different models:

Full Projection (2048D)  [========================================================] 66.02
Prefix 1024D             [============================]                             65.94
Prefix 512D              [==============]                                           65.90
Prefix 256D              [=======]                                                  65.68
Prefix 128D              [===]                                                      65.27
Prefix 64D               [=]                                                        64.51
DimensionBytes / VectorViDoRe V1ViDoRe V2ViDoRe V3JinaVDR138-Task Avg4
64128 B92.1673.1864.5181.0077.71
128256 B92.2873.3765.2781.8378.18
256512 B92.2073.8365.6882.0978.45
5121 KiB92.3874.5365.9082.2778.77
10242 KiB92.3974.5365.9482.4378.82
20484 KiB92.5374.9166.0282.4878.98

πŸ—œοΈ Token Compression (HAC)

Raw late-interaction representations keep all visual patch vectors (~750 vectors/page), requiring substantial storage. EVIE integrates Hierarchical Agglomerative Clustering (HAC) in a joint semantic-position space to cluster page tokens at indexing time:

$$ z = \text{L2}\left[(1-w)\text{L2}(v) + w p\right], \quad \mu_c = \text{L2}\left(\text{mean}_{i \in c} v_i\right) $$

Production Ready SKUs

SKUPayload / PageIndex Size (1M Pages)Vectors / PageViDoRe V1ViDoRe V2ViDoRe V3Avg4
d64 K324 KiB3.81 GiB3289.2767.8359.5873.47
d64 K648 KiB7.63 GiB6490.6370.7162.0675.57
d128 K328 KiB7.63 GiB3290.0069.4561.4074.87

πŸ“‹ Complete 138-Task Evaluation Matrix

Protocol paired-all-pages-dedup+process_queries+ndcg2r-20260827 ($\text{MVT} = 1024$, bidirectional attention):

MetricViDoRe V1ViDoRe V2ViDoRe V3JinaVDR4-Board Macro Avg
nDCG@188.3572.7661.1674.2674.13
nDCG@592.0773.3863.3981.5777.60
nDCG@1092.5374.9166.0282.4878.98
Recall@188.3536.7330.1474.2657.37
Recall@594.9565.5958.0687.3976.50
Recall@1096.3676.5669.6790.1783.19
MAP@188.3573.1865.0374.2675.20
MAP@591.0966.5255.0279.6173.06
MAP@1091.2966.2555.5079.9973.25
MRR@188.3573.1865.0374.2675.20
MRR@591.0981.6674.7679.6181.78
MRR@1091.2982.1175.4379.9982.20

⚑ Quick Start

ColPali Engine

Installation

git clone https://github.com/Tencent/EVIE.git
cd EVIE
pip install -r requirements.txt
export PYTHONPATH="$(pwd)/colpali${PYTHONPATH:+:$PYTHONPATH}"

Self-Contained Python Inference

import torch
from PIL import Image
from colpali_engine.models import ColQwen3_5, ColQwen3_5Processor
from colpali_engine.models.qwen3_5.colqwen3_5.modeling_colqwen3_5 import set_active_head

model_id = "tencent/EVIE-4.5B"

# 1. Load model with FlashAttention and bidirectional attention
model = ColQwen3_5.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="cuda",
    attn_implementation="flash_attention_2",
).eval()
model.enable_bidirectional_attention()

# 2. Select any Matryoshka head: 64, 128, 256, 512, 1024, or 2048
set_active_head(model, 128)

# 3. Process query and document image
processor = ColQwen3_5Processor.from_pretrained(model_id)
images = [Image.open("examples/demo/pages/q3_revenue.png").convert("RGB")]
queries = ["What is the total quarterly revenue?"]

image_batch = processor.process_images(images).to(model.device)
query_batch = processor.process_queries(queries).to(model.device)

# 4. Generate multi-vector representations and late-interaction score
with torch.inference_mode():
    image_embeddings = model(**image_batch)
    model.rope_deltas = None  # Reset RoPE deltas before text query forward
    query_embeddings = model(**query_batch)

scores = processor.score(query_embeddings, image_embeddings)
print("Late-interaction MaxSim Relevance Score:", scores)

Sentence Transformers

pip install "sentence-transformers[image] @ git+https://github.com/huggingface/sentence-transformers.git"
from sentence_transformers import MultiVectorEncoder

model = MultiVectorEncoder("tencent/EVIE-4.5B")

queries = [
    "What is the variable represented on the y-axis of the graph?",
    "Total outlay is maximum in which year?",
]
documents = [
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc1.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc2.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc3.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc4.jpg",
]

query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings[0].shape, document_embeddings[0].shape)
# torch.Size([23, 2048]) torch.Size([991, 2048])

scores = model.similarity(query_embeddings, document_embeddings)
print(scores)
# tensor([[17.2500,  7.6084,  6.7920,  4.8398],
#         [ 4.5312, 12.7812,  4.3530,  4.2368]])

Documents can be URLs, local image paths, or PIL.Image objects. The example returns the full 2048-dimensional token embeddings. Scores can vary slightly with dtype and attention backend. To use a smaller Prefix-MRL dimension, slice and renormalize:

from torch.nn.functional import normalize

dimension = 128
query_embeddings = [normalize(embedding[..., :dimension], dim=-1) for embedding in query_embeddings]
document_embeddings = [normalize(embedding[..., :dimension], dim=-1) for embedding in document_embeddings]
scores = model.similarity(query_embeddings, document_embeddings)

πŸ“‚ Repository Layout

EVIE/
β”œβ”€β”€ model.safetensors         # EVIE-4.5B weights (safetensors)
β”œβ”€β”€ config.json               # Model configuration (Prefix-MRL, max 2048)
β”œβ”€β”€ processor_config.json     # Multimodal processor config
β”œβ”€β”€ infer.py                  # Standalone inference & scoring CLI
β”œβ”€β”€ colpali/                  # ColQwen3.5 + Prefix-MRL + ARD
β”œβ”€β”€ code/
β”‚   β”œβ”€β”€ teacher/              # EVIE-8B training arms and soup merging
β”‚   β”œβ”€β”€ student/              # EVIE-4.5B Prefix-MRL / ARD distillation
β”‚   β”œβ”€β”€ shared/               # Data loaders, adapter merges, and 138-task eval harness
β”‚   └── compress/             # Training-free HAC token compression pipeline
β”œβ”€β”€ examples/demo/            # 8-page retrieval demo (run.sh)
└── env.sh.example            # Environment variables template

πŸ”¬ Training & Distillation Reproduction

Student training executes Prefix-MRL plus ARD: capacity-aware relation distillation and margin distillation against frozen EVIE-8B, with a Preview-anchor term on the 128D prefix:

cp env.sh.example env.sh
source env.sh

# Step 1: Train EVIE-8B teacher arms and merge
bash code/teacher/run.sh

# Step 2: Distill EVIE-4.5B student with ARD loss
export TEACHER_DIR=../Evie-8B
bash code/student/run.sh

# Step 3: Run comprehensive 138-task evaluation
MODEL_DIR=. RUN_NAME=evie-4.5b bash code/shared/eval_run.sh

🧩 Community Resources

ProjectWhat it doesLink
ColNanoVDR150M text-only query encoder distilled from EVIE-4.5B. Supports all Prefix-MRL widths and works with existing EVIE indexes, including HAC-compressed ones, so text queries can be encoded on CPU.nanovdr/ColNanoVDR-Q-Ettin150M-EVIE45B-2048-ML

Community-contributed; not maintained or evaluated by the EVIE team.


πŸ“š Citation

@misc{wang2026evie,
  title         = {EVIE: Evidence-Vector-Informed Embeddings for Visual Document Retrieval},
  author        = {Zifei Wang and Wei Wen and Qiang Ji and Qian-Wen Zhang and Ruizhi Qiao and Xing Sun},
  year          = {2026},
  eprint        = {2610.11553},
  archivePrefix = {arXiv},
  primaryClass  = {cs.IR},
  url           = {https://arxiv.org/abs/2610.11553}
}

πŸ“„ License

This repository is licensed under the Apache-2.0 License.


πŸ‘₯ Authors

NameRoleAffiliationContact
Zifei WangAuthorTencent IMA Product Center[email protected]
Wei WenAuthor & CorrespondingTencent Youtu Lab[email protected]
colbert
colpali-engine
late-interaction
matryoshka
multi-vector
qwen3_5
safetensors
sentence-transformers
token-compression
vidore
vision-language
visual-document-retrieval

tencent/EVIE-4.5B

Model

πŸ† EVIE: The Most Accurate and Lightweight Visual Document Retriever

39

41 commits

2 repos using this model

1 linked in READMEs

updated Oct 9, 2026

See the code

README

πŸ† EVIE: The Most Accurate and Lightweight Visual Document Retriever

Evidence-Vector-Informed Embedding (EVIE)

ViDoRe Leaderboard SOTA Papers with Code SOTA

arXiv License GitHub Hugging Face 4.5B Hugging Face 8B Backbone Storage

High-Precision Late-Interaction Retrieval β€’ Dynamic Prefix-MRL (64D–2048D) β€’ Training-Free HAC Token Compression

πŸ€— EVIE-4.5B (Prefix-MRL & HAC) Β β€’Β  πŸ€— EVIE-8B (Flagship Teacher) Β β€’Β  πŸ™ GitHub: Tencent/EVIE Β β€’Β  πŸ“„ Paper: arXiv:2610.11553


πŸ“’ Release Announcement: All model weights, training pipelines, token compression algorithms (HAC), and evaluation suites have been fully open-sourced in this repository. The technical report is available on arXiv: EVIE: Evidence-Vector-Informed Embeddings for Visual Document Retrieval.


🌟 Highlights

  • Top-Tier Benchmark Performance: 66.75 on ViDoRe V3 for EVIE-8B and 66.02 for EVIE-4.5B with single-projection Prefix-MRL.
  • ⚑ Prefix-MRL Elasticity: Single 2048D linear projection. Freely truncate at runtime into ${64, 128, 256, 512, 1024, 2048}$ dimensions without separate models.
  • πŸ“¦ Ultra-Compact Index (HAC): Training-free Hierarchical Agglomerative Clustering compresses token counts from ~750 down to 32 vectors/page, slashing index storage to 3.81 GiB per million pages.
  • 🌐 138 Multilingual Tasks Evaluated: Thoroughly evaluated across ViDoRe V1, V2, V3, and JinaVDR across 4 metric families (nDCG, Recall, MAP, MRR @1/5/10).
  • πŸ”¬ ARD Distillation Recipe: Anchor-preserving, capacity-aware relation distillation reproducing full student training from the 8B teacher.

🧠 Architecture & Technical Highlights

 Query Text  ────────► ColQwen3.5 (BiDir Attention) ────► Elastic Multi-Vectors (64D–2048D)
                                                                    β”‚
                                                           MaxSim Matching
                                                                    β”‚
 Doc Image   ────────► ColQwen3.5 (Vision Encoder)  ────► HAC Compression ──► 32 Vectors / Page
  • Late-Interaction Multi-Vector Paradigm: Unlike dense single-vector retrieval that collapses high-resolution document pages into a single point, EVIE preserves fine-grained visual details (complex tables, layout structures, charts, and small typography) through token-level representations, scoring relevance via late-interaction MaxSim:

$$ S(Q, D) = \sum_{i=1}^{|Q|} \max_{j=1}^{|D|} (q_i \cdot d_j) $$

  • Prefix-MRL (Single-Head Elastic Representation): EVIE-4.5B introduces single-projection Prefix-MRL. A single 2048D linear projection natively supports runtime truncation down to {64, 128, 256, 512, 1024, 2048} dimensions without maintaining multiple heads or separate checkpoints.
  • ARD (Anchor-preserving Relation Distillation): The 4.5B student is distilled from the 8B teacher using token-relation topological geometry, hard-negative margin calibration, and anchor-preserving alignment, maintaining peak retrieval accuracy even under low-dimensional prefixes.
  • HAC Token Compression (Hierarchical Agglomerative Clustering): A plug-and-play, training-free token reduction algorithm that aggregates visual patch tokens into 32 or 64 semantic centroids in joint feature-spatial space, reducing 1M-page index footprints to as little as 3.81 GiB.

πŸ† ViDoRe V3 Leaderboard

Official ranking on the ViDoRe leaderboard (ViDoRe V3, Mean Task).

RankModelParametersMean (Task)
πŸ₯‡ #1tencent/EVIE-8B8.4B66.24
πŸ₯ˆ #2tencent/EVIE-4.5B4.5B65.70
#3webAI-ColVec1.1-8b8.4B64.95
#4VultronRetrieverPrime-Qwen3.5-8B8.4B64.26
#5webAI-ColVec1.1-4b4.5B63.90
#6VultronRetrieverCore-Qwen3.5-4.5B4.5B63.57

πŸ“Š Comprehensive ViDoRe Leaderboard Comparison

Performance comparison across modern multi-vector late-interaction visual document retrievers on ViDoRe:

RankModelBase ModelParamEmbed DimViDoRe V1 (nDCG@5)ViDoRe V2 (nDCG@5)ViDoRe V3 (nDCG@10)
πŸ₯‡EVIE-8BQwen3.5-9B8.41B4096D92.1874.2366.75
πŸ₯ˆEVIE-4.5BQwen3.5-4B4.61B64–2048D Prefix-MRL92.0773.3866.02
πŸ₯‰EVIE-Preview-4.5BQwen3.5-4B4.54B128D91.7370.8765.36
4webAI-ColVec1.1-8bQwen2.5-VL8.40B640D91.3065.8265.32
5VultronRetrieverPrime-8BQwen3.5-9B8.40B320D92.0868.1864.26
6webAI-ColVec1.1-4bQwen2.5-VL4.54B640D90.4963.6063.90
7VultronRetrieverCore-4.5BQwen3.5-4B4.50B320D92.2166.1263.57
8nemotron-colembed-vl-8b-v2Nemotron-8B8.80B4096D92.6565.1663.54
9tomoro-colqwen3-embed-8bQwen2.5-VL8.00B320D90.7665.4061.60
10nemotron-colembed-vl-4b-v2Nemotron-4B4.80B2560D91.6264.4961.42
11athrael-soju/colqwen3.5-4.5B-v3Qwen3.5-4B4.60B128D91.5464.2561.46
12tomoro-colqwen3-embed-4bQwen2.5-VL4.00B320D90.5764.6960.16
13VultronRetrieverFlash-0.8BQwen3.5-0.8B0.85B320D88.1560.3656.16

πŸ” ViDoRe V3 Per-Domain Breakdown (nDCG@10)

ModelAvgCompSciEnergyFinance ENFinance FRHRIndustrialPharmaPhysics
EVIE-8B66.7581.8672.5171.2356.4069.2959.7770.8152.11
EVIE-4.5B66.0281.7272.3270.0054.9067.8259.4070.2751.69
webAI-ColVec1.1-8b65.3280.0870.1271.9054.8768.5557.6567.8851.50
nemotron-colembed-vl-8b-v263.5479.3069.8267.2951.5466.3256.0367.1950.84
VultronRetrieverPrime-8B64.2679.8070.3069.0054.5066.8057.4068.2051.70
VultronRetrieverCore-4.5B63.5779.8069.2068.9052.0066.1056.1067.5050.20
tomoro-colqwen3-embed-8b61.6075.3568.4165.0849.1063.9854.4166.3650.13

🎯 Prefix-MRL Elastic Multi-Vector Head

EVIE-4.5B embeds document and query tokens with a single 2048D linear projection head trained via ARD. You can truncate the channel dimension on-the-fly without maintaining different models:

Full Projection (2048D)  [========================================================] 66.02
Prefix 1024D             [============================]                             65.94
Prefix 512D              [==============]                                           65.90
Prefix 256D              [=======]                                                  65.68
Prefix 128D              [===]                                                      65.27
Prefix 64D               [=]                                                        64.51
DimensionBytes / VectorViDoRe V1ViDoRe V2ViDoRe V3JinaVDR138-Task Avg4
64128 B92.1673.1864.5181.0077.71
128256 B92.2873.3765.2781.8378.18
256512 B92.2073.8365.6882.0978.45
5121 KiB92.3874.5365.9082.2778.77
10242 KiB92.3974.5365.9482.4378.82
20484 KiB92.5374.9166.0282.4878.98

πŸ—œοΈ Token Compression (HAC)

Raw late-interaction representations keep all visual patch vectors (~750 vectors/page), requiring substantial storage. EVIE integrates Hierarchical Agglomerative Clustering (HAC) in a joint semantic-position space to cluster page tokens at indexing time:

$$ z = \text{L2}\left[(1-w)\text{L2}(v) + w p\right], \quad \mu_c = \text{L2}\left(\text{mean}_{i \in c} v_i\right) $$

Production Ready SKUs

SKUPayload / PageIndex Size (1M Pages)Vectors / PageViDoRe V1ViDoRe V2ViDoRe V3Avg4
d64 K324 KiB3.81 GiB3289.2767.8359.5873.47
d64 K648 KiB7.63 GiB6490.6370.7162.0675.57
d128 K328 KiB7.63 GiB3290.0069.4561.4074.87

πŸ“‹ Complete 138-Task Evaluation Matrix

Protocol paired-all-pages-dedup+process_queries+ndcg2r-20260827 ($\text{MVT} = 1024$, bidirectional attention):

MetricViDoRe V1ViDoRe V2ViDoRe V3JinaVDR4-Board Macro Avg
nDCG@188.3572.7661.1674.2674.13
nDCG@592.0773.3863.3981.5777.60
nDCG@1092.5374.9166.0282.4878.98
Recall@188.3536.7330.1474.2657.37
Recall@594.9565.5958.0687.3976.50
Recall@1096.3676.5669.6790.1783.19
MAP@188.3573.1865.0374.2675.20
MAP@591.0966.5255.0279.6173.06
MAP@1091.2966.2555.5079.9973.25
MRR@188.3573.1865.0374.2675.20
MRR@591.0981.6674.7679.6181.78
MRR@1091.2982.1175.4379.9982.20

⚑ Quick Start

ColPali Engine

Installation

git clone https://github.com/Tencent/EVIE.git
cd EVIE
pip install -r requirements.txt
export PYTHONPATH="$(pwd)/colpali${PYTHONPATH:+:$PYTHONPATH}"

Self-Contained Python Inference

import torch
from PIL import Image
from colpali_engine.models import ColQwen3_5, ColQwen3_5Processor
from colpali_engine.models.qwen3_5.colqwen3_5.modeling_colqwen3_5 import set_active_head

model_id = "tencent/EVIE-4.5B"

# 1. Load model with FlashAttention and bidirectional attention
model = ColQwen3_5.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="cuda",
    attn_implementation="flash_attention_2",
).eval()
model.enable_bidirectional_attention()

# 2. Select any Matryoshka head: 64, 128, 256, 512, 1024, or 2048
set_active_head(model, 128)

# 3. Process query and document image
processor = ColQwen3_5Processor.from_pretrained(model_id)
images = [Image.open("examples/demo/pages/q3_revenue.png").convert("RGB")]
queries = ["What is the total quarterly revenue?"]

image_batch = processor.process_images(images).to(model.device)
query_batch = processor.process_queries(queries).to(model.device)

# 4. Generate multi-vector representations and late-interaction score
with torch.inference_mode():
    image_embeddings = model(**image_batch)
    model.rope_deltas = None  # Reset RoPE deltas before text query forward
    query_embeddings = model(**query_batch)

scores = processor.score(query_embeddings, image_embeddings)
print("Late-interaction MaxSim Relevance Score:", scores)

Sentence Transformers

pip install "sentence-transformers[image] @ git+https://github.com/huggingface/sentence-transformers.git"
from sentence_transformers import MultiVectorEncoder

model = MultiVectorEncoder("tencent/EVIE-4.5B")

queries = [
    "What is the variable represented on the y-axis of the graph?",
    "Total outlay is maximum in which year?",
]
documents = [
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc1.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc2.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc3.jpg",
    "https://huggingface.co/datasets/sentence-transformers/example-documents/resolve/main/doc4.jpg",
]

query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings[0].shape, document_embeddings[0].shape)
# torch.Size([23, 2048]) torch.Size([991, 2048])

scores = model.similarity(query_embeddings, document_embeddings)
print(scores)
# tensor([[17.2500,  7.6084,  6.7920,  4.8398],
#         [ 4.5312, 12.7812,  4.3530,  4.2368]])

Documents can be URLs, local image paths, or PIL.Image objects. The example returns the full 2048-dimensional token embeddings. Scores can vary slightly with dtype and attention backend. To use a smaller Prefix-MRL dimension, slice and renormalize:

from torch.nn.functional import normalize

dimension = 128
query_embeddings = [normalize(embedding[..., :dimension], dim=-1) for embedding in query_embeddings]
document_embeddings = [normalize(embedding[..., :dimension], dim=-1) for embedding in document_embeddings]
scores = model.similarity(query_embeddings, document_embeddings)

πŸ“‚ Repository Layout

EVIE/
β”œβ”€β”€ model.safetensors         # EVIE-4.5B weights (safetensors)
β”œβ”€β”€ config.json               # Model configuration (Prefix-MRL, max 2048)
β”œβ”€β”€ processor_config.json     # Multimodal processor config
β”œβ”€β”€ infer.py                  # Standalone inference & scoring CLI
β”œβ”€β”€ colpali/                  # ColQwen3.5 + Prefix-MRL + ARD
β”œβ”€β”€ code/
β”‚   β”œβ”€β”€ teacher/              # EVIE-8B training arms and soup merging
β”‚   β”œβ”€β”€ student/              # EVIE-4.5B Prefix-MRL / ARD distillation
β”‚   β”œβ”€β”€ shared/               # Data loaders, adapter merges, and 138-task eval harness
β”‚   └── compress/             # Training-free HAC token compression pipeline
β”œβ”€β”€ examples/demo/            # 8-page retrieval demo (run.sh)
└── env.sh.example            # Environment variables template

πŸ”¬ Training & Distillation Reproduction

Student training executes Prefix-MRL plus ARD: capacity-aware relation distillation and margin distillation against frozen EVIE-8B, with a Preview-anchor term on the 128D prefix:

cp env.sh.example env.sh
source env.sh

# Step 1: Train EVIE-8B teacher arms and merge
bash code/teacher/run.sh

# Step 2: Distill EVIE-4.5B student with ARD loss
export TEACHER_DIR=../Evie-8B
bash code/student/run.sh

# Step 3: Run comprehensive 138-task evaluation
MODEL_DIR=. RUN_NAME=evie-4.5b bash code/shared/eval_run.sh

🧩 Community Resources

ProjectWhat it doesLink
ColNanoVDR150M text-only query encoder distilled from EVIE-4.5B. Supports all Prefix-MRL widths and works with existing EVIE indexes, including HAC-compressed ones, so text queries can be encoded on CPU.nanovdr/ColNanoVDR-Q-Ettin150M-EVIE45B-2048-ML

Community-contributed; not maintained or evaluated by the EVIE team.


πŸ“š Citation

@misc{wang2026evie,
  title         = {EVIE: Evidence-Vector-Informed Embeddings for Visual Document Retrieval},
  author        = {Zifei Wang and Wei Wen and Qiang Ji and Qian-Wen Zhang and Ruizhi Qiao and Xing Sun},
  year          = {2026},
  eprint        = {2610.11553},
  archivePrefix = {arXiv},
  primaryClass  = {cs.IR},
  url           = {https://arxiv.org/abs/2610.11553}
}

πŸ“„ License

This repository is licensed under the Apache-2.0 License.


πŸ‘₯ Authors

NameRoleAffiliationContact
Zifei WangAuthorTencent IMA Product Center[email protected]
Wei WenAuthor & CorrespondingTencent Youtu Lab[email protected]
colbert
colpali-engine
late-interaction
matryoshka
multi-vector
qwen3_5
safetensors
sentence-transformers
token-compression
vidore
vision-language
visual-document-retrieval