alt.freeweights.qwen / Qwen3-VL-Reranker-2B
From: Qwen <huggingface.co/Qwen>Newsgroups: alt.freeweights.qwenSubject:

Qwen3-VL-Reranker-2B

Date: 2026-11-15Commit: 4bd860aSigned: 2DC28CC7B26A283B ✓

Text ranking model with 2.1B parameters. Safetensors weights, 4.27 GB in all. Published by Qwen under Apache-2.0.

2.1B params4.27GBQwen3-VL-Reranker-2Bsafetensorspermissive
FactsParams2.1BSize4.27 GBFormatssafetensorsTasktext rankingLicenseApache-2.0From sourcepermissive
$ fw get Qwen/Qwen3-VL-Reranker-2B
# manifest sha256 fd1f9d022962… · 4.27 GB · 20 files
$ fw verify ./Qwen3-VL-Reranker-2B Qwen/Qwen3-VL-Reranker-2B
From sourceHosted (signed)Qwen/Qwen3-VL-Reranker-2BLast check: 2026-11-15 02:30 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of Qwen3-VL-2B-Instruct.

Works with

Evaluate with

Overview

Size
4.27 GB
Weights
4.26 GB (safetensors)
Parameters
2.1B
Formats
safetensors
Task
text ranking
License
Apache-2.0 (permissive)
Files
20, each with a sha256
Publisher
Qwen
Added
2026-11-15
Section
alt.freeweights.qwen
Lineage

Original release from the publisher.

Base model: Qwen/Qwen3-VL-2B-Instruct

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:30 UTCpassed

Model card

From the publisher at commit 4bd860a. Shown as plain text with links; images open at the publisher.

Qwen3-VL-Reranker-2B#

Image: image

Highlights#

The Qwen3-VL-Embedding and Qwen3-VL-Reranker model series are the latest additions to the Qwen family, built upon the recently open-sourced and powerful Qwen3-VL foundation model. Specifically designed for multimodal information retrieval and cross-modal understanding, this suite accepts diverse inputs including text, images, screenshots, and videos, as well as inputs containing a mixture of these modalities.

While the Embedding model generates high-dimensional vectors for broad applications like retrieval and clustering, the Reranker model is engineered to refine these results, establishing a comprehensive pipeline for state-of-the-art multimodal search.

  • Multimodal Versatility: Both models seamlessly handle a wide range of inputs—including text, images, screenshots, and video—within a unified framework. They deliver state-of-the-art performance across diverse multimodal tasks such as image-text retrieval, video-text matching, visual question answering (VQA), and multimodal content clustering.
  • Unified Representation Learning (Embedding): By leveraging the Qwen3-VL architecture, the Embedding model generates semantically rich vectors that capture both visual and textual information in a shared space. This facilitates efficient similarity computation and retrieval across different modalities.
  • High-Precision Reranking (Reranker): We also introduce the Qwen3-VL-Reranker series to complement the embedding model. The reranker takes a (query, document) pair as input—where both query and document may contain arbitrary single or mixed modalities—and outputs a precise relevance score. In retrieval pipelines, the two models are typically used in tandem: the embedding model performs efficient initial recall, while the reranker refines results in a subsequent re-ranking stage. This two-stage approach significantly boosts retrieval accuracy.
  • Exceptional Practicality: Inheriting Qwen3-VL’s multilingual capabilities, the series supports over 30 languages, making it ideal for global applications. It is highly practical for real-world scenarios, offering flexible vector dimensions, customizable instructions for specific use cases, and strong performance even with quantized embeddings. These capabilities enable developers to seamlessly integrate both models into existing pipelines, unlocking powerful cross-lingual and cross-modal understanding.

Qwen3-VL-Reranker-2B has the following features:

  • Model Type: MultiModal Rerank
  • Supported Languages: 30+ Languages
  • Supported Input Modalities: Text, images, screenshots, videos, and arbitrary multimodal combinations (e.g., text + image, text + video)
  • Number of Parameters: 2B
  • Context Length: 32k

For more details, including benchmark evaluation, hardware requirements, and inference performance, please refer to our technical report, blog, GitHub.

Qwen3-VL-Embedding and Qwen3-VL-Reranker Model list#

ModelSizeModel LayersSequence LengthEmbedding DimensionQuantization SupportMRL SupportInstruction Aware
Qwen3-VL-Embedding-2B2B2832K2048YesYesYes
Qwen3-VL-Embedding-8B8B3632K4096YesYesYes
Qwen3-VL-Reranker-2B2B2832K---Yes
Qwen3-VL-Reranker-8B8B3632K---Yes

Note:

  • Quantization Support indicates the supported quantization post process for the output embedding.
  • MRL Support indicates whether the embedding model supports custom dimensions for the final embedding.
  • Instruction Aware notes whether the embedding or reranking model supports customizing the input instruction according to different tasks.

Our evaluation indicates that, for most downstream tasks, using instructions (instruct) typically yields an improvement of 1% to 5% compared to not using them. Therefore, we recommend that developers create tailored instructions specific to their tasks and scenarios. In multilingual contexts, we also advise users to write their instructions in English, as most instructions utilized during the model training process were originally written in English.

Model Performance#

We utilize retrieval task datasets from various subtasks of MMEB-v2 and MMTEB retrieval benchmarks. For visual document retrieval, we employ JinaVDR and ViDoRe v3 datasets. Our results demonstrate that all Qwen3-VL-Reranker models consistently outperform the base embedding model and baseline rerankers, with the 8B variant achieving the best performance across most tasks.

ModelSizeMMEB-v2(Retrieval) - AvgMMEB-v2(Retrieval) - ImageMMEB-v2(Retrieval) - VideoMMEB-v2(Retrieval) - VisDocMMTEB(Retrieval)JinaVDRViDoRe(v3)
Qwen3-VL-Embedding-2B2B73.474.853.679.268.171.052.9
jina-reranker-m02B-68.2-85.2-82.257.8
Qwen3-VL-Reranker-2B2B75.173.852.183.470.080.960.8
Qwen3-VL-Reranker-8B8B79.280.755.886.374.983.666.7

Usage#

Using Sentence Transformers#

Install Sentence Transformers:

pip install sentence_transformers
from sentence_transformers import CrossEncoder

model = CrossEncoder("Qwen/Qwen3-VL-Reranker-2B")

query = "A woman playing with her dog on a beach at sunset."
documents = [
    "A woman shares a joyful moment with her golden retriever on a sun-drenched beach at sunset, as the dog offers its paw in a heartwarming display of companionship and trust.",
    "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
    {
        "text": "A woman shares a joyful moment with her golden retriever on a sun-drenched beach at sunset, as the dog offers its paw in a heartwarming display of companionship and trust.",
        "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
    },
]

prompt = "Retrieve images or text relevant to the user's query."
pairs = [(query, doc) for doc in documents]
scores = model.predict(pairs, prompt=prompt)
print(scores)
# [1.8125, 0.5625, 1.3125]

rankings = model.rank(query, documents, prompt=prompt)
print(rankings)
# [{'corpus_id': 0, 'score': 1.8125}, {'corpus_id': 2, 'score': 1.3125}, {'corpus_id': 1, 'score': 0.5625}]

You can map scores to 0...1 with a sigmoid activation:

scores = model.predict(pairs, activation_fn=torch.nn.Sigmoid(), prompt=prompt)
print(scores)
# [0.8594, 0.6367, 0.7891]

The default prompt is "query" with instruction "Retrieve text relevant to the user's query.". You can customize the instruction for your use case via the prompt parameter as shown above.

Using Transformers#
  • requirements
transformers>=4.57.0
qwen-vl-utils>=0.0.14
torch==2.8.0
from scripts.qwen3_vl_reranker import Qwen3VLReranker

# Specify the model path
model_name_or_path = "Qwen/Qwen3-VL-Reranker-2B"

# Initialize the Qwen3VLEmbedder model
model = Qwen3VLReranker(model_name_or_path=model_name_or_path)
# We recommend enabling flash_attention_2 for better acceleration and memory saving,
# model = Qwen3VLReranker(model_name_or_path=model_name_or_path, torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2")

# Combine queries and documents into a single input list

inputs = {
    "instruction": "Retrieve images or text relevant to the user's query.",
    "query": {"text": "A woman playing with her dog on a beach at sunset."},
    "documents": [
        {"text": "A woman shares a joyful moment with her golden retriever on a sun-drenched beach at sunset, as the dog offers its paw in a heartwarming display of companionship and trust."},
        {"image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"},
        {"text": "A woman shares a joyful moment with her golden retriever on a sun-drenched beach at sunset, as the dog offers its paw in a heartwarming display of companionship and trust.", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"}
    ],
    "fps": 1.0
}

scores = model.process(inputs)
print(scores)
# [0.8613124489784241, 0.6757137179374695, 0.8125371336936951]
Using vLLM#
import argparse
import os
from pathlib import Path
from typing import Dict, Any
from vllm import LLM, EngineArgs
from vllm.entrypoints.score_utils import ScoreMultiModalParam


queries = [
    {"text": "A woman playing with her dog on a beach at sunset."}
]

documents = [
    {"text": "A woman shares a joyful moment with her golden retriever on a sun-drenched beach at sunset, as the dog offers its paw in a heartwarming display of companionship and trust."},
    {"image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"},
    {"text": "A woman shares a joyful moment with her golden retriever on a sun-drenched beach at sunset, as the dog offers its paw in a heartwarming display of companionship and trust.", 
     "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg"}
]


def format_document_to_score_param(doc_dict: Dict[str, Any]) -> ScoreMultiModalParam:
    content = []
    
    text = doc_dict.get('text')
    image = doc_dict.get('image')
    
    if text:
        content.append({
            "type": "text",
            "text": text
        })
    
    if image:
        image_url = image
        if isinstance(image, str) and not image.startswith(('http', 'https', 'oss')):
            abs_image_path = os.path.abspath(image)
            image_url = 'file://' + abs_image_path
        
        content.append({
            "type": "image_url",
            "image_url": {
                "url": image_url
            }
        })
    
    if not content:
        content.append({
            "type": "text",
            "text": ""
        })
    
    return {"content": content}


def main():
    parser = argparse.ArgumentParser(description="Offline Reranker with vLLM")
    parser.add_argument("--model-path", type=str, default="models/Qwen3-VL-Reranker-2B", help="Path to the reranker model")
    parser.add_argument("--dtype", type=str, default="bfloat16", help="Data type (e.g., bfloat16)")
    parser.add_argument("--template-path", type=str, default="vllm/examples/pooling/score/template/qwen3_vl_reranker.jinja", 
                        help="Path to chat template file")
    args = parser.parse_args()
    
    print(f"Loading model from {args.model_path}...")
    
    engine_args = EngineArgs(
        model=args.model_path,
        runner="pooling",
        dtype=args.dtype,
        trust_remote_code=True,
        hf_overrides={
            "architectures": ["Qwen3VLForSequenceClassification"],
            "classifier_from_token": ["no", "yes"],
            "is_original_qwen3_reranker": True,
        },
    )
    
    llm = LLM(**vars(engine_args))
    
    template_path = Path(args.template_path)
    chat_template = template_path.read_text() if template_path.exists() else None
    
    for query_dict in queries:
        query_text = query_dict.get('text', '')
        print(f"\nQuery: {query_text}")
        
        scores = []
        for doc_dict in documents:
            doc_param = format_document_to_score_param(doc_dict)
            outputs = llm.score(query_text, doc_param, chat_template=chat_template)
            score = outputs[0].outputs.score
            scores.append(score)
        
        print(scores)


if __name__ == "__main__":
    main()

For more usage examples, please visit our GitHub repository.

Citation#

If you find our work helpful, feel free to give us a cite.

@article{qwen3vlembedding,
  title={Qwen3-VL-Embedding and Qwen3-VL-Reranker: A Unified Framework for State-of-the-Art Multimodal Retrieval and Ranking},
  author={Li, Mingxin and Zhang, Yanzhao and Long, Dingkun and Chen Keqin and Song, Sibo and Bai, Shuai and Yang, Zhibo and Xie, Pengjun and Yang, An and Liu, Dayiheng and Zhou, Jingren and Lin, Junyang},
  journal={arXiv preprint arXiv:2601.04720},
  year={2026}
}

Files

20 files · 4.27 GBWeights 4.26 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 20 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
1_LogitScore/config.json57 B73e3156450564d8a98b7e47bcf5aace0f29600828b51937da545571e84db3ff3
README.md13.3 KBf5b8fb5e489fffb19561a523e081d28d2d46187079199ba2326c374efa662272
added_tokens.json707 Bc0284b582e14987fbd3d5a2cb2bd139084371ed9acbae488829a1c900833c680
additional_chat_templates/reranker.jinja2.44 KB47c758cb74d7f1e20e22483949a5ba4c8c1f4515126ad173da1c63211f472aa7
chat_template.jinja5.29 KB3636d0f0bd6bef02654cdffdc447b79cb2cef8ab02cc75267345946291a489e4
config.json1.65 KB82d38a8f803e38e13986fdd622114a6fec12a834adbd3cee9253d757a257d23d
config_sentence_transformers.json294 B5583a19d9f4d7e6e91f44b1181b107de6f7f887822bfc3d9e8286f0f8ac579f2
generation_config.json213 B7940a14042d126a31694c75bd8a020b668745a11867a394f19e9d26b5eccf2de
merges.txt1.67 MB8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
model.safetensors4.26 GB466ec01961061e9d7f804b4fb1625fb6f406106cd1567e026096d4736fa9d5b9
modules.json280 B6f13b6b4a89e577b591b2077bca40c67c26541a6740a8809267cb474f90806a9
preprocessor_config.json628 Bfd32af55c2d3846adb0bc46df8eb07c92c332b31b34c338ae85259f3f3951f24
scripts/qwen3_vl_reranker.py10.9 KBbd5d2f5d97fc4a738864d93f6b15d8850243e60da4484f3ea78867a46efdebd6
sentence_bert_config.json756 B729676c811dadb5cf2cefdfcfca1bd04de40d0f0caed8a6482016d8a2937341d
special_tokens_map.json613 B76862e765266b85aa9459767e33cbaf13970f327a0e88d1c65846c2ddd3a1ecd
tokenizer.json11.4 MBaeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4
tokenizer_config.json5.45 KB81ec7bb9530159b326c0bef1d0b6c33d392090524014ea3f0123a3c1eb9c2af5
video_preprocessor_config.json817 B59c5c9eb52182eb14c06ffb10ca9effd29adce5f238a95de23ca14a38dbd2cb1
vocab.json2.78 MBca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
4bd860ac4f pinned now2026-11-15 02:30 UTC20 files · 4.27 GB

Use it

$ fw get Qwen/Qwen3-VL-Reranker-2B
# manifest sha256 fd1f9d022962… · 4.27 GB · 20 files
$ fw verify ./Qwen3-VL-Reranker-2B Qwen/Qwen3-VL-Reranker-2B
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/Qwen/Qwen3-VL-Reranker-2B.json --dir ./Qwen3-VL-Reranker-2B $ python3 fw.py verify ./Qwen3-VL-Reranker-2B ./Qwen__Qwen3-VL-Reranker-2B.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download Qwen/Qwen3-VL-Reranker-2B --revision 4bd860ac4f15ad1897a214615cccc700f8f71818 --local-dir ./Qwen3-VL-Reranker-2B

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
f5b8fb5e489fffb19561a523e081d28d2d46187079199ba2326c374efa662272
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: Qwen <huggingface.co/Qwen>Newsgroups: alt.freeweights.qwenSubject: Qwen3-VL-Reranker-2BDate: 2026-11-15Commit: 4bd860aSigned: 2DC28CC7B26A283B ✓
Upstream
Qwen/Qwen3-VL-Reranker-2B
Pinned commit
4bd860ac4f15ad1897a214615cccc700f8f71818
Manifest
Qwen3-VL-Reranker-2B.json · .minisig
Manifest sha256
fd1f9d0229621ffe16fe8f252ebda179faacbb6bfd016bc81ff03ae48efefded
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:30 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/Qwen/Qwen3-VL-Reranker-2B.json $ curl -O https://freeweights.allternit.com/manifests/Qwen/Qwen3-VL-Reranker-2B.json.minisig $ minisign -Vm Qwen3-VL-Reranker-2B.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

Qwen/Qwen3-VL-2B-Instruct · this model is a finetune of it

No model in the catalog names this one as its parent.

Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download Qwen/Qwen3-VL-Reranker-2B
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. Qwen3-VL-Reranker-2B.json. Provenance. Takedown history: none.
From: BAAI <huggingface.co/BAAI>Subject: Aquila-VL-2B-llava-qwen
From: Perciqa <huggingface.co/Perciqa>Subject: Aurora-Code-1
From: BAAI <huggingface.co/BAAI>Subject: bge-reasoner-embed-qwen3-8b-0923
From: amazon <huggingface.co/amazon>Subject: BMOJOF-primed-HQwen3-8B-Instruct
From: nbeerbower <huggingface.co/nbeerbower>Subject: Bubba-Qwen3.6-27B-LoRA
From: bartowski <huggingface.co/bartowski>Subject: bytkim_Qwen3.8-27B-pi-GGUF