Instructions to use tencent/EVIE-8B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use tencent/EVIE-8B with sentence-transformers:
from sentence_transformers import MultiVectorEncoder model = MultiVectorEncoder("tencent/EVIE-8B") queries = ["Which planet is known as the Red Planet?"] documents = [ "Venus is often called Earth's twin because of its similar size and proximity.", "Mars, known for its reddish appearance, is often referred to as the Red Planet.", "Jupiter, the largest planet in our solar system, has a prominent red spot.", ] query_embeddings = model.encode_query(queries) document_embeddings = model.encode_document(documents) similarities = model.similarity(query_embeddings, document_embeddings) print(similarities) - Notebooks
- Google Colab
- Kaggle
- ๐ EVIE-8B: The Most Accurate Visual Document Retriever
๐ EVIE-8B: The Most Accurate Visual Document Retriever
Evidence-Vector-Informed Embedding (EVIE-8B Flagship Teacher)
4096-Dimensional Token Representation โข Bidirectional Full-Attention โข Teacher for EVIE-4.5B Prefix-MRL
๐ค EVIE-8B (Flagship Teacher) โข ๐ค EVIE-4.5B (Prefix-MRL & HAC) โข ๐ GitHub: Tencent/EVIE
๐ข Release Announcement: All model weights, inference pipelines, and evaluation suites have been fully open-sourced. Full technical details, architectural ablations, and the formal research paper will be updated in an upcoming release. Training code and distillation recipes are available in the Tencent/EVIE repository.
๐ Highlights
- Highest Retrieval Accuracy: 66.75 nDCG@10 on ViDoRe V3, delivering industry-leading visual document retrieval accuracy.
- High-Capacity 4096D Representations: Full per-token multi-vector embeddings preserving fine-grained layout, typography, charts, and table structures.
- Teacher Foundation: Provides capacity-aware relation and margin distillation targets for the lightweight EVIE-4.5B Prefix-MRL model.
- Multi-Benchmark 138-Task Coverage: Thoroughly validated across 138 tasks (ViDoRe V1, V2, V3, and JinaVDR) across 4 standard metric families (nDCG, Recall, MAP, MRR @1/5/10).
๐ง Architecture & Technical Highlights
Query Text โโโโโโโโโบ ColQwen3.5 (BiDir Attention) โโโโโบ 4096D Per-Token Embeddings
โ
MaxSim Matching
โ
Doc Image โโโโโโโโโบ ColQwen3.5 (Vision Encoder) โโโโโบ Full Multi-Vector Patch Embeddings
- Late-Interaction Token Embeddings: Rather than compressing visual documents into an information-lossy single vector, EVIE-8B preserves spatial nuances, typography, and tabular relations with per-token late-interaction representations. Relevance is scored using MaxSim:
- Full Bidirectional Attention: Employs bidirectional self-attention across multimodal vision-text sequences to facilitate cross-modal interaction between visual patch tokens and prompt contexts.
- Foundational Distillation Teacher: Serves as the high-capacity anchor model for training the compact EVIE-4.5B student via topological relation transfer and hard-negative margin supervision (ARD).
๐ ViDoRe V3 Leaderboard
Official ranking on the ViDoRe leaderboard (ViDoRe V3, Mean Task).
| Rank | Model | Parameters | Mean (Task) |
|---|---|---|---|
| ๐ฅ #1 | tencent/EVIE-8B | 8.4B | 66.24 |
| ๐ฅ #2 | tencent/EVIE-4.5B | 4.5B | 65.70 |
| #3 | webAI-ColVec1.1-8b | 8.4B | 64.95 |
| #4 | VultronRetrieverPrime-Qwen3.5-8B | 8.4B | 64.26 |
| #5 | webAI-ColVec1.1-4b | 4.5B | 63.90 |
| #6 | VultronRetrieverCore-Qwen3.5-4.5B | 4.5B | 63.57 |
๐ Comprehensive ViDoRe Leaderboard Comparison
Performance comparison across modern multi-vector late-interaction visual document retrievers on ViDoRe:
| Rank | Model | Base Model | Param | Embed Dim | ViDoRe V1 (nDCG@5) | ViDoRe V2 (nDCG@5) | ViDoRe V3 (nDCG@10) |
|---|---|---|---|---|---|---|---|
| ๐ฅ | EVIE-8B | Qwen3.5-9B | 8.41B | 4096D | 92.18 | 74.23 | 66.75 |
| ๐ฅ | EVIE-4.5B | Qwen3.5-4B | 4.61B | 64โ2048D Prefix-MRL | 92.07 | 73.38 | 66.02 |
| ๐ฅ | EVIE-Preview-4.5B | Qwen3.5-4B | 4.54B | 128D | 91.73 | 70.87 | 65.36 |
| 4 | webAI-ColVec1.1-8b | Qwen2.5-VL | 8.40B | 640D | 91.30 | 65.82 | 65.32 |
| 5 | VultronRetrieverPrime-8B | Qwen3.5-9B | 8.40B | 320D | 92.08 | 68.18 | 64.26 |
| 6 | webAI-ColVec1.1-4b | Qwen2.5-VL | 4.54B | 640D | 90.49 | 63.60 | 63.90 |
| 7 | VultronRetrieverCore-4.5B | Qwen3.5-4B | 4.50B | 320D | 92.21 | 66.12 | 63.57 |
| 8 | nemotron-colembed-vl-8b-v2 | Nemotron-8B | 8.80B | 4096D | 92.65 | 65.16 | 63.54 |
| 9 | tomoro-colqwen3-embed-8b | Qwen2.5-VL | 8.00B | 320D | 90.76 | 65.40 | 61.60 |
| 10 | nemotron-colembed-vl-4b-v2 | Nemotron-4B | 4.80B | 2560D | 91.62 | 64.49 | 61.42 |
| 11 | athrael-soju/colqwen3.5-4.5B-v3 | Qwen3.5-4B | 4.60B | 128D | 91.54 | 64.25 | 61.46 |
| 12 | tomoro-colqwen3-embed-4b | Qwen2.5-VL | 4.00B | 320D | 90.57 | 64.69 | 60.16 |
| 13 | VultronRetrieverFlash-0.8B | Qwen3.5-0.8B | 0.85B | 320D | 88.15 | 60.36 | 56.16 |
๐ ViDoRe V3 Per-Domain Breakdown (nDCG@10)
| Model | Avg | CompSci | Energy | Finance EN | Finance FR | HR | Industrial | Pharma | Physics |
|---|---|---|---|---|---|---|---|---|---|
| EVIE-8B | 66.75 | 81.86 | 72.51 | 71.23 | 56.40 | 69.29 | 59.77 | 70.81 | 52.11 |
| EVIE-4.5B | 66.02 | 81.72 | 72.32 | 70.00 | 54.90 | 67.82 | 59.40 | 70.27 | 51.69 |
| webAI-ColVec1.1-8b | 65.32 | 80.08 | 70.12 | 71.90 | 54.87 | 68.55 | 57.65 | 67.88 | 51.50 |
| nemotron-colembed-vl-8b-v2 | 63.54 | 79.30 | 69.82 | 67.29 | 51.54 | 66.32 | 56.03 | 67.19 | 50.84 |
| VultronRetrieverPrime-8B | 64.26 | 79.80 | 70.30 | 69.00 | 54.50 | 66.80 | 57.40 | 68.20 | 51.70 |
| VultronRetrieverCore-4.5B | 63.57 | 79.80 | 69.20 | 68.90 | 52.00 | 66.10 | 56.10 | 67.50 | 50.20 |
| tomoro-colqwen3-embed-8b | 61.60 | 75.35 | 68.41 | 65.08 | 49.10 | 63.98 | 54.41 | 66.36 | 50.13 |
๐ Complete 138-Task Evaluation Matrix
Protocol paired-all-pages-dedup+process_queries+ndcg2r-20260827 ($\text{MVT} = 1024$, bidirectional attention):
- ViDoRe V1: 10 tasks, 3,943 queries, 6,729 docs
- ViDoRe V2: 4 tasks, 1,152 queries, 4,544 docs
- ViDoRe V3: 48 tasks, 14,514 queries, 115,512 docs
- JinaVDR: 76 tasks, 43,375 queries, 55,398 docs
| Metric | ViDoRe V1 | ViDoRe V2 | ViDoRe V3 | JinaVDR | 4-Board Macro Avg |
|---|---|---|---|---|---|
| nDCG@1 | 88.51 | 75.58 | 62.14 | 75.50 | 75.43 |
| nDCG@5 | 92.18 | 74.23 | 64.16 | 82.45 | 78.26 |
| nDCG@10 | 92.64 | 75.35 | 66.75 | 83.30 | 79.51 |
| Recall@1 | 88.51 | 37.87 | 30.79 | 75.50 | 58.17 |
| Recall@5 | 95.07 | 66.65 | 58.69 | 88.07 | 77.12 |
| Recall@10 | 96.43 | 76.34 | 70.10 | 90.65 | 83.38 |
| MAP@1 | 88.51 | 75.99 | 65.94 | 75.50 | 76.49 |
| MAP@5 | 91.21 | 67.30 | 55.82 | 80.56 | 73.72 |
| MAP@10 | 91.40 | 66.81 | 56.32 | 80.92 | 73.86 |
| MRR@1 | 88.51 | 75.99 | 65.94 | 75.50 | 76.49 |
| MRR@5 | 91.21 | 82.85 | 75.39 | 80.56 | 82.50 |
| MRR@10 | 91.40 | 83.23 | 76.09 | 80.92 | 82.91 |
โก 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}"
Python Inference
import torch
from PIL import Image
from colpali_engine.models import ColQwen3_5, ColQwen3_5Processor
model_id = "tencent/EVIE-8B"
# 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. 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)
# 3. Generate 4096D multi-vectors 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
Load EVIE with Sentence Transformers to encode queries and document images and compute MaxSim scores. Bidirectional attention is configured automatically.
pip install -U "sentence-transformers[image]>=6.0.0"
from sentence_transformers import MultiVectorEncoder
model = MultiVectorEncoder("tencent/EVIE-8B")
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, batch_size=1)
print(query_embeddings[0].shape, document_embeddings[0].shape)
# torch.Size([23, 4096]) torch.Size([3161, 4096])
scores = model.similarity(query_embeddings, document_embeddings)
print(scores)
# tensor([[14.3594, 6.1758, 4.5137, 3.2979],
# [ 1.8079, 10.9180, 1.9668, 1.9541]])
Documents can be URLs, local image paths, or PIL.Image objects. The output contains 4096-dimensional token embeddings. Scores can vary slightly with dtype and attention backend.
The default page budget allows up to 16,384 visual tokens. Encoding images one at a time reduces peak memory use. To use the 1,024-token budget from the evaluation protocol above, set the image processor's pixel budget:
model = MultiVectorEncoder(
"tencent/EVIE-8B",
processor_kwargs={"size": {"longest_edge": 1024 * 32 * 32, "shortest_edge": 65536}},
)
๐ Repository Layout
Evie-8B/
โโโ model.safetensors # EVIE-8B weights (safetensors)
โโโ config.json # Model configuration (4096D)
โโโ 1_Dense/ # Sentence Transformers 4096D projection
โโโ modules.json # MultiVectorEncoder module graph
โโโ infer.py # Standalone inference & scoring CLI
โโโ colpali/ # ColQwen3.5 inference engine
โโโ code/shared/ # 138-task eval harness
โโโ examples/demo/ # 8-page retrieval demo (run.sh)
โโโ env.sh.example # Environment variables template
๐ฌ Released Checkpoint
EVIE-8B was trained on 775,635 document-query pairs across multilingual domains. Hard negatives were mined and classified into answerable (promoted to positives), ambiguous (masked), and strict negatives (negative cross-entropy loss).
The released a40 checkpoint represents a weight-space mix ($\alpha = 0.40$) of two independently trained arms, achieving the peak 66.75 nDCG@10 on ViDoRe V3. Full training reproduction scripts are provided in the companion repository Tencent/EVIE.
๐ Citation
@misc{tencent2026evie8b,
title = {EVIE-8B: High-Capacity Visual Document Retrieval with 4096-Dimensional Embeddings},
author = {Wang, Zifei and Wen, Wei},
year = {2026},
howpublished = {\url{https://github.com/Tencent/EVIE}},
note = {Corresponding author: Wei Wen <jawnrwen@tencent.com>}
}
๐ License
This model and codebase are released under the Apache-2.0 License.
๐ฅ Authors
| Name | Role | Affiliation | Contact |
|---|---|---|---|
| Zifei Wang | Author | Tencent IMA Product Center | zifeiwang@tencent.com |
| Wei Wen | Author & Corresponding | Tencent Youtu Lab | jawnrwen@tencent.com |
- Downloads last month
- 1,141