{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/huggingface-co/2026-04-09-multimodal-embedding-reranker-models-with-sentence/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "[Sentence Transformers](https://sbert.net/) is a Python library for using and training embedding and reranker models for applications like retrieval augmented generation, semantic search, and more. With the v5.4 update, you can now **encode and compare texts, images, audio, and videos** using the same familiar API. In this blogpost, I'll show you how to use these new multimodal capabilities for both embedding and reranking.\n\nMultimodal embedding models map inputs from different modalities into a shared embedding space, while multimodal reranker models score the relevance of mixed-modality pairs. This opens up use cases like visual document retrieval, cross-modal search, and multimodal RAG pipelines.\n\n> If you want to train your own multimodal models, check out the companion blogpost: [Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-multimodal-sentence-transformers).\n\n## Table of Contents\n\n- [What are Multimodal Models?](https://huggingface.co/blog/multimodal-sentence-transformers#what-are-multimodal-models)\n- [Installation](https://huggingface.co/blog/multimodal-sentence-transformers#installation)\n- [Multimodal Embedding Models](https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-embedding-models)\n  - [Loading a Model](https://huggingface.co/blog/multimodal-sentence-transformers#loading-a-model)\n  - [Encoding Images](https://huggingface.co/blog/multimodal-sentence-transformers#encoding-images)\n  - [Cross-Modal Similarity](https://huggingface.co/blog/multimodal-sentence-transformers#cross-modal-similarity)\n  - [Encoding Queries and Documents](https://huggingface.co/blog/multimodal-sentence-transformers#encoding-queries-and-documents)\n- [Multimodal Reranker Models](https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-reranker-models)\n  - [Ranking Mixed-Modality Documents](https://huggingface.co/blog/multimodal-sentence-transformers#ranking-mixed-modality-documents)\n  - [Predicting Pair Scores](https://huggingface.co/blog/multimodal-sentence-transformers#predicting-pair-scores)\n- [Retrieve and Rerank](https://huggingface.co/blog/multimodal-sentence-transformers#retrieve-and-rerank)\n- [Input Formats and Configuration](https://huggingface.co/blog/multimodal-sentence-transformers#input-formats-and-configuration)\n  - [Supported Input Types](https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types)\n  - [Checking Modality Support](https://huggingface.co/blog/multimodal-sentence-transformers#checking-modality-support)\n  - [Processor and Model kwargs](https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs)\n- [Supported Models](https://huggingface.co/blog/multimodal-sentence-transformers#supported-models)\n- [Additional Resources](https://huggingface.co/blog/multimodal-sentence-transformers#additional-resources)\n\n## What are Multimodal Models?\n\nTraditional embedding models convert text into [fixed-size vectors](https://huggingface.co/blog/matryoshka#understanding-embeddings). Multimodal embedding models extend this by mapping inputs from different modalities (text, images, audio, or video) into a shared embedding space. This means you can compare a text query against image documents (or vice versa) using the same similarity functions you're already familiar with.\n\nSimilarly, traditional reranker (Cross Encoder) models compute relevance scores between pairs of texts. Multimodal rerankers can score pairs where one or both elements are images, combined text-image documents, or other modalities.\n\nFor example, you can compare a text query against image documents, find video clips matching a description, or build RAG pipelines that work across modalities.\n\n## Installation\n\nMultimodal models require some extra dependencies. Install the extras for the modalities you need (see [Installation](https://sbert.net/docs/installation.html) for more details):\n\n```bash\n# For image support\npip install -U \"sentence-transformers[image]\"\n\n# For audio support\npip install -U \"sentence-transformers[audio]\"\n\n# For video support\npip install -U \"sentence-transformers[video]\"\n\n# Mix and match as needed\npip install -U \"sentence-transformers[image,video,train]\"\n```\n\n> VLM-based models like Qwen3-VL-2B require a GPU with at least ~8 GB of VRAM. For the 8B variants, expect ~20 GB. If you don't have a local GPU, consider using a cloud GPU service or Google Colab. On CPU, these models will be extremely slow; text-only or CLIP models are better suited for CPU inference.\n\n## Multimodal Embedding Models\n\n### Loading a Model\n\nLoading a multimodal embedding model works exactly like loading a text-only model:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n```\n\n> Some models might require a `revision` argument for now if the integration pull requests for the model is still pending. Once they're merged, you'll be able to load them without specifying a revision, like above.\n\nThe model automatically detects which modalities it supports, so there's nothing extra to configure. See [Processor and Model kwargs](https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs) if you want to control things like image resolution or model precision.\n\n### Encoding Images\n\nWith a multimodal model loaded, [`model.encode()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode) accepts images alongside text. Images can be provided as URLs, local file paths, or PIL Image objects (see [Supported Input Types](https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types) for all accepted formats):\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# Encode images from URLs\nimg_embeddings = model.encode([\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n])\nprint(img_embeddings.shape)\n# (2, 2048)\n```\n\n### Cross-Modal Similarity\n\nYou can compute similarities between text embeddings and image embeddings, since the model maps both into the same space:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# Encode images\nimg_embeddings = model.encode([\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n])\n\n# Encode text queries (one matching + one hard negative per image)\ntext_embeddings = model.encode([\n    \"A green car parked in front of a yellow building\",\n    \"A red car driving on a highway\",\n    \"A bee on a pink flower\",\n    \"A wasp on a wooden table\",\n])\n\n# Compute cross-modal similarities\nsimilarities = model.similarity(text_embeddings, img_embeddings)\nprint(similarities)\n# tensor([[0.5115, 0.1078],\n#         [0.1999, 0.1108],\n#         [0.1255, 0.6749],\n#         [0.1283, 0.2704]])\n```\n\nAs expected, \"A green car parked in front of a yellow building\" is most similar to the car image (0.51), and \"A bee on a pink flower\" is most similar to the bee image (0.67). The hard negatives (\"A red car driving on a highway\", \"A wasp on a wooden table\") correctly receive lower scores.\n\nYou might notice that even the best matching scores (0.51, 0.67) aren't very close to 1.0. This is due to the [modality gap](https://arxiv.org/abs/2203.02053): embeddings from different modalities tend to cluster in separate regions of the space. Cross-modal similarities are typically lower than within-modal ones (e.g., text-to-text), but the relative ordering is preserved, so retrieval still works well.\n\n### Encoding Queries and Documents\n\nFor retrieval tasks, [`encode_query()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_query) and [`encode_document()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_document) are the recommended methods. Many retrieval models prepend different instruction prompts depending on whether the input is a query or a document, similar to how chat models might apply different system prompts depending on the goal. Model authors can specify their prompts in the model config, and `encode_query()` / `encode_document()` automatically load and apply the correct one:\n\n- `encode_query()` uses the model's `\"query\"` prompt (if available) and sets `task=\"query\"`.\n- `encode_document()` uses the first available prompt from `\"document\"`, `\"passage\"`, or `\"corpus\"`, and sets `task=\"document\"`.\n\nUnder the hood, both are thin wrappers around `encode()`, they just handle prompt selection for you. Here's what cross-modal retrieval looks like:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# Encode text queries with the query prompt\nquery_embeddings = model.encode_query([\n    \"Find me a photo of a vehicle parked near a building\",\n    \"Show me an image of a pollinating insect\",\n])\n\n# Encode document screenshots with the document prompt\ndoc_embeddings = model.encode_document([\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n])\n\n# Compute similarities\nsimilarities = model.similarity(query_embeddings, doc_embeddings)\nprint(similarities)\n# tensor([[0.3907, 0.1490],\n#         [0.1235, 0.4872]])\n```\n\nThese methods accept the same input types as `encode()` (images, URLs, multimodal dicts, etc.) and pass through the same parameters. For models without specialized query/document prompts, they behave identically to `encode()`.\n\n## Multimodal Reranker Models\n\nMultimodal reranker (CrossEncoder) models score the relevance between pairs of inputs, where each element can be text, an image, audio, video, or a combination. They tend to outperform embedding models in terms of quality, but are slower since they process each pair individually. The currently available pretrained multimodal rerankers focus on text and image inputs, but the architecture supports any modality that the underlying model can handle.\n\n### Ranking Mixed-Modality Documents\n\nThe [`rank()`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.rank) method scores and ranks a list of documents against a query, supporting mixed modalities:\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nmodel = CrossEncoder(\"Qwen/Qwen3-VL-Reranker-2B\")\n\nquery = \"A green car parked in front of a yellow building\"\ndocuments = [\n    # Image documents (URL or local file path)\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n    # Text document\n    \"A vintage Volkswagen Beetle painted in bright green sits in a driveway.\",\n    # Combined text + image document\n    {\n        \"text\": \"A car in a European city\",\n        \"image\": \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    },\n]\n\nrankings = model.rank(query, documents)\nfor rank in rankings:\n    print(f\"{rank['score']:.4f}\\t(document {rank['corpus_id']})\")\n\"\"\"\n0.9375  (document 0)\n0.5000  (document 3)\n-1.2500 (document 2)\n-2.4375 (document 1)\n\"\"\"\n```\n\nThe reranker correctly identifies the car image (document 0) as the most relevant result, followed by the combined text+image document about a car in a European city (document 3). The bee image (document 1) scores lowest. Keep in mind that the [modality gap](https://arxiv.org/abs/2203.02053) can influence absolute scores: text-image pair scores may occupy a different range than text-text or image-image pair scores.\n\nYou can also check which modalities a reranker supports using [`modalities`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.modalities) and [`supports()`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.supports), just like with embedding models:\n\n```python\nprint(model.modalities)\n# ['text', 'image', 'video', 'message']\n\nprint(model.supports(\"image\"))\n# True\n\n# Check if the model supports a specific pair of modalities\nprint(model.supports((\"image\", \"text\")))\n# True\n```\n\n### Predicting Pair Scores\n\nYou can also use [`predict()`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.predict) to get raw relevance scores for specific pairs of inputs:\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nmodel = CrossEncoder(\"jinaai/jina-reranker-m0\", trust_remote_code=True)\n\nscores = model.predict([\n    (\"A green car\", \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\"),\n    (\"A bee on a flower\", \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\"),\n    (\"A green car\", \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\"),\n])\nprint(scores)\n# [0.9389156  0.96922314 0.46063158]\n```\n\n## Retrieve and Rerank\n\nA common pattern is to use an embedding model for fast initial retrieval, then refine the top results with a reranker:\n\n```python\nfrom sentence_transformers import SentenceTransformer, CrossEncoder\n\n# Step 1: Retrieve with an embedding model\nembedder = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\nquery = \"revenue growth chart\"\nquery_embedding = embedder.encode_query(query)\n\n# Pre-compute corpus embeddings (do this once, then store them)\ndocument_screenshots = [\n    \"path/to/doc1.png\",\n    \"path/to/doc2.png\",\n    # ... potentially millions of document screenshots\n]\ncorpus_embeddings = embedder.encode_document(document_screenshots, show_progress_bar=True)\n\n# Simple cosine similarity retrieval, viable as long as embeddings fit in memory\nsimilarities = embedder.similarity(query_embedding, corpus_embeddings)\ntop_k_indices = similarities.argsort(descending=True)[0][:10]\n\n# Step 2: Rerank the top-k results with a reranker model\nreranker = CrossEncoder(\"nvidia/llama-nemotron-rerank-vl-1b-v2\", trust_remote_code=True)\n\ntop_k_documents = [document_screenshots[i] for i in top_k_indices]\nrankings = reranker.rank(query, top_k_documents)\nfor rank in rankings:\n    print(f\"{rank['score']:.4f}\\t{top_k_documents[rank['corpus_id']]}\")\n```\n\nSince the corpus embeddings are pre-computed, the initial retrieval is fast even over millions of documents. The reranker then provides more accurate scoring over the smaller candidate set.\n\n## Input Formats and Configuration\n\n### Supported Input Types\n\nMultimodal models accept a variety of input formats. Here's a summary of what you can pass to [`model.encode()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode):\n\n| Modality       | Accepted Formats                                                                                                                                                                           |\n| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **Text**       | \\- Strings                                                                                                                                                                                 |\n| **Image**      | \\- `PIL.Image.Image` objects - File paths (e.g. `\"./photo.jpg\"`) - URLs (e.g. `\"https://.../image.jpg\"`) - Numpy arrays, torch tensors                                                     |\n| **Audio**      | \\- File paths (e.g. `\"./audio.wav\"`) - URLs (e.g. `\"https://.../audio.wav\"`) - Numpy/torch arrays - Dicts with `\"array\"` and `\"sampling_rate\"` keys - `torchcodec.AudioDecoder` instances  |\n| **Video**      | \\- File paths (e.g. `\"./video.mp4\"`) - URLs (e.g. `\"https://.../video.mp4\"`) - Numpy/torch arrays - Dicts with `\"array\"` and `\"video_metadata\"` keys - `torchcodec.VideoDecoder` instances |\n| **Multimodal** | \\- Dicts mapping modality names to values, e.g. `{\"text\": \"a caption\", \"image\": \"https://.../image.jpg\"}` Valid keys: `\"text\"`, `\"image\"`, `\"audio\"`, `\"video\"`                            |\n| **Message**    | \\- List of message dicts with `\"role\"` and `\"content\"` keys, e.g. `[{\"role\": \"user\", \"content\": [...]}]`                                                                                   |\n\n### Checking Modality Support\n\nYou can check which modalities a model supports using the [`modalities`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.modalities) property and [`supports()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.supports) method:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# List all supported modalities\nprint(model.modalities)\n# ['text', 'image', 'video', 'message']\n\n# Check for a specific modality\nprint(model.supports(\"image\"))\n# True\nprint(model.supports(\"audio\"))\n# False\n```\n\nThe `\"message\"` modality indicates that the model accepts chat-style message inputs with interleaved content. In practice, you rarely need to use this directly. When you pass strings, URLs, or multimodal dicts, the model converts them to the appropriate message format internally. Sentence Transformers supports two message formats:\n\n- **Structured** (most VLMs, e.g. Qwen3-VL): Content is a list of typed dicts, e.g. `[{\"type\": \"text\", \"text\": \"...\"}, {\"type\": \"image\", \"image\": ...}]`\n- **Flat** (e.g. Deepseek-V3): Content is a direct value, e.g. `\"some text\"`\n\nThe format is auto-detected from the model's chat template.\n\nSince all inputs get converted into the same message format internally, you can mix input types in a single [`encode()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode) call:\n\n```python\nembeddings = model.encode([\n    # A text input\n    \"A green car parked in front of a yellow building\",\n    # An image input (URL)\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    # A combined text + image input\n    {\n        \"text\": \"A car in a European city\",\n        \"image\": \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    },\n])\n```\n\nClick here if you need to pass raw message inputs\n\nIf a model doesn't follow either format and you need full control, you can pass raw message dicts with `role` and `content` keys directly:\n\n```python\nembeddings = model.encode([\n    [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"image\", \"image\": \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\"},\n                {\"type\": \"text\", \"text\": \"Describe this vehicle.\"},\n            ],\n        }\n    ],\n])\n```\n\nThis bypasses the automatic format conversion and passes the messages directly to the processor's `apply_chat_template()`.\n\n### Processor and Model kwargs\n\nYou may want to control image resolution bounds or model precision. Use `processor_kwargs` and `model_kwargs` when loading the model:\n\n```python\nmodel = SentenceTransformer(\n    \"Qwen/Qwen3-VL-Embedding-2B\",\n    model_kwargs={\"attn_implementation\": \"flash_attention_2\", \"torch_dtype\": \"bfloat16\"},\n    processor_kwargs={\"min_pixels\": 28 * 28, \"max_pixels\": 600 * 600},\n)\n```\n\n- `processor_kwargs` controls how inputs are preprocessed (e.g., image resolution bounds). Higher `max_pixels` means higher quality but more memory and compute. These are passed directly to `AutoProcessor.from_pretrained(...)`.\n- `model_kwargs` controls how the underlying model is loaded (e.g., precision, attention implementation). These are passed directly to the appropriate `AutoModel.from_pretrained(...)` call (e.g., `AutoModel`, `AutoModelForCausalLM`, `AutoModelForSequenceClassification`, etc., depending on the configuration of the model modules).\n\nSee the [SentenceTransformer](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer) API Reference documentation for more details on these kwargs.\n\n> In Sentence Transformers v5.4, `tokenizer_kwargs` has been renamed to `processor_kwargs` to reflect that multimodal models use processors rather than just tokenizers. The old name is still accepted but deprecated.\n\n## Supported Models\n\nHere are the multimodal models supported in v5.4, also available in the [v5.4 integrations collection](https://huggingface.co/collections/sentence-transformers/sentence-transformers-v54-integrations):\n\n### Supported Multimodal Embedding Models\n\n| Model                                                                                                | Parameters | Modalities                | Revision               |\n| ---------------------------------------------------------------------------------------------------- | ---------- | ------------------------- | ---------------------- |\n| [Qwen/Qwen3-VL-Embedding-2B](https://huggingface.co/Qwen/Qwen3-VL-Embedding-2B)                     | 2B         | Text, Image, Video        | No `revision` needed   |\n| [Qwen/Qwen3-VL-Embedding-8B](https://huggingface.co/Qwen/Qwen3-VL-Embedding-8B)                     | 8B         | Text, Image, Video        | No `revision` needed   |\n| [nvidia/llama-nemotron-embed-vl-1b-v2](https://huggingface.co/nvidia/llama-nemotron-embed-vl-1b-v2) | 1.7B       | Text, Image               | No `revision` needed   |\n| [nvidia/omni-embed-nemotron-3b](https://huggingface.co/nvidia/omni-embed-nemotron-3b)               | 4.7B       | Text, Image               | No `revision` needed   |\n| [LCO-Embedding/LCO-Embedding-Omni-3B](https://huggingface.co/LCO-Embedding/LCO-Embedding-Omni-3B)   | 5B         | Text, Image, Audio, Video | No `revision` needed   |\n| [LCO-Embedding/LCO-Embedding-Omni-7B](https://huggingface.co/LCO-Embedding/LCO-Embedding-Omni-7B)   | 9B         | Text, Image, Audio, Video | No `revision` needed   |\n| [BidirLM/BidirLM-Omni-2.5B-Embedding](https://huggingface.co/BidirLM/BidirLM-Omni-2.5B-Embedding)   | 2.5B       | Text, Image, Audio        | No `revision` needed   |\n| [BAAI/BGE-VL-base](https://huggingface.co/BAAI/BGE-VL-base)                                         | 0.1B       | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-large](https://huggingface.co/BAAI/BGE-VL-large)                                       | 0.4B       | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-MLLM-S1](https://huggingface.co/BAAI/BGE-VL-MLLM-S1)                                   | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-MLLM-S2](https://huggingface.co/BAAI/BGE-VL-MLLM-S2)                                   | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-v1.5-zs](https://huggingface.co/BAAI/BGE-VL-v1.5-zs)                                   | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-v1.5-mmeb](https://huggingface.co/BAAI/BGE-VL-v1.5-mmeb)                               | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-Screenshot](https://huggingface.co/BAAI/BGE-VL-Screenshot)                             | 4B         | Text, Image               | No `revision` needed   |\n| [royokong/e5-v](https://huggingface.co/royokong/e5-v)                                               | 8B         | Text, Image               | No `revision` needed   |\n| [eagerworks/eager-embed-v1](https://huggingface.co/eagerworks/eager-embed-v1)                       | 4B         | Text, Image               | `revision=\"refs/pr/2\"` |\n| [nomic-ai/nomic-embed-multimodal-3b](https://huggingface.co/nomic-ai/nomic-embed-multimodal-3b)     | 5B         | Text, Image               | `revision=\"refs/pr/4\"` |\n| [nomic-ai/nomic-embed-multimodal-7b](https://huggingface.co/nomic-ai/nomic-embed-multimodal-7b)     | 9B         | Text, Image               | `revision=\"refs/pr/3\"` |\n| [Haon-Chen/e5-omni-3B](https://huggingface.co/Haon-Chen/e5-omni-3B)                                 | 5B         | Text, Image, Audio, Video | `revision=\"refs/pr/2\"` |\n| [Haon-Chen/e5-omni-7B](https://huggingface.co/Haon-Chen/e5-omni-7B)                                 | 9B         | Text, Image, Audio, Video | `revision=\"refs/pr/1\"` |\n\n### Supported Multimodal Reranker Models\n\n| Model                                                                                                  | Parameters | Modalities         | Revision             |\n| ------------------------------------------------------------------------------------------------------ | ---------- | ------------------ | -------------------- |\n| [Qwen/Qwen3-VL-Reranker-2B](https://huggingface.co/Qwen/Qwen3-VL-Reranker-2B)                         | 2B         | Text, Image, Video | No `revision` needed |\n| [Qwen/Qwen3-VL-Reranker-8B](https://huggingface.co/Qwen/Qwen3-VL-Reranker-8B)                         | 8B         | Text, Image, Video | No `revision` needed |\n| [nvidia/llama-nemotron-rerank-vl-1b-v2](https://huggingface.co/nvidia/llama-nemotron-rerank-vl-1b-v2) | 2B         | Text, Image        | No `revision` needed |\n| [jinaai/jina-reranker-m0](https://huggingface.co/jinaai/jina-reranker-m0)                             | 2B         | Text, Image        | No `revision` needed |\n\n### Text-Only Reranker Models (also new in v5.4)\n\n| Model                                                                                                                                | Parameters | Revision               |\n| ------------------------------------------------------------------------------------------------------------------------------------ | ---------- | ---------------------- |\n| [Qwen/Qwen3-Reranker-0.6B](https://huggingface.co/Qwen/Qwen3-Reranker-0.6B)                                                         | 0.6B       | No `revision` needed   |\n| [Qwen/Qwen3-Reranker-4B](https://huggingface.co/Qwen/Qwen3-Reranker-4B)                                                             | 4B         | No `revision` needed   |\n| [Qwen/Qwen3-Reranker-8B](https://huggingface.co/Qwen/Qwen3-Reranker-8B)                                                             | 8B         | No `revision` needed   |\n| [mixedbread-ai/mxbai-rerank-base-v2](https://huggingface.co/mixedbread-ai/mxbai-rerank-base-v2)                                     | 0.5B       | No `revision` needed   |\n| [mixedbread-ai/mxbai-rerank-large-v2](https://huggingface.co/mixedbread-ai/mxbai-rerank-large-v2)                                   | 2B         | No `revision` needed   |\n| [ContextualAI/ctxl-rerank-v2-instruct-multilingual-1b](https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-1b) | 1B         | `revision=\"refs/pr/2\"` |\n| [ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b](https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b) | 3B         | `revision=\"refs/pr/1\"` |\n| [ContextualAI/ctxl-rerank-v2-instruct-multilingual-6b](https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-6b) | 7B         | `revision=\"refs/pr/1\"` |\n\nClick here for a text-only reranker usage example\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nmodel = CrossEncoder(\"mixedbread-ai/mxbai-rerank-base-v2\")\n\nquery = \"How do I bake sourdough bread?\"\ndocuments = [\n    \"Sourdough bread requires a starter made from flour and water, fermented over several days.\",\n    \"The history of bread dates back to ancient Egypt around 8000 BCE.\",\n    \"To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.\",\n    \"Rye bread is a popular alternative to wheat-based breads in Northern Europe.\",\n]\n\npairs = [(query, doc) for doc in documents]\nscores = model.predict(pairs)\nprint(scores)\n# [ 7.3077507 -2.6217823  8.724761  -2.2488995]\n\nrankings = model.rank(query, documents)\nfor rank in rankings:\n    print(f\"{rank['score']:.4f}\\t{documents[rank['corpus_id']]}\")\n# 8.7248  To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.\n# 7.3078  Sourdough bread requires a starter made from flour and water, fermented over several days.\n# -2.2489 Rye bread is a popular alternative to wheat-based breads in Northern Europe.\n# -2.6218 The history of bread dates back to ancient Egypt around 8000 BCE.\n```\n\n### CLIP Models\n\nThe older CLIP models continue to be supported:\n\n| Model                                                                                                                              | ImageNet Zero-Shot Top-1 Accuracy | Notes                                    |\n| ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------- |\n| [sentence-transformers/clip-ViT-L-14](https://huggingface.co/sentence-transformers/clip-ViT-L-14)                                 | 75.4                              |                                          |\n| [sentence-transformers/clip-ViT-B-16](https://huggingface.co/sentence-transformers/clip-ViT-B-16)                                 | 68.1                              |                                          |\n| [sentence-transformers/clip-ViT-B-32](https://huggingface.co/sentence-transformers/clip-ViT-B-32)                                 | 63.3                              |                                          |\n| [sentence-transformers/clip-ViT-B-32-multilingual-v1](https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1) | N/A                               | Multilingual text encoder, 50+ languages |\n\nThese simple CLIP models still work well on lower-resource hardware.\n\nClick here for a CLIP usage example\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"sentence-transformers/clip-ViT-L-14\")\n\nimages = [\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n    \"https://huggingface.co/datasets/huggingface/cats-image/resolve/main/cats_image.jpeg\"\n]\ntexts = [\"A green car\", \"A bee on a flower\", \"Some cats on a couch\", \"One cat sitting in the window\"]\n\nimage_embeddings = model.encode(images)\ntext_embeddings = model.encode(texts)\nprint(image_embeddings.shape, text_embeddings.shape)\n# (3, 768) (4, 768)\n\nsimilarities = model.similarity(image_embeddings, text_embeddings)\nprint(similarities)\n# tensor([[0.2208, 0.1042, 0.0617, 0.0907],  First image (car) is most similar to \"A green car\"\n#         [0.1205, 0.2303, 0.0632, 0.0917],  Second image (bee) is most similar to \"A bee on a flower\"\n#         [0.1107, 0.0196, 0.2425, 0.1162]]) Third image (multiple cats) is most similar to \"Some cats on a couch\"\n```\n\n## Additional Resources\n\n### Documentation\n\n- [Sentence Transformer > Usage](https://sbert.net/docs/sentence_transformer/usage/usage.html)\n- [Sentence Transformer > Pretrained Models](https://sbert.net/docs/sentence_transformer/pretrained_models.html)\n- [Cross Encoder > Usage](https://sbert.net/docs/cross_encoder/usage/usage.html)\n- [Cross Encoder > Pretrained Models](https://sbert.net/docs/cross_encoder/pretrained_models.html)\n- [Installation](https://sbert.net/docs/installation.html)\n\n### Training\n\nTo learn how to finetune these multimodal models on your own data, see the companion blogpost: [Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-multimodal-sentence-transformers).\n\n- [Sentence Transformer > Training Overview](https://sbert.net/docs/sentence_transformer/training_overview.html)\n- [Sentence Transformer > Training Examples](https://sbert.net/docs/sentence_transformer/training/examples.html)\n- [Cross Encoder > Training Overview](https://sbert.net/docs/cross_encoder/training_overview.html)\n- [Cross Encoder > Training Examples](https://sbert.net/docs/cross_encoder/training/examples.html)\n- [Sparse Encoder > Training Overview](https://sbert.net/docs/sparse_encoder/training_overview.html)\n- [Sparse Encoder > Training Examples](https://sbert.net/docs/sparse_encoder/training/examples.html)\n\n### Hugging Face Hub\n\n- [Sentence Transformers models on the Hub](https://huggingface.co/models?library=sentence-transformers)\n- [Sentence Transformers datasets on the Hub](https://huggingface.co/datasets?other=sentence-transformers)\n- [v5.4 Integrations Collection](https://huggingface.co/collections/sentence-transformers/sentence-transformers-v54-integrations)\n\n### Companion Blogposts\n\nThe training companion to this post and adjacent Sentence Transformers guides:\n\n- [Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-multimodal-sentence-transformers): the direct training companion to this post, with a Visual Document Retrieval walkthrough.\n- [Training and Finetuning Embedding Models with Sentence Transformers](https://huggingface.co/blog/train-sentence-transformers): the general training guide for text-only bi-encoder embedding models.\n- [Training and Finetuning Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-reranker): Cross Encoder (reranker) training, applicable to text-only and multimodal rerankers.\n- [Training and Finetuning Sparse Embedding Models with Sentence Transformers](https://huggingface.co/blog/train-sparse-encoder): SPLADE training for sparse retrieval.\n- [🪆 Introduction to Matryoshka Embedding Models](https://huggingface.co/blog/matryoshka): variable-size embeddings; also applied to multimodal models in the training companion post.\n- [Train 400x faster Static Embedding Models with Sentence Transformers](https://huggingface.co/blog/static-embeddings): CPU-friendly text embedding models.\n- [Binary and Scalar Embedding Quantization for Significantly Faster & Cheaper Retrieval](https://huggingface.co/blog/embedding-quantization): post-training compression of embedding vectors.\n",
  "authors": [],
  "captured_at": "2026-10-04T12:50:30.804479567+00:00",
  "category": "ai",
  "content_html": "<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/\">Sentence Transformers</a> is a Python library for using and training embedding and reranker models for applications like retrieval augmented generation, semantic search, and more. With the v5.4 update, you can now <strong>encode and compare texts, images, audio, and videos</strong> using the same familiar API. In this blogpost, I'll show you how to use these new multimodal capabilities for both embedding and reranking.</p>\n<p>Multimodal embedding models map inputs from different modalities into a shared embedding space, while multimodal reranker models score the relevance of mixed-modality pairs. This opens up use cases like visual document retrieval, cross-modal search, and multimodal RAG pipelines.</p>\n<blockquote>\n<p>If you want to train your own multimodal models, check out the companion blogpost: <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/train-multimodal-sentence-transformers\">Training and Finetuning Multimodal Embedding &amp; Reranker Models with Sentence Transformers</a>.</p>\n</blockquote>\n<h2>Table of Contents</h2>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#what-are-multimodal-models\">What are Multimodal Models?</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#installation\">Installation</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-embedding-models\">Multimodal Embedding Models</a>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#loading-a-model\">Loading a Model</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#encoding-images\">Encoding Images</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#cross-modal-similarity\">Cross-Modal Similarity</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#encoding-queries-and-documents\">Encoding Queries and Documents</a></li>\n</ul>\n</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-reranker-models\">Multimodal Reranker Models</a>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#ranking-mixed-modality-documents\">Ranking Mixed-Modality Documents</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#predicting-pair-scores\">Predicting Pair Scores</a></li>\n</ul>\n</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#retrieve-and-rerank\">Retrieve and Rerank</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#input-formats-and-configuration\">Input Formats and Configuration</a>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types\">Supported Input Types</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#checking-modality-support\">Checking Modality Support</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs\">Processor and Model kwargs</a></li>\n</ul>\n</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#supported-models\">Supported Models</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#additional-resources\">Additional Resources</a></li>\n</ul>\n<h2>What are Multimodal Models?</h2>\n<p>Traditional embedding models convert text into <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/matryoshka#understanding-embeddings\">fixed-size vectors</a>. Multimodal embedding models extend this by mapping inputs from different modalities (text, images, audio, or video) into a shared embedding space. This means you can compare a text query against image documents (or vice versa) using the same similarity functions you're already familiar with.</p>\n<p>Similarly, traditional reranker (Cross Encoder) models compute relevance scores between pairs of texts. Multimodal rerankers can score pairs where one or both elements are images, combined text-image documents, or other modalities.</p>\n<p>For example, you can compare a text query against image documents, find video clips matching a description, or build RAG pipelines that work across modalities.</p>\n<h2>Installation</h2>\n<p>Multimodal models require some extra dependencies. Install the extras for the modalities you need (see <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/installation.html\">Installation</a> for more details):</p>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> For image support</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">pip</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>U</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span>sentence-transformers[image]<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> For audio support</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">pip</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>U</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span>sentence-transformers[audio]<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> For video support</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">pip</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>U</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span>sentence-transformers[video]<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> Mix and match as needed</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">pip</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>U</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span>sentence-transformers[image,video,train]<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n</span></span></code></pre>\n<blockquote>\n<p>VLM-based models like Qwen3-VL-2B require a GPU with at least ~8 GB of VRAM. For the 8B variants, expect ~20 GB. If you don't have a local GPU, consider using a cloud GPU service or Google Colab. On CPU, these models will be extremely slow; text-only or CLIP models are better suited for CPU inference.</p>\n</blockquote>\n<h2>Multimodal Embedding Models</h2>\n<h3>Loading a Model</h3>\n<p>Loading a multimodal embedding model works exactly like loading a text-only model:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n</span></span></code></pre>\n<blockquote>\n<p>Some models might require a <code>revision</code> argument for now if the integration pull requests for the model is still pending. Once they're merged, you'll be able to load them without specifying a revision, like above.</p>\n</blockquote>\n<p>The model automatically detects which modalities it supports, so there's nothing extra to configure. See <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs\">Processor and Model kwargs</a> if you want to control things like image resolution or model precision.</p>\n<h3>Encoding Images</h3>\n<p>With a multimodal model loaded, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode\"><code>model.encode()</code></a> accepts images alongside text. Images can be provided as URLs, local file paths, or PIL Image objects (see <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types\">Supported Input Types</a> for all accepted formats):</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Encode images from URLs\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">img_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">img_embeddings</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">shape</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> (2, 2048)\n</span></span></span></code></pre>\n<h3>Cross-Modal Similarity</h3>\n<p>You can compute similarities between text embeddings and image embeddings, since the model maps both into the same space:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Encode images\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">img_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Encode text queries (one matching + one hard negative per image)\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">text_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A green car parked in front of a yellow building<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A red car driving on a highway<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A bee on a pink flower<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A wasp on a wooden table<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Compute cross-modal similarities\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">similarity</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">text_embeddings</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">img_embeddings</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> tensor([[0.5115, 0.1078],\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span>         [0.1999, 0.1108],\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span>         [0.1255, 0.6749],\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span>         [0.1283, 0.2704]])\n</span></span></span></code></pre>\n<p>As expected, &quot;A green car parked in front of a yellow building&quot; is most similar to the car image (0.51), and &quot;A bee on a pink flower&quot; is most similar to the bee image (0.67). The hard negatives (&quot;A red car driving on a highway&quot;, &quot;A wasp on a wooden table&quot;) correctly receive lower scores.</p>\n<p>You might notice that even the best matching scores (0.51, 0.67) aren't very close to 1.0. This is due to the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://arxiv.org/abs/2203.02053\">modality gap</a>: embeddings from different modalities tend to cluster in separate regions of the space. Cross-modal similarities are typically lower than within-modal ones (e.g., text-to-text), but the relative ordering is preserved, so retrieval still works well.</p>\n<h3>Encoding Queries and Documents</h3>\n<p>For retrieval tasks, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_query\"><code>encode_query()</code></a> and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_document\"><code>encode_document()</code></a> are the recommended methods. Many retrieval models prepend different instruction prompts depending on whether the input is a query or a document, similar to how chat models might apply different system prompts depending on the goal. Model authors can specify their prompts in the model config, and <code>encode_query()</code> / <code>encode_document()</code> automatically load and apply the correct one:</p>\n<ul>\n<li><code>encode_query()</code> uses the model's <code>&quot;query&quot;</code> prompt (if available) and sets <code>task=&quot;query&quot;</code>.</li>\n<li><code>encode_document()</code> uses the first available prompt from <code>&quot;document&quot;</code>, <code>&quot;passage&quot;</code>, or <code>&quot;corpus&quot;</code>, and sets <code>task=&quot;document&quot;</code>.</li>\n</ul>\n<p>Under the hood, both are thin wrappers around <code>encode()</code>, they just handle prompt selection for you. Here's what cross-modal retrieval looks like:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Encode text queries with the query prompt\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode_query</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Find me a photo of a vehicle parked near a building<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Show me an image of a pollinating insect<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Encode document screenshots with the document prompt\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">doc_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode_document</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Compute similarities\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">similarity</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query_embeddings</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">doc_embeddings</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> tensor([[0.3907, 0.1490],\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span>         [0.1235, 0.4872]])\n</span></span></span></code></pre>\n<p>These methods accept the same input types as <code>encode()</code> (images, URLs, multimodal dicts, etc.) and pass through the same parameters. For models without specialized query/document prompts, they behave identically to <code>encode()</code>.</p>\n<h2>Multimodal Reranker Models</h2>\n<p>Multimodal reranker (CrossEncoder) models score the relevance between pairs of inputs, where each element can be text, an image, audio, video, or a combination. They tend to outperform embedding models in terms of quality, but are slower since they process each pair individually. The currently available pretrained multimodal rerankers focus on text and image inputs, but the architecture supports any modality that the underlying model can handle.</p>\n<h3>Ranking Mixed-Modality Documents</h3>\n<p>The <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.rank\"><code>rank()</code></a> method scores and ranks a list of documents against a query, supporting mixed modalities:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">CrossEncoder</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">CrossEncoder</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Reranker-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A green car parked in front of a yellow building<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">documents</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Image documents (URL or local file path)\n</span>    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Text document\n</span>    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A vintage Volkswagen Beetle painted in bright green sits in a driveway.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Combined text + image document\n</span>    <span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span>\n        <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">text<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A car in a European city<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span>\n        <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span>\n    <span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rankings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">rank</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">documents</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-python\">for</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span> <span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-in syntax-python\">in</span></span></span><span class=\"syntax-meta syntax-statement syntax-for syntax-python\"> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rankings</span></span><span class=\"syntax-punctuation syntax-section syntax-block syntax-for syntax-python\">:</span></span>\n    <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-storage syntax-type syntax-string syntax-python\">f</span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">score<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span><span class=\"syntax-meta syntax-format-spec syntax-python\"><span class=\"syntax-constant syntax-other syntax-format-spec syntax-python\">:.4f</span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-constant syntax-character syntax-escape syntax-python\">\\t</span>(document </span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">corpus_id<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">)<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-block syntax-documentation syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-python\">&quot;&quot;&quot;</span>\n0.9375  (document 0)\n0.5000  (document 3)\n-1.2500 (document 2)\n-2.4375 (document 1)\n<span class=\"syntax-punctuation syntax-definition syntax-comment syntax-end syntax-python\">&quot;&quot;&quot;</span></span>\n</span></span></code></pre>\n<p>The reranker correctly identifies the car image (document 0) as the most relevant result, followed by the combined text+image document about a car in a European city (document 3). The bee image (document 1) scores lowest. Keep in mind that the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://arxiv.org/abs/2203.02053\">modality gap</a> can influence absolute scores: text-image pair scores may occupy a different range than text-text or image-image pair scores.</p>\n<p>You can also check which modalities a reranker supports using <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.modalities\"><code>modalities</code></a> and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.supports\"><code>supports()</code></a>, just like with embedding models:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">modalities</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> [&#39;text&#39;, &#39;image&#39;, &#39;video&#39;, &#39;message&#39;]\n</span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">supports</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> True\n</span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Check if the model supports a specific pair of modalities\n</span><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">supports</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-group syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-tuple syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">text<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-group syntax-end syntax-python\">)</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> True\n</span></span></span></code></pre>\n<h3>Predicting Pair Scores</h3>\n<p>You can also use <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.predict\"><code>predict()</code></a> to get raw relevance scores for specific pairs of inputs:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">CrossEncoder</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">CrossEncoder</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">jinaai/jina-reranker-m0<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-variable syntax-parameter syntax-python\">trust_remote_code</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-constant syntax-language syntax-python\">True</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">scores</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">predict</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-group syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A green car<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-tuple syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-group syntax-end syntax-python\">)</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-group syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A bee on a flower<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-tuple syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-group syntax-end syntax-python\">)</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-group syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A green car<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-tuple syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-group syntax-end syntax-python\">)</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">scores</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> [0.9389156  0.96922314 0.46063158]\n</span></span></span></code></pre>\n<h2>Retrieve and Rerank</h2>\n<p>A common pattern is to use an embedding model for fast initial retrieval, then refine the top results with a reranker:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span><span class=\"syntax-punctuation syntax-separator syntax-import-list syntax-python\">,</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">CrossEncoder</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Step 1: Retrieve with an embedding model\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">embedder</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">revenue growth chart<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query_embedding</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">embedder</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode_query</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Pre-compute corpus embeddings (do this once, then store them)\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">document_screenshots</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">path/to/doc1.png<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">path/to/doc2.png<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> ... potentially millions of document screenshots\n</span><span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">corpus_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">embedder</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode_document</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">document_screenshots</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-variable syntax-parameter syntax-python\">show_progress_bar</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-constant syntax-language syntax-python\">True</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Simple cosine similarity retrieval, viable as long as embeddings fit in memory\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">embedder</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">similarity</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query_embedding</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">corpus_embeddings</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">top_k_indices</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">argsort</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-variable syntax-parameter syntax-python\">descending</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-constant syntax-language syntax-python\">True</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">0</span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-punctuation syntax-separator syntax-slice syntax-python\">:</span><span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">10</span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Step 2: Rerank the top-k results with a reranker model\n</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">reranker</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">CrossEncoder</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">nvidia/llama-nemotron-rerank-vl-1b-v2<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-variable syntax-parameter syntax-python\">trust_remote_code</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-constant syntax-language syntax-python\">True</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">top_k_documents</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">document_screenshots</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">i</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span> <span class=\"syntax-meta syntax-expression syntax-generator syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-generator syntax-python\">for</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">i</span> <span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-in syntax-python\">in</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">top_k_indices</span></span><span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rankings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">reranker</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">rank</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">top_k_documents</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-python\">for</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span> <span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-in syntax-python\">in</span></span></span><span class=\"syntax-meta syntax-statement syntax-for syntax-python\"> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rankings</span></span><span class=\"syntax-punctuation syntax-section syntax-block syntax-for syntax-python\">:</span></span>\n    <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-storage syntax-type syntax-string syntax-python\">f</span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">score<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span><span class=\"syntax-meta syntax-format-spec syntax-python\"><span class=\"syntax-constant syntax-other syntax-format-spec syntax-python\">:.4f</span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-constant syntax-character syntax-escape syntax-python\">\\t</span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">top_k_documents</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">corpus_id<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n</span></span></code></pre>\n<p>Since the corpus embeddings are pre-computed, the initial retrieval is fast even over millions of documents. The reranker then provides more accurate scoring over the smaller candidate set.</p>\n<h2>Input Formats and Configuration</h2>\n<h3>Supported Input Types</h3>\n<p>Multimodal models accept a variety of input formats. Here's a summary of what you can pass to <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode\"><code>model.encode()</code></a>:</p>\n<table>\n<thead>\n<tr>\n<th>Modality</th>\n<th>Accepted Formats</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Text</strong></td>\n<td>- Strings</td>\n</tr>\n<tr>\n<td><strong>Image</strong></td>\n<td>- <code>PIL.Image.Image</code> objects - File paths (e.g. <code>&quot;./photo.jpg&quot;</code>) - URLs (e.g. <code>&quot;https://.../image.jpg&quot;</code>) - Numpy arrays, torch tensors</td>\n</tr>\n<tr>\n<td><strong>Audio</strong></td>\n<td>- File paths (e.g. <code>&quot;./audio.wav&quot;</code>) - URLs (e.g. <code>&quot;https://.../audio.wav&quot;</code>) - Numpy/torch arrays - Dicts with <code>&quot;array&quot;</code> and <code>&quot;sampling_rate&quot;</code> keys - <code>torchcodec.AudioDecoder</code> instances</td>\n</tr>\n<tr>\n<td><strong>Video</strong></td>\n<td>- File paths (e.g. <code>&quot;./video.mp4&quot;</code>) - URLs (e.g. <code>&quot;https://.../video.mp4&quot;</code>) - Numpy/torch arrays - Dicts with <code>&quot;array&quot;</code> and <code>&quot;video_metadata&quot;</code> keys - <code>torchcodec.VideoDecoder</code> instances</td>\n</tr>\n<tr>\n<td><strong>Multimodal</strong></td>\n<td>- Dicts mapping modality names to values, e.g. <code>{&quot;text&quot;: &quot;a caption&quot;, &quot;image&quot;: &quot;https://.../image.jpg&quot;}</code> Valid keys: <code>&quot;text&quot;</code>, <code>&quot;image&quot;</code>, <code>&quot;audio&quot;</code>, <code>&quot;video&quot;</code></td>\n</tr>\n<tr>\n<td><strong>Message</strong></td>\n<td>- List of message dicts with <code>&quot;role&quot;</code> and <code>&quot;content&quot;</code> keys, e.g. <code>[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: [...]}]</code></td>\n</tr>\n</tbody>\n</table>\n<h3>Checking Modality Support</h3>\n<p>You can check which modalities a model supports using the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.modalities\"><code>modalities</code></a> property and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.supports\"><code>supports()</code></a> method:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> List all supported modalities\n</span><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">modalities</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> [&#39;text&#39;, &#39;image&#39;, &#39;video&#39;, &#39;message&#39;]\n</span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> Check for a specific modality\n</span><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">supports</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> True\n</span><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">supports</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">audio<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> False\n</span></span></span></code></pre>\n<p>The <code>&quot;message&quot;</code> modality indicates that the model accepts chat-style message inputs with interleaved content. In practice, you rarely need to use this directly. When you pass strings, URLs, or multimodal dicts, the model converts them to the appropriate message format internally. Sentence Transformers supports two message formats:</p>\n<ul>\n<li><strong>Structured</strong> (most VLMs, e.g. Qwen3-VL): Content is a list of typed dicts, e.g. <code>[{&quot;type&quot;: &quot;text&quot;, &quot;text&quot;: &quot;...&quot;}, {&quot;type&quot;: &quot;image&quot;, &quot;image&quot;: ...}]</code></li>\n<li><strong>Flat</strong> (e.g. Deepseek-V3): Content is a direct value, e.g. <code>&quot;some text&quot;</code></li>\n</ul>\n<p>The format is auto-detected from the model's chat template.</p>\n<p>Since all inputs get converted into the same message format internally, you can mix input types in a single <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode\"><code>encode()</code></a> call:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> A text input\n</span>    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A green car parked in front of a yellow building<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> An image input (URL)\n</span>    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> A combined text + image input\n</span>    <span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span>\n        <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">text<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A car in a European city<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span>\n        <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span>\n    <span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n</span></span></code></pre>\n<p>Click here if you need to pass raw message inputs</p>\n<p>If a model doesn't follow either format and you need full control, you can pass raw message dicts with <code>role</code> and <code>content</code> keys directly:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n        <span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span>\n            <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">role<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">user<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span>\n            <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">content<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n                <span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">type<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">image<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n                <span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">type<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">text<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">text<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Describe this vehicle.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n            <span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span>\n        <span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span>\n    <span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n</span></span></code></pre>\n<p>This bypasses the automatic format conversion and passes the messages directly to the processor's <code>apply_chat_template()</code>.</p>\n<h3>Processor and Model kwargs</h3>\n<p>You may want to control image resolution bounds or model precision. Use <code>processor_kwargs</code> and <code>model_kwargs</code> when loading the model:</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\">\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Qwen/Qwen3-VL-Embedding-2B<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span>\n    <span class=\"syntax-variable syntax-parameter syntax-python\">model_kwargs</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">attn_implementation<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">flash_attention_2<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">torch_dtype<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">bfloat16<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span>\n    <span class=\"syntax-variable syntax-parameter syntax-python\">processor_kwargs</span><span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span><span class=\"syntax-meta syntax-structure syntax-dictionary-or-set syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-begin syntax-python\">{</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">min_pixels<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">28</span> <span class=\"syntax-keyword syntax-operator syntax-arithmetic syntax-python\">*</span> <span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">28</span><span class=\"syntax-punctuation syntax-separator syntax-dictionary-or-set syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">max_pixels<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-python\">:</span> <span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">600</span> <span class=\"syntax-keyword syntax-operator syntax-arithmetic syntax-python\">*</span> <span class=\"syntax-constant syntax-numeric syntax-integer syntax-decimal syntax-python\">600</span><span class=\"syntax-punctuation syntax-section syntax-dictionary-or-set syntax-end syntax-python\">}</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span>\n</span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n</span></span></code></pre>\n<ul>\n<li><code>processor_kwargs</code> controls how inputs are preprocessed (e.g., image resolution bounds). Higher <code>max_pixels</code> means higher quality but more memory and compute. These are passed directly to <code>AutoProcessor.from_pretrained(...)</code>.</li>\n<li><code>model_kwargs</code> controls how the underlying model is loaded (e.g., precision, attention implementation). These are passed directly to the appropriate <code>AutoModel.from_pretrained(...)</code> call (e.g., <code>AutoModel</code>, <code>AutoModelForCausalLM</code>, <code>AutoModelForSequenceClassification</code>, etc., depending on the configuration of the model modules).</li>\n</ul>\n<p>See the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer\">SentenceTransformer</a> API Reference documentation for more details on these kwargs.</p>\n<blockquote>\n<p>In Sentence Transformers v5.4, <code>tokenizer_kwargs</code> has been renamed to <code>processor_kwargs</code> to reflect that multimodal models use processors rather than just tokenizers. The old name is still accepted but deprecated.</p>\n</blockquote>\n<h2>Supported Models</h2>\n<p>Here are the multimodal models supported in v5.4, also available in the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/collections/sentence-transformers/sentence-transformers-v54-integrations\">v5.4 integrations collection</a>:</p>\n<h3>Supported Multimodal Embedding Models</h3>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Parameters</th>\n<th>Modalities</th>\n<th>Revision</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-VL-Embedding-2B\">Qwen/Qwen3-VL-Embedding-2B</a></td>\n<td>2B</td>\n<td>Text, Image, Video</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-VL-Embedding-8B\">Qwen/Qwen3-VL-Embedding-8B</a></td>\n<td>8B</td>\n<td>Text, Image, Video</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/nvidia/llama-nemotron-embed-vl-1b-v2\">nvidia/llama-nemotron-embed-vl-1b-v2</a></td>\n<td>1.7B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/nvidia/omni-embed-nemotron-3b\">nvidia/omni-embed-nemotron-3b</a></td>\n<td>4.7B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/LCO-Embedding/LCO-Embedding-Omni-3B\">LCO-Embedding/LCO-Embedding-Omni-3B</a></td>\n<td>5B</td>\n<td>Text, Image, Audio, Video</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/LCO-Embedding/LCO-Embedding-Omni-7B\">LCO-Embedding/LCO-Embedding-Omni-7B</a></td>\n<td>9B</td>\n<td>Text, Image, Audio, Video</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BidirLM/BidirLM-Omni-2.5B-Embedding\">BidirLM/BidirLM-Omni-2.5B-Embedding</a></td>\n<td>2.5B</td>\n<td>Text, Image, Audio</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-base\">BAAI/BGE-VL-base</a></td>\n<td>0.1B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-large\">BAAI/BGE-VL-large</a></td>\n<td>0.4B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-MLLM-S1\">BAAI/BGE-VL-MLLM-S1</a></td>\n<td>8B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-MLLM-S2\">BAAI/BGE-VL-MLLM-S2</a></td>\n<td>8B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-v1.5-zs\">BAAI/BGE-VL-v1.5-zs</a></td>\n<td>8B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-v1.5-mmeb\">BAAI/BGE-VL-v1.5-mmeb</a></td>\n<td>8B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/BAAI/BGE-VL-Screenshot\">BAAI/BGE-VL-Screenshot</a></td>\n<td>4B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/royokong/e5-v\">royokong/e5-v</a></td>\n<td>8B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/eagerworks/eager-embed-v1\">eagerworks/eager-embed-v1</a></td>\n<td>4B</td>\n<td>Text, Image</td>\n<td><code>revision=&quot;refs/pr/2&quot;</code></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/nomic-ai/nomic-embed-multimodal-3b\">nomic-ai/nomic-embed-multimodal-3b</a></td>\n<td>5B</td>\n<td>Text, Image</td>\n<td><code>revision=&quot;refs/pr/4&quot;</code></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/nomic-ai/nomic-embed-multimodal-7b\">nomic-ai/nomic-embed-multimodal-7b</a></td>\n<td>9B</td>\n<td>Text, Image</td>\n<td><code>revision=&quot;refs/pr/3&quot;</code></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Haon-Chen/e5-omni-3B\">Haon-Chen/e5-omni-3B</a></td>\n<td>5B</td>\n<td>Text, Image, Audio, Video</td>\n<td><code>revision=&quot;refs/pr/2&quot;</code></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Haon-Chen/e5-omni-7B\">Haon-Chen/e5-omni-7B</a></td>\n<td>9B</td>\n<td>Text, Image, Audio, Video</td>\n<td><code>revision=&quot;refs/pr/1&quot;</code></td>\n</tr>\n</tbody>\n</table>\n<h3>Supported Multimodal Reranker Models</h3>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Parameters</th>\n<th>Modalities</th>\n<th>Revision</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-VL-Reranker-2B\">Qwen/Qwen3-VL-Reranker-2B</a></td>\n<td>2B</td>\n<td>Text, Image, Video</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-VL-Reranker-8B\">Qwen/Qwen3-VL-Reranker-8B</a></td>\n<td>8B</td>\n<td>Text, Image, Video</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/nvidia/llama-nemotron-rerank-vl-1b-v2\">nvidia/llama-nemotron-rerank-vl-1b-v2</a></td>\n<td>2B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/jinaai/jina-reranker-m0\">jinaai/jina-reranker-m0</a></td>\n<td>2B</td>\n<td>Text, Image</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n</tbody>\n</table>\n<h3>Text-Only Reranker Models (also new in v5.4)</h3>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Parameters</th>\n<th>Revision</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-Reranker-0.6B\">Qwen/Qwen3-Reranker-0.6B</a></td>\n<td>0.6B</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-Reranker-4B\">Qwen/Qwen3-Reranker-4B</a></td>\n<td>4B</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-Reranker-8B\">Qwen/Qwen3-Reranker-8B</a></td>\n<td>8B</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/mixedbread-ai/mxbai-rerank-base-v2\">mixedbread-ai/mxbai-rerank-base-v2</a></td>\n<td>0.5B</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/mixedbread-ai/mxbai-rerank-large-v2\">mixedbread-ai/mxbai-rerank-large-v2</a></td>\n<td>2B</td>\n<td>No <code>revision</code> needed</td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-1b\">ContextualAI/ctxl-rerank-v2-instruct-multilingual-1b</a></td>\n<td>1B</td>\n<td><code>revision=&quot;refs/pr/2&quot;</code></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b\">ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b</a></td>\n<td>3B</td>\n<td><code>revision=&quot;refs/pr/1&quot;</code></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-6b\">ContextualAI/ctxl-rerank-v2-instruct-multilingual-6b</a></td>\n<td>7B</td>\n<td><code>revision=&quot;refs/pr/1&quot;</code></td>\n</tr>\n</tbody>\n</table>\n<p>Click here for a text-only reranker usage example</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">CrossEncoder</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">CrossEncoder</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">mixedbread-ai/mxbai-rerank-base-v2<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">How do I bake sourdough bread?<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">documents</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Sourdough bread requires a starter made from flour and water, fermented over several days.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">The history of bread dates back to ancient Egypt around 8000 BCE.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Rye bread is a popular alternative to wheat-based breads in Northern Europe.<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">pairs</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span><span class=\"syntax-meta syntax-group syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span><span class=\"syntax-punctuation syntax-separator syntax-tuple syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">doc</span></span><span class=\"syntax-punctuation syntax-section syntax-group syntax-end syntax-python\">)</span></span> <span class=\"syntax-meta syntax-expression syntax-generator syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-generator syntax-python\">for</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">doc</span> <span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-in syntax-python\">in</span></span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">documents</span></span><span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">scores</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">predict</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">pairs</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">scores</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> [ 7.3077507 -2.6217823  8.724761  -2.2488995]\n</span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rankings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">rank</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">query</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">documents</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-python\">for</span> <span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span> <span class=\"syntax-meta syntax-statement syntax-for syntax-python\"><span class=\"syntax-keyword syntax-control syntax-flow syntax-for syntax-in syntax-python\">in</span></span></span><span class=\"syntax-meta syntax-statement syntax-for syntax-python\"> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rankings</span></span><span class=\"syntax-punctuation syntax-section syntax-block syntax-for syntax-python\">:</span></span>\n    <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-storage syntax-type syntax-string syntax-python\">f</span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-interpolated syntax-python\"><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">score<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span><span class=\"syntax-meta syntax-format-spec syntax-python\"><span class=\"syntax-constant syntax-other syntax-format-spec syntax-python\">:.4f</span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-constant syntax-character syntax-escape syntax-python\">\\t</span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-begin syntax-python\">{</span><span class=\"syntax-source syntax-python syntax-embedded\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">documents</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">rank</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-begin syntax-python\">[</span></span><span class=\"syntax-meta syntax-item-access syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&#39;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-single syntax-python\">corpus_id<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&#39;</span></span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span><span class=\"syntax-meta syntax-item-access syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-brackets syntax-end syntax-python\">]</span></span></span></span><span class=\"syntax-meta syntax-interpolation syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-interpolation syntax-end syntax-python\">}</span></span><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> 8.7248  To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> 7.3078  Sourdough bread requires a starter made from flour and water, fermented over several days.\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> -2.2489 Rye bread is a popular alternative to wheat-based breads in Northern Europe.\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> -2.6218 The history of bread dates back to ancient Egypt around 8000 BCE.\n</span></span></span></code></pre>\n<h3>CLIP Models</h3>\n<p>The older CLIP models continue to be supported:</p>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>ImageNet Zero-Shot Top-1 Accuracy</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/sentence-transformers/clip-ViT-L-14\">sentence-transformers/clip-ViT-L-14</a></td>\n<td>75.4</td>\n<td></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/sentence-transformers/clip-ViT-B-16\">sentence-transformers/clip-ViT-B-16</a></td>\n<td>68.1</td>\n<td></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/sentence-transformers/clip-ViT-B-32\">sentence-transformers/clip-ViT-B-32</a></td>\n<td>63.3</td>\n<td></td>\n</tr>\n<tr>\n<td><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1\">sentence-transformers/clip-ViT-B-32-multilingual-v1</a></td>\n<td>N/A</td>\n<td>Multilingual text encoder, 50+ languages</td>\n</tr>\n</tbody>\n</table>\n<p>These simple CLIP models still work well on lower-resource hardware.</p>\n<p>Click here for a CLIP usage example</p>\n<pre><code class=\"language-python\"><span class=\"code-snippet\" data-language=\"Python\"><span class=\"syntax-source syntax-python\"><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-from syntax-python\">from</span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-meta syntax-import-source syntax-python\"> <span class=\"syntax-meta syntax-import-path syntax-python\"><span class=\"syntax-meta syntax-import-name syntax-python\">sentence_transformers</span></span> <span class=\"syntax-meta syntax-statement syntax-import syntax-python\"><span class=\"syntax-keyword syntax-control syntax-import syntax-python\">import</span></span></span></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"></span><span class=\"syntax-meta syntax-statement syntax-import syntax-python\"> <span class=\"syntax-meta syntax-generic-name syntax-python\">SentenceTransformer</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">SentenceTransformer</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">sentence-transformers/clip-ViT-L-14<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">images</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span>\n    <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">https://huggingface.co/datasets/huggingface/cats-image/resolve/main/cats_image.jpeg<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span>\n<span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">texts</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-structure syntax-list syntax-python\"><span class=\"syntax-punctuation syntax-section syntax-list syntax-begin syntax-python\">[</span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A green car<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">A bee on a flower<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">Some cats on a couch<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-separator syntax-list syntax-python\">,</span> <span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-python\">&quot;</span></span></span><span class=\"syntax-meta syntax-string syntax-python\"><span class=\"syntax-string syntax-quoted syntax-double syntax-python\">One cat sitting in the window<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-python\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-section syntax-list syntax-end syntax-python\">]</span></span>\n\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">image_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">images</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">text_embeddings</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">encode</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">texts</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">image_embeddings</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">shape</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">text_embeddings</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span><span class=\"syntax-meta syntax-generic-name syntax-python\">shape</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> (3, 768) (4, 768)\n</span>\n<span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-python\">=</span> <span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">model</span><span class=\"syntax-punctuation syntax-accessor syntax-dot syntax-python\">.</span></span><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-variable syntax-function syntax-python\">similarity</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">image_embeddings</span></span><span class=\"syntax-punctuation syntax-separator syntax-arguments syntax-python\">,</span> <span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">text_embeddings</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-meta syntax-function-call syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-support syntax-function syntax-builtin syntax-python\">print</span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-begin syntax-python\">(</span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-python\"><span class=\"syntax-meta syntax-qualified-name syntax-python\"><span class=\"syntax-meta syntax-generic-name syntax-python\">similarities</span></span></span><span class=\"syntax-punctuation syntax-section syntax-arguments syntax-end syntax-python\">)</span></span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span> tensor([[0.2208, 0.1042, 0.0617, 0.0907],  First image (car) is most similar to &quot;A green car&quot;\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span>         [0.1205, 0.2303, 0.0632, 0.0917],  Second image (bee) is most similar to &quot;A bee on a flower&quot;\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-python\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-python\">#</span>         [0.1107, 0.0196, 0.2425, 0.1162]]) Third image (multiple cats) is most similar to &quot;Some cats on a couch&quot;\n</span></span></span></code></pre>\n<h2>Additional Resources</h2>\n<h3>Documentation</h3>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/sentence_transformer/usage/usage.html\">Sentence Transformer &gt; Usage</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/sentence_transformer/pretrained_models.html\">Sentence Transformer &gt; Pretrained Models</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/cross_encoder/usage/usage.html\">Cross Encoder &gt; Usage</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/cross_encoder/pretrained_models.html\">Cross Encoder &gt; Pretrained Models</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/installation.html\">Installation</a></li>\n</ul>\n<h3>Training</h3>\n<p>To learn how to finetune these multimodal models on your own data, see the companion blogpost: <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/train-multimodal-sentence-transformers\">Training and Finetuning Multimodal Embedding &amp; Reranker Models with Sentence Transformers</a>.</p>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/sentence_transformer/training_overview.html\">Sentence Transformer &gt; Training Overview</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/sentence_transformer/training/examples.html\">Sentence Transformer &gt; Training Examples</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/cross_encoder/training_overview.html\">Cross Encoder &gt; Training Overview</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/cross_encoder/training/examples.html\">Cross Encoder &gt; Training Examples</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/sparse_encoder/training_overview.html\">Sparse Encoder &gt; Training Overview</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sbert.net/docs/sparse_encoder/training/examples.html\">Sparse Encoder &gt; Training Examples</a></li>\n</ul>\n<h3>Hugging Face Hub</h3>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/models?library=sentence-transformers\">Sentence Transformers models on the Hub</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/datasets?other=sentence-transformers\">Sentence Transformers datasets on the Hub</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/collections/sentence-transformers/sentence-transformers-v54-integrations\">v5.4 Integrations Collection</a></li>\n</ul>\n<h3>Companion Blogposts</h3>\n<p>The training companion to this post and adjacent Sentence Transformers guides:</p>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/train-multimodal-sentence-transformers\">Training and Finetuning Multimodal Embedding &amp; Reranker Models with Sentence Transformers</a>: the direct training companion to this post, with a Visual Document Retrieval walkthrough.</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/train-sentence-transformers\">Training and Finetuning Embedding Models with Sentence Transformers</a>: the general training guide for text-only bi-encoder embedding models.</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/train-reranker\">Training and Finetuning Reranker Models with Sentence Transformers</a>: Cross Encoder (reranker) training, applicable to text-only and multimodal rerankers.</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/train-sparse-encoder\">Training and Finetuning Sparse Embedding Models with Sentence Transformers</a>: SPLADE training for sparse retrieval.</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/matryoshka\">🪆 Introduction to Matryoshka Embedding Models</a>: variable-size embeddings; also applied to multimodal models in the training companion post.</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/static-embeddings\">Train 400x faster Static Embedding Models with Sentence Transformers</a>: CPU-friendly text embedding models.</li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/embedding-quantization\">Binary and Scalar Embedding Quantization for Significantly Faster &amp; Cheaper Retrieval</a>: post-training compression of embedding vectors.</li>\n</ul>\n",
  "content_markdown": "[Sentence Transformers](https://sbert.net/) is a Python library for using and training embedding and reranker models for applications like retrieval augmented generation, semantic search, and more. With the v5.4 update, you can now **encode and compare texts, images, audio, and videos** using the same familiar API. In this blogpost, I'll show you how to use these new multimodal capabilities for both embedding and reranking.\n\nMultimodal embedding models map inputs from different modalities into a shared embedding space, while multimodal reranker models score the relevance of mixed-modality pairs. This opens up use cases like visual document retrieval, cross-modal search, and multimodal RAG pipelines.\n\n> If you want to train your own multimodal models, check out the companion blogpost: [Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-multimodal-sentence-transformers).\n\n## Table of Contents\n\n- [What are Multimodal Models?](https://huggingface.co/blog/multimodal-sentence-transformers#what-are-multimodal-models)\n- [Installation](https://huggingface.co/blog/multimodal-sentence-transformers#installation)\n- [Multimodal Embedding Models](https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-embedding-models)\n  - [Loading a Model](https://huggingface.co/blog/multimodal-sentence-transformers#loading-a-model)\n  - [Encoding Images](https://huggingface.co/blog/multimodal-sentence-transformers#encoding-images)\n  - [Cross-Modal Similarity](https://huggingface.co/blog/multimodal-sentence-transformers#cross-modal-similarity)\n  - [Encoding Queries and Documents](https://huggingface.co/blog/multimodal-sentence-transformers#encoding-queries-and-documents)\n- [Multimodal Reranker Models](https://huggingface.co/blog/multimodal-sentence-transformers#multimodal-reranker-models)\n  - [Ranking Mixed-Modality Documents](https://huggingface.co/blog/multimodal-sentence-transformers#ranking-mixed-modality-documents)\n  - [Predicting Pair Scores](https://huggingface.co/blog/multimodal-sentence-transformers#predicting-pair-scores)\n- [Retrieve and Rerank](https://huggingface.co/blog/multimodal-sentence-transformers#retrieve-and-rerank)\n- [Input Formats and Configuration](https://huggingface.co/blog/multimodal-sentence-transformers#input-formats-and-configuration)\n  - [Supported Input Types](https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types)\n  - [Checking Modality Support](https://huggingface.co/blog/multimodal-sentence-transformers#checking-modality-support)\n  - [Processor and Model kwargs](https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs)\n- [Supported Models](https://huggingface.co/blog/multimodal-sentence-transformers#supported-models)\n- [Additional Resources](https://huggingface.co/blog/multimodal-sentence-transformers#additional-resources)\n\n## What are Multimodal Models?\n\nTraditional embedding models convert text into [fixed-size vectors](https://huggingface.co/blog/matryoshka#understanding-embeddings). Multimodal embedding models extend this by mapping inputs from different modalities (text, images, audio, or video) into a shared embedding space. This means you can compare a text query against image documents (or vice versa) using the same similarity functions you're already familiar with.\n\nSimilarly, traditional reranker (Cross Encoder) models compute relevance scores between pairs of texts. Multimodal rerankers can score pairs where one or both elements are images, combined text-image documents, or other modalities.\n\nFor example, you can compare a text query against image documents, find video clips matching a description, or build RAG pipelines that work across modalities.\n\n## Installation\n\nMultimodal models require some extra dependencies. Install the extras for the modalities you need (see [Installation](https://sbert.net/docs/installation.html) for more details):\n\n```bash\n# For image support\npip install -U \"sentence-transformers[image]\"\n\n# For audio support\npip install -U \"sentence-transformers[audio]\"\n\n# For video support\npip install -U \"sentence-transformers[video]\"\n\n# Mix and match as needed\npip install -U \"sentence-transformers[image,video,train]\"\n```\n\n> VLM-based models like Qwen3-VL-2B require a GPU with at least ~8 GB of VRAM. For the 8B variants, expect ~20 GB. If you don't have a local GPU, consider using a cloud GPU service or Google Colab. On CPU, these models will be extremely slow; text-only or CLIP models are better suited for CPU inference.\n\n## Multimodal Embedding Models\n\n### Loading a Model\n\nLoading a multimodal embedding model works exactly like loading a text-only model:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n```\n\n> Some models might require a `revision` argument for now if the integration pull requests for the model is still pending. Once they're merged, you'll be able to load them without specifying a revision, like above.\n\nThe model automatically detects which modalities it supports, so there's nothing extra to configure. See [Processor and Model kwargs](https://huggingface.co/blog/multimodal-sentence-transformers#processor-and-model-kwargs) if you want to control things like image resolution or model precision.\n\n### Encoding Images\n\nWith a multimodal model loaded, [`model.encode()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode) accepts images alongside text. Images can be provided as URLs, local file paths, or PIL Image objects (see [Supported Input Types](https://huggingface.co/blog/multimodal-sentence-transformers#supported-input-types) for all accepted formats):\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# Encode images from URLs\nimg_embeddings = model.encode([\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n])\nprint(img_embeddings.shape)\n# (2, 2048)\n```\n\n### Cross-Modal Similarity\n\nYou can compute similarities between text embeddings and image embeddings, since the model maps both into the same space:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# Encode images\nimg_embeddings = model.encode([\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n])\n\n# Encode text queries (one matching + one hard negative per image)\ntext_embeddings = model.encode([\n    \"A green car parked in front of a yellow building\",\n    \"A red car driving on a highway\",\n    \"A bee on a pink flower\",\n    \"A wasp on a wooden table\",\n])\n\n# Compute cross-modal similarities\nsimilarities = model.similarity(text_embeddings, img_embeddings)\nprint(similarities)\n# tensor([[0.5115, 0.1078],\n#         [0.1999, 0.1108],\n#         [0.1255, 0.6749],\n#         [0.1283, 0.2704]])\n```\n\nAs expected, \"A green car parked in front of a yellow building\" is most similar to the car image (0.51), and \"A bee on a pink flower\" is most similar to the bee image (0.67). The hard negatives (\"A red car driving on a highway\", \"A wasp on a wooden table\") correctly receive lower scores.\n\nYou might notice that even the best matching scores (0.51, 0.67) aren't very close to 1.0. This is due to the [modality gap](https://arxiv.org/abs/2203.02053): embeddings from different modalities tend to cluster in separate regions of the space. Cross-modal similarities are typically lower than within-modal ones (e.g., text-to-text), but the relative ordering is preserved, so retrieval still works well.\n\n### Encoding Queries and Documents\n\nFor retrieval tasks, [`encode_query()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_query) and [`encode_document()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode_document) are the recommended methods. Many retrieval models prepend different instruction prompts depending on whether the input is a query or a document, similar to how chat models might apply different system prompts depending on the goal. Model authors can specify their prompts in the model config, and `encode_query()` / `encode_document()` automatically load and apply the correct one:\n\n- `encode_query()` uses the model's `\"query\"` prompt (if available) and sets `task=\"query\"`.\n- `encode_document()` uses the first available prompt from `\"document\"`, `\"passage\"`, or `\"corpus\"`, and sets `task=\"document\"`.\n\nUnder the hood, both are thin wrappers around `encode()`, they just handle prompt selection for you. Here's what cross-modal retrieval looks like:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# Encode text queries with the query prompt\nquery_embeddings = model.encode_query([\n    \"Find me a photo of a vehicle parked near a building\",\n    \"Show me an image of a pollinating insect\",\n])\n\n# Encode document screenshots with the document prompt\ndoc_embeddings = model.encode_document([\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n])\n\n# Compute similarities\nsimilarities = model.similarity(query_embeddings, doc_embeddings)\nprint(similarities)\n# tensor([[0.3907, 0.1490],\n#         [0.1235, 0.4872]])\n```\n\nThese methods accept the same input types as `encode()` (images, URLs, multimodal dicts, etc.) and pass through the same parameters. For models without specialized query/document prompts, they behave identically to `encode()`.\n\n## Multimodal Reranker Models\n\nMultimodal reranker (CrossEncoder) models score the relevance between pairs of inputs, where each element can be text, an image, audio, video, or a combination. They tend to outperform embedding models in terms of quality, but are slower since they process each pair individually. The currently available pretrained multimodal rerankers focus on text and image inputs, but the architecture supports any modality that the underlying model can handle.\n\n### Ranking Mixed-Modality Documents\n\nThe [`rank()`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.rank) method scores and ranks a list of documents against a query, supporting mixed modalities:\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nmodel = CrossEncoder(\"Qwen/Qwen3-VL-Reranker-2B\")\n\nquery = \"A green car parked in front of a yellow building\"\ndocuments = [\n    # Image documents (URL or local file path)\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n    # Text document\n    \"A vintage Volkswagen Beetle painted in bright green sits in a driveway.\",\n    # Combined text + image document\n    {\n        \"text\": \"A car in a European city\",\n        \"image\": \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    },\n]\n\nrankings = model.rank(query, documents)\nfor rank in rankings:\n    print(f\"{rank['score']:.4f}\\t(document {rank['corpus_id']})\")\n\"\"\"\n0.9375  (document 0)\n0.5000  (document 3)\n-1.2500 (document 2)\n-2.4375 (document 1)\n\"\"\"\n```\n\nThe reranker correctly identifies the car image (document 0) as the most relevant result, followed by the combined text+image document about a car in a European city (document 3). The bee image (document 1) scores lowest. Keep in mind that the [modality gap](https://arxiv.org/abs/2203.02053) can influence absolute scores: text-image pair scores may occupy a different range than text-text or image-image pair scores.\n\nYou can also check which modalities a reranker supports using [`modalities`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.modalities) and [`supports()`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.supports), just like with embedding models:\n\n```python\nprint(model.modalities)\n# ['text', 'image', 'video', 'message']\n\nprint(model.supports(\"image\"))\n# True\n\n# Check if the model supports a specific pair of modalities\nprint(model.supports((\"image\", \"text\")))\n# True\n```\n\n### Predicting Pair Scores\n\nYou can also use [`predict()`](https://sbert.net/docs/package_reference/cross_encoder/cross_encoder.html#sentence_transformers.cross_encoder.CrossEncoder.predict) to get raw relevance scores for specific pairs of inputs:\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nmodel = CrossEncoder(\"jinaai/jina-reranker-m0\", trust_remote_code=True)\n\nscores = model.predict([\n    (\"A green car\", \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\"),\n    (\"A bee on a flower\", \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\"),\n    (\"A green car\", \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\"),\n])\nprint(scores)\n# [0.9389156  0.96922314 0.46063158]\n```\n\n## Retrieve and Rerank\n\nA common pattern is to use an embedding model for fast initial retrieval, then refine the top results with a reranker:\n\n```python\nfrom sentence_transformers import SentenceTransformer, CrossEncoder\n\n# Step 1: Retrieve with an embedding model\nembedder = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\nquery = \"revenue growth chart\"\nquery_embedding = embedder.encode_query(query)\n\n# Pre-compute corpus embeddings (do this once, then store them)\ndocument_screenshots = [\n    \"path/to/doc1.png\",\n    \"path/to/doc2.png\",\n    # ... potentially millions of document screenshots\n]\ncorpus_embeddings = embedder.encode_document(document_screenshots, show_progress_bar=True)\n\n# Simple cosine similarity retrieval, viable as long as embeddings fit in memory\nsimilarities = embedder.similarity(query_embedding, corpus_embeddings)\ntop_k_indices = similarities.argsort(descending=True)[0][:10]\n\n# Step 2: Rerank the top-k results with a reranker model\nreranker = CrossEncoder(\"nvidia/llama-nemotron-rerank-vl-1b-v2\", trust_remote_code=True)\n\ntop_k_documents = [document_screenshots[i] for i in top_k_indices]\nrankings = reranker.rank(query, top_k_documents)\nfor rank in rankings:\n    print(f\"{rank['score']:.4f}\\t{top_k_documents[rank['corpus_id']]}\")\n```\n\nSince the corpus embeddings are pre-computed, the initial retrieval is fast even over millions of documents. The reranker then provides more accurate scoring over the smaller candidate set.\n\n## Input Formats and Configuration\n\n### Supported Input Types\n\nMultimodal models accept a variety of input formats. Here's a summary of what you can pass to [`model.encode()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode):\n\n| Modality       | Accepted Formats                                                                                                                                                                           |\n| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **Text**       | \\- Strings                                                                                                                                                                                 |\n| **Image**      | \\- `PIL.Image.Image` objects - File paths (e.g. `\"./photo.jpg\"`) - URLs (e.g. `\"https://.../image.jpg\"`) - Numpy arrays, torch tensors                                                     |\n| **Audio**      | \\- File paths (e.g. `\"./audio.wav\"`) - URLs (e.g. `\"https://.../audio.wav\"`) - Numpy/torch arrays - Dicts with `\"array\"` and `\"sampling_rate\"` keys - `torchcodec.AudioDecoder` instances  |\n| **Video**      | \\- File paths (e.g. `\"./video.mp4\"`) - URLs (e.g. `\"https://.../video.mp4\"`) - Numpy/torch arrays - Dicts with `\"array\"` and `\"video_metadata\"` keys - `torchcodec.VideoDecoder` instances |\n| **Multimodal** | \\- Dicts mapping modality names to values, e.g. `{\"text\": \"a caption\", \"image\": \"https://.../image.jpg\"}` Valid keys: `\"text\"`, `\"image\"`, `\"audio\"`, `\"video\"`                            |\n| **Message**    | \\- List of message dicts with `\"role\"` and `\"content\"` keys, e.g. `[{\"role\": \"user\", \"content\": [...]}]`                                                                                   |\n\n### Checking Modality Support\n\nYou can check which modalities a model supports using the [`modalities`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.modalities) property and [`supports()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.supports) method:\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"Qwen/Qwen3-VL-Embedding-2B\")\n\n# List all supported modalities\nprint(model.modalities)\n# ['text', 'image', 'video', 'message']\n\n# Check for a specific modality\nprint(model.supports(\"image\"))\n# True\nprint(model.supports(\"audio\"))\n# False\n```\n\nThe `\"message\"` modality indicates that the model accepts chat-style message inputs with interleaved content. In practice, you rarely need to use this directly. When you pass strings, URLs, or multimodal dicts, the model converts them to the appropriate message format internally. Sentence Transformers supports two message formats:\n\n- **Structured** (most VLMs, e.g. Qwen3-VL): Content is a list of typed dicts, e.g. `[{\"type\": \"text\", \"text\": \"...\"}, {\"type\": \"image\", \"image\": ...}]`\n- **Flat** (e.g. Deepseek-V3): Content is a direct value, e.g. `\"some text\"`\n\nThe format is auto-detected from the model's chat template.\n\nSince all inputs get converted into the same message format internally, you can mix input types in a single [`encode()`](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer.encode) call:\n\n```python\nembeddings = model.encode([\n    # A text input\n    \"A green car parked in front of a yellow building\",\n    # An image input (URL)\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    # A combined text + image input\n    {\n        \"text\": \"A car in a European city\",\n        \"image\": \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    },\n])\n```\n\nClick here if you need to pass raw message inputs\n\nIf a model doesn't follow either format and you need full control, you can pass raw message dicts with `role` and `content` keys directly:\n\n```python\nembeddings = model.encode([\n    [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\"type\": \"image\", \"image\": \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\"},\n                {\"type\": \"text\", \"text\": \"Describe this vehicle.\"},\n            ],\n        }\n    ],\n])\n```\n\nThis bypasses the automatic format conversion and passes the messages directly to the processor's `apply_chat_template()`.\n\n### Processor and Model kwargs\n\nYou may want to control image resolution bounds or model precision. Use `processor_kwargs` and `model_kwargs` when loading the model:\n\n```python\nmodel = SentenceTransformer(\n    \"Qwen/Qwen3-VL-Embedding-2B\",\n    model_kwargs={\"attn_implementation\": \"flash_attention_2\", \"torch_dtype\": \"bfloat16\"},\n    processor_kwargs={\"min_pixels\": 28 * 28, \"max_pixels\": 600 * 600},\n)\n```\n\n- `processor_kwargs` controls how inputs are preprocessed (e.g., image resolution bounds). Higher `max_pixels` means higher quality but more memory and compute. These are passed directly to `AutoProcessor.from_pretrained(...)`.\n- `model_kwargs` controls how the underlying model is loaded (e.g., precision, attention implementation). These are passed directly to the appropriate `AutoModel.from_pretrained(...)` call (e.g., `AutoModel`, `AutoModelForCausalLM`, `AutoModelForSequenceClassification`, etc., depending on the configuration of the model modules).\n\nSee the [SentenceTransformer](https://sbert.net/docs/package_reference/sentence_transformer/SentenceTransformer.html#sentence_transformers.SentenceTransformer) API Reference documentation for more details on these kwargs.\n\n> In Sentence Transformers v5.4, `tokenizer_kwargs` has been renamed to `processor_kwargs` to reflect that multimodal models use processors rather than just tokenizers. The old name is still accepted but deprecated.\n\n## Supported Models\n\nHere are the multimodal models supported in v5.4, also available in the [v5.4 integrations collection](https://huggingface.co/collections/sentence-transformers/sentence-transformers-v54-integrations):\n\n### Supported Multimodal Embedding Models\n\n| Model                                                                                                | Parameters | Modalities                | Revision               |\n| ---------------------------------------------------------------------------------------------------- | ---------- | ------------------------- | ---------------------- |\n| [Qwen/Qwen3-VL-Embedding-2B](https://huggingface.co/Qwen/Qwen3-VL-Embedding-2B)                     | 2B         | Text, Image, Video        | No `revision` needed   |\n| [Qwen/Qwen3-VL-Embedding-8B](https://huggingface.co/Qwen/Qwen3-VL-Embedding-8B)                     | 8B         | Text, Image, Video        | No `revision` needed   |\n| [nvidia/llama-nemotron-embed-vl-1b-v2](https://huggingface.co/nvidia/llama-nemotron-embed-vl-1b-v2) | 1.7B       | Text, Image               | No `revision` needed   |\n| [nvidia/omni-embed-nemotron-3b](https://huggingface.co/nvidia/omni-embed-nemotron-3b)               | 4.7B       | Text, Image               | No `revision` needed   |\n| [LCO-Embedding/LCO-Embedding-Omni-3B](https://huggingface.co/LCO-Embedding/LCO-Embedding-Omni-3B)   | 5B         | Text, Image, Audio, Video | No `revision` needed   |\n| [LCO-Embedding/LCO-Embedding-Omni-7B](https://huggingface.co/LCO-Embedding/LCO-Embedding-Omni-7B)   | 9B         | Text, Image, Audio, Video | No `revision` needed   |\n| [BidirLM/BidirLM-Omni-2.5B-Embedding](https://huggingface.co/BidirLM/BidirLM-Omni-2.5B-Embedding)   | 2.5B       | Text, Image, Audio        | No `revision` needed   |\n| [BAAI/BGE-VL-base](https://huggingface.co/BAAI/BGE-VL-base)                                         | 0.1B       | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-large](https://huggingface.co/BAAI/BGE-VL-large)                                       | 0.4B       | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-MLLM-S1](https://huggingface.co/BAAI/BGE-VL-MLLM-S1)                                   | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-MLLM-S2](https://huggingface.co/BAAI/BGE-VL-MLLM-S2)                                   | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-v1.5-zs](https://huggingface.co/BAAI/BGE-VL-v1.5-zs)                                   | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-v1.5-mmeb](https://huggingface.co/BAAI/BGE-VL-v1.5-mmeb)                               | 8B         | Text, Image               | No `revision` needed   |\n| [BAAI/BGE-VL-Screenshot](https://huggingface.co/BAAI/BGE-VL-Screenshot)                             | 4B         | Text, Image               | No `revision` needed   |\n| [royokong/e5-v](https://huggingface.co/royokong/e5-v)                                               | 8B         | Text, Image               | No `revision` needed   |\n| [eagerworks/eager-embed-v1](https://huggingface.co/eagerworks/eager-embed-v1)                       | 4B         | Text, Image               | `revision=\"refs/pr/2\"` |\n| [nomic-ai/nomic-embed-multimodal-3b](https://huggingface.co/nomic-ai/nomic-embed-multimodal-3b)     | 5B         | Text, Image               | `revision=\"refs/pr/4\"` |\n| [nomic-ai/nomic-embed-multimodal-7b](https://huggingface.co/nomic-ai/nomic-embed-multimodal-7b)     | 9B         | Text, Image               | `revision=\"refs/pr/3\"` |\n| [Haon-Chen/e5-omni-3B](https://huggingface.co/Haon-Chen/e5-omni-3B)                                 | 5B         | Text, Image, Audio, Video | `revision=\"refs/pr/2\"` |\n| [Haon-Chen/e5-omni-7B](https://huggingface.co/Haon-Chen/e5-omni-7B)                                 | 9B         | Text, Image, Audio, Video | `revision=\"refs/pr/1\"` |\n\n### Supported Multimodal Reranker Models\n\n| Model                                                                                                  | Parameters | Modalities         | Revision             |\n| ------------------------------------------------------------------------------------------------------ | ---------- | ------------------ | -------------------- |\n| [Qwen/Qwen3-VL-Reranker-2B](https://huggingface.co/Qwen/Qwen3-VL-Reranker-2B)                         | 2B         | Text, Image, Video | No `revision` needed |\n| [Qwen/Qwen3-VL-Reranker-8B](https://huggingface.co/Qwen/Qwen3-VL-Reranker-8B)                         | 8B         | Text, Image, Video | No `revision` needed |\n| [nvidia/llama-nemotron-rerank-vl-1b-v2](https://huggingface.co/nvidia/llama-nemotron-rerank-vl-1b-v2) | 2B         | Text, Image        | No `revision` needed |\n| [jinaai/jina-reranker-m0](https://huggingface.co/jinaai/jina-reranker-m0)                             | 2B         | Text, Image        | No `revision` needed |\n\n### Text-Only Reranker Models (also new in v5.4)\n\n| Model                                                                                                                                | Parameters | Revision               |\n| ------------------------------------------------------------------------------------------------------------------------------------ | ---------- | ---------------------- |\n| [Qwen/Qwen3-Reranker-0.6B](https://huggingface.co/Qwen/Qwen3-Reranker-0.6B)                                                         | 0.6B       | No `revision` needed   |\n| [Qwen/Qwen3-Reranker-4B](https://huggingface.co/Qwen/Qwen3-Reranker-4B)                                                             | 4B         | No `revision` needed   |\n| [Qwen/Qwen3-Reranker-8B](https://huggingface.co/Qwen/Qwen3-Reranker-8B)                                                             | 8B         | No `revision` needed   |\n| [mixedbread-ai/mxbai-rerank-base-v2](https://huggingface.co/mixedbread-ai/mxbai-rerank-base-v2)                                     | 0.5B       | No `revision` needed   |\n| [mixedbread-ai/mxbai-rerank-large-v2](https://huggingface.co/mixedbread-ai/mxbai-rerank-large-v2)                                   | 2B         | No `revision` needed   |\n| [ContextualAI/ctxl-rerank-v2-instruct-multilingual-1b](https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-1b) | 1B         | `revision=\"refs/pr/2\"` |\n| [ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b](https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-2b) | 3B         | `revision=\"refs/pr/1\"` |\n| [ContextualAI/ctxl-rerank-v2-instruct-multilingual-6b](https://huggingface.co/ContextualAI/ctxl-rerank-v2-instruct-multilingual-6b) | 7B         | `revision=\"refs/pr/1\"` |\n\nClick here for a text-only reranker usage example\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nmodel = CrossEncoder(\"mixedbread-ai/mxbai-rerank-base-v2\")\n\nquery = \"How do I bake sourdough bread?\"\ndocuments = [\n    \"Sourdough bread requires a starter made from flour and water, fermented over several days.\",\n    \"The history of bread dates back to ancient Egypt around 8000 BCE.\",\n    \"To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.\",\n    \"Rye bread is a popular alternative to wheat-based breads in Northern Europe.\",\n]\n\npairs = [(query, doc) for doc in documents]\nscores = model.predict(pairs)\nprint(scores)\n# [ 7.3077507 -2.6217823  8.724761  -2.2488995]\n\nrankings = model.rank(query, documents)\nfor rank in rankings:\n    print(f\"{rank['score']:.4f}\\t{documents[rank['corpus_id']]}\")\n# 8.7248  To bake sourdough, mix your starter with flour, water, and salt, then let it rise overnight.\n# 7.3078  Sourdough bread requires a starter made from flour and water, fermented over several days.\n# -2.2489 Rye bread is a popular alternative to wheat-based breads in Northern Europe.\n# -2.6218 The history of bread dates back to ancient Egypt around 8000 BCE.\n```\n\n### CLIP Models\n\nThe older CLIP models continue to be supported:\n\n| Model                                                                                                                              | ImageNet Zero-Shot Top-1 Accuracy | Notes                                    |\n| ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------- |\n| [sentence-transformers/clip-ViT-L-14](https://huggingface.co/sentence-transformers/clip-ViT-L-14)                                 | 75.4                              |                                          |\n| [sentence-transformers/clip-ViT-B-16](https://huggingface.co/sentence-transformers/clip-ViT-B-16)                                 | 68.1                              |                                          |\n| [sentence-transformers/clip-ViT-B-32](https://huggingface.co/sentence-transformers/clip-ViT-B-32)                                 | 63.3                              |                                          |\n| [sentence-transformers/clip-ViT-B-32-multilingual-v1](https://huggingface.co/sentence-transformers/clip-ViT-B-32-multilingual-v1) | N/A                               | Multilingual text encoder, 50+ languages |\n\nThese simple CLIP models still work well on lower-resource hardware.\n\nClick here for a CLIP usage example\n\n```python\nfrom sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\"sentence-transformers/clip-ViT-L-14\")\n\nimages = [\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg\",\n    \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg\",\n    \"https://huggingface.co/datasets/huggingface/cats-image/resolve/main/cats_image.jpeg\"\n]\ntexts = [\"A green car\", \"A bee on a flower\", \"Some cats on a couch\", \"One cat sitting in the window\"]\n\nimage_embeddings = model.encode(images)\ntext_embeddings = model.encode(texts)\nprint(image_embeddings.shape, text_embeddings.shape)\n# (3, 768) (4, 768)\n\nsimilarities = model.similarity(image_embeddings, text_embeddings)\nprint(similarities)\n# tensor([[0.2208, 0.1042, 0.0617, 0.0907],  First image (car) is most similar to \"A green car\"\n#         [0.1205, 0.2303, 0.0632, 0.0917],  Second image (bee) is most similar to \"A bee on a flower\"\n#         [0.1107, 0.0196, 0.2425, 0.1162]]) Third image (multiple cats) is most similar to \"Some cats on a couch\"\n```\n\n## Additional Resources\n\n### Documentation\n\n- [Sentence Transformer > Usage](https://sbert.net/docs/sentence_transformer/usage/usage.html)\n- [Sentence Transformer > Pretrained Models](https://sbert.net/docs/sentence_transformer/pretrained_models.html)\n- [Cross Encoder > Usage](https://sbert.net/docs/cross_encoder/usage/usage.html)\n- [Cross Encoder > Pretrained Models](https://sbert.net/docs/cross_encoder/pretrained_models.html)\n- [Installation](https://sbert.net/docs/installation.html)\n\n### Training\n\nTo learn how to finetune these multimodal models on your own data, see the companion blogpost: [Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-multimodal-sentence-transformers).\n\n- [Sentence Transformer > Training Overview](https://sbert.net/docs/sentence_transformer/training_overview.html)\n- [Sentence Transformer > Training Examples](https://sbert.net/docs/sentence_transformer/training/examples.html)\n- [Cross Encoder > Training Overview](https://sbert.net/docs/cross_encoder/training_overview.html)\n- [Cross Encoder > Training Examples](https://sbert.net/docs/cross_encoder/training/examples.html)\n- [Sparse Encoder > Training Overview](https://sbert.net/docs/sparse_encoder/training_overview.html)\n- [Sparse Encoder > Training Examples](https://sbert.net/docs/sparse_encoder/training/examples.html)\n\n### Hugging Face Hub\n\n- [Sentence Transformers models on the Hub](https://huggingface.co/models?library=sentence-transformers)\n- [Sentence Transformers datasets on the Hub](https://huggingface.co/datasets?other=sentence-transformers)\n- [v5.4 Integrations Collection](https://huggingface.co/collections/sentence-transformers/sentence-transformers-v54-integrations)\n\n### Companion Blogposts\n\nThe training companion to this post and adjacent Sentence Transformers guides:\n\n- [Training and Finetuning Multimodal Embedding & Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-multimodal-sentence-transformers): the direct training companion to this post, with a Visual Document Retrieval walkthrough.\n- [Training and Finetuning Embedding Models with Sentence Transformers](https://huggingface.co/blog/train-sentence-transformers): the general training guide for text-only bi-encoder embedding models.\n- [Training and Finetuning Reranker Models with Sentence Transformers](https://huggingface.co/blog/train-reranker): Cross Encoder (reranker) training, applicable to text-only and multimodal rerankers.\n- [Training and Finetuning Sparse Embedding Models with Sentence Transformers](https://huggingface.co/blog/train-sparse-encoder): SPLADE training for sparse retrieval.\n- [🪆 Introduction to Matryoshka Embedding Models](https://huggingface.co/blog/matryoshka): variable-size embeddings; also applied to multimodal models in the training companion post.\n- [Train 400x faster Static Embedding Models with Sentence Transformers](https://huggingface.co/blog/static-embeddings): CPU-friendly text embedding models.\n- [Binary and Scalar Embedding Quantization for Significantly Faster & Cheaper Retrieval](https://huggingface.co/blog/embedding-quantization): post-training compression of embedding vectors.\n",
  "dateCreated": "2026-10-04T12:50:30.804479567+00:00",
  "date_created": "2026-04-09T00:00:00+00:00",
  "date_modified": "2026-04-09T00:00:00+00:00",
  "date_published": "2026-04-09T00:00:00+00:00",
  "description": "Sentence Transformers is a Python library for using and training embedding and reranker models for applications like retrieval augmented generation, semantic search, and more. With the v5.4 update, you can now encode and compare texts,…",
  "external_url": "https://huggingface.co/blog/multimodal-sentence-transformers",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/huggingface-co/2026/04/2026-04-09-multimodal-embedding-reranker-models-with-sentence.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/huggingface-co/2026/04/2026-04-09-multimodal-embedding-reranker-models-with-sentence.md"
  },
  "id": "urn:aggr:item:8bab4810d254e3c8c3e7dab94b2c99472cd70e45",
  "isBasedOn": {
    "@id": "https://huggingface.co/blog/multimodal-sentence-transformers"
  },
  "mainEntity": {
    "@id": "https://huggingface.co/blog/multimodal-sentence-transformers",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/huggingface-co/2026-04-09-multimodal-embedding-reranker-models-with-sentence/#webpage"
    },
    "dateModified": "2026-04-09T00:00:00+00:00",
    "datePublished": "2026-04-09T00:00:00+00:00",
    "headline": "Multimodal Embedding & Reranker Models with Sentence Transformers",
    "timeRequired": "PT15M",
    "url": "https://huggingface.co/blog/multimodal-sentence-transformers",
    "wordCount": 3172
  },
  "name": "Archived snapshot: Multimodal Embedding & Reranker Models with Sentence Transformers",
  "preview": null,
  "reading_minutes": 15,
  "replicated_at": null,
  "source": "huggingface-co",
  "source_name": "Hugging Face - Blog",
  "summary": null,
  "tags": [],
  "temporalCoverage": "2026-10-04T12:50:30.804479567+00:00",
  "title": "Multimodal Embedding & Reranker Models with Sentence Transformers",
  "url": "https://aggr.aymericbeaumet.com/items/huggingface-co/2026-04-09-multimodal-embedding-reranker-models-with-sentence/",
  "word_count": 3172
}