RAGStackGuide
Three data streams pass through embedding processors into a glowing vector cube in a dark blue 3D RAG pipeline.
embeddings

Best Embedding Model for RAG: How to Choose in 2026

The best embedding model for RAG depends on your corpus. A 2026 shortlist: Voyage, Gemini, Cohere, Qwen3, BGE-M3, plus a bake-off script to rank them.

By RAGStackGuide Editorial · ·Updated · 11 min read

The best embedding model for RAG in October 2026 is Voyage’s voyage-4-large if your text can go to a hosted API ($0.12 per million tokens, 32K-token input), and Qwen3-Embedding-8B if it must stay on your own GPUs (Apache 2.0, 32K tokens). Treat both as starting points: confirm the pick on 50 to 200 of your own queries before indexing.

The leaderboard winner and the right model for your corpus are often different. MTEB’s own authors found no single embedding method dominates across tasks, and BEIR showed dense retrievers losing to BM25 out of domain. Below: the 2026 shortlist, picks by use case, what changed since 2025, current prices, the metric to rank on, and a script that settles it on your own chunks.

The model is one stage of the RAG pipeline, and it only matters if retrieval is the right tool at all: RAG vs fine-tuning covers when to embed a corpus versus training the model.

The short answer: a 2026 shortlist

ModelWeightsDimensionsMax inputNotes
Voyage voyage-4-largeAPI1024 default, 256/512/204832K tokens$0.12/M tokens, first 200M free; shares one vector space with voyage-4, voyage-4-lite and open-weight voyage-4-nano
Google gemini-embedding-2API128 to 3072, 768/1536/3072 recommended8,192 tokenstext, image, audio, video and PDF; task prefix in the text, no task_type; GA April 2026, replaces the deprecated gemini-embedding-001; 69.9 MTEB multilingual in Google’s paper
Cohere embed-v5.0-pro / embed-v5.0-fastAPI or private deployment256 to 2048, 2048 default128K tokensfloat/int8/binary output, text, image and PDF-page input; launched September 30, 2026, succeeds embed-v4.0 (256/512/1024/1536)
OpenAI text-embedding-3-largeAPI3072, shortenable8,192 tokens64.6 MTEB, vendor-reported
Qwen3-Embedding-8BApache 2.032 to 409632K tokens70.58 MTEB multilingual, self-reported June 2025
NVIDIA Nemotron-3-Embed-8BOpenMDW-1.14096, sliceable32K tokens78.46 RTEB nDCG@10, first in NVIDIA’s July 15, 2026 leaderboard snapshot; 34 languages
Microsoft harrier-oss-v1-27bMIT537632,768 tokens74.3 multilingual MTEB v2; 270m and 0.6b siblings at 640 and 1024 dims
BAAI bge-m3MIT10248,192 tokensdense, sparse and multi-vector in one model
multilingual-e5-large-instructMIT1024512 tokens560M params, best public model in the MMTEB paper

Every row is from the vendor’s own docs or model card (linked in Sources), so read each score as a vendor benchmark, and do not compare scores across rows: MTEB multilingual, MTEB v2 and RTEB are different task sets. The independent view, the MMTEB paper (ICLR 2025, 500+ tasks, 250+ languages), found the best public model at time of writing was the 560-million-parameter multilingual-e5-large-instruct.

Two tiers. Data can leave your network: voyage-4-large topped Voyage’s own 29-dataset RTEB comparison, 3.87 percent ahead of gemini-embedding-001 and 8.20 percent ahead of Cohere Embed v4 on nDCG@10. Gemini Embedding 2 and Cohere Embed 5 answer with multimodal input, and Cohere’s 128K context and native int8/binary output are the operational edge. Data stays in your VPC: Qwen3-Embedding (8B, 4B and 0.6B, all Apache 2.0) is the safest open-weight default, Nemotron-3-Embed-8B is the newest retrieval leader to bake off against it, and BGE-M3 is the pick when lexical matching must come from the same model.

Best embedding model by use case

Corpus or constraintPickWhy
General text, hosted is finevoyage-4-large, or voyage-4 at half the priceRTEB lead above; $0.12 vs $0.06 per million tokens
Scanned PDFs, slides, chartsCohere embed-v5.0-pro85.8 ViDoRe V3 average against 83.7 for voyage-4-large and 83.2 for Gemini Embedding 2, per Cohere’s launch post
Audio, video and images beside textgemini-embedding-2text, images, audio up to 180 s, video up to 120 s and PDFs in one space
Documents past 32K tokensCohere Embed 5128K-token input on both Pro and Fast
Self-hosted, permissive licenceQwen3-Embedding-8B, 4B or 0.6BApache 2.0, one family from 0.6B to 8B parameters
Self-hosted, retrieval quality firstNemotron-3-Embed-8B78.46 RTEB; the card states it is ready for commercial use
Many languages, self-hostedharrier-oss-v1 (0.6b or 27b)MIT, 32K context, top multilingual MTEB v2 score at release
Error codes, SKUs, exact tokensBGE-M3dense and sparse vectors from one pass
Code, legal, financevoyage-code-4, voyage-law-2, voyage-finance-2domain-tuned; 32K, 16K and 32K tokens
CPU, laptop or edgeEmbeddingGemma-300m, voyage-4-nanoabout 0.3B parameters each

Best embedding models 2025 vs 2026: what changed

A “best embedding models 2025” list is now a year stale. Each of 2025’s leading picks has a successor or a challenger:

DateReleaseWhy it matters
Apr 15, 2025Cohere Embed 4128K context, text and images in one vector
Jun 2025Qwen3-Embedding8B ranked first on MTEB multilingual (70.58, June 5)
Jul 14, 2025gemini-embedding-001 GAGoogle’s text default; earliest shutdown May 14, 2028
Sep 2025EmbeddingGemma-300m technical reporton-device model, 2,048-token input
Oct 1, 2025RTEB betaretrieval-only leaderboard with private datasets, scored by nDCG@10
Jan 15, 2026Voyage 4 familymixture-of-experts voyage-4-large; four models, one shared vector space
Mar 2026harrier-oss-v1 (repo created March 30)MIT, 32K context, 74.3 multilingual MTEB v2 at 27B
Mar 10 to Apr 2026Gemini Embedding 2 (preview, then GA)multimodal; 69.9 MTEB multilingual per Google’s paper
Jul 16, 2026Nemotron 3 Embed, 8B and 1Bfirst on RTEB at 78.46
Sep 30, 2026Cohere Embed 5 Pro and Fast2048-dim default; Pro and Fast share one space

If you indexed with a 2025 pick, nothing forces a move yet: gemini-embedding-001’s listed shutdown is no earlier than May 14, 2028. The exception is Google’s older text-embedding-004, whose earliest shutdown date, January 14, 2026, has already passed. Otherwise rerun your golden set against the 2026 models and switch only for a recall gain that pays for a full re-index.

Embedding API prices, checked October 2026

ModelText, $ per 1M tokensBatch, $ per 1M tokensNotes
voyage-4-large0.1233% offfirst 200M tokens free
voyage-40.0633% offfirst 200M tokens free
voyage-4-lite0.0233% offfirst 200M tokens free
gemini-embedding-20.200.10free tier available; images $0.45 per 1M tokens
Cohere embed-v5.0-pro0.12not listedimages $0.40 per 1M tokens
Cohere embed-v5.0-fast0.08not listedimages $0.40 per 1M tokens
OpenAI text-embedding-3-large0.13not listed
OpenAI text-embedding-3-small0.02not listed

Figures are from the Voyage, Gemini, Cohere and OpenAI pricing pages. Voyage’s batch discount does not draw on the free tokens.

A worked example: one million 500-token chunks is 500M tokens. That costs $60 on voyage-4-large ($36 after the free 200M), $65 on text-embedding-3-large, $100 on gemini-embedding-2 ($50 through batch) and $10 on text-embedding-3-small. The one-off embedding bill is small next to vector storage and the full re-index every model change forces. Self-hosting swaps per-token fees for GPU hours; Cohere’s dedicated Model Vault instances for Embed 5 start at $3.00 an hour.

The metric that matters: recall on your own golden set

The original MTEB paper averaged eight task types across 58 datasets; a RAG pipeline exercises one of them. Rank on the retrieval column, which reports nDCG@10, and treat the average as noise.

nDCG@10 (normalised discounted cumulative gain) scores the top 10 hits by graded relevance, discounted by log of rank and normalised against the ideal ordering, so rank 1 beats rank 9. With a cross-encoder reranker downstream, recall@k is the better operational metric: a reranker reorders the candidate set but cannot recover a chunk that never made the cut.

Public retrieval sets are Wikipedia and web questions; your corpus is Confluence exports, error codes and jargon, the out-of-domain gap BEIR measured across 18 datasets, where BM25 held up as a strong baseline and dense models generalised poorly. Build 50 to 200 question-to-chunk pairs from real search logs, per the retrieval debugging checklist, rank candidates on that set, and keep it as the regression suite for later changes.

Wiring it up: a bake-off in one file

# bakeoff.py: recall@10 and MRR on your own golden set
import json
import numpy as np
from sentence_transformers import SentenceTransformer

CANDIDATES = [
    "Qwen/Qwen3-Embedding-0.6B",
    "BAAI/bge-m3",
    "intfloat/multilingual-e5-large-instruct",
]
# Query instructions for models that ship no sentence-transformers prompts;
# the rest fall back to their own built-in "query" prompt, if any.
PROMPTS = {
    "intfloat/multilingual-e5-large-instruct":
        "Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery: ",
}
K = 10

# golden.jsonl rows: {"query", "chunk_id"}; chunks.jsonl rows: {"id", "text"}
golden = [json.loads(l) for l in open("golden.jsonl")]
chunks = [json.loads(l) for l in open("chunks.jsonl")]
chunk_ids = [c["id"] for c in chunks]
queries = [g["query"] for g in golden]

for name in CANDIDATES:
    model = SentenceTransformer(name)
    docs = model.encode_document([c["text"] for c in chunks], normalize_embeddings=True)
    qs = model.encode_query(queries, prompt=PROMPTS.get(name), normalize_embeddings=True)
    scores = qs @ docs.T  # cosine, because both sides are unit-normalised
    ranks = np.argsort(-scores, axis=1)
    hits, rr = 0, 0.0
    for i, g in enumerate(golden):
        top = [chunk_ids[j] for j in ranks[i, :K]]
        if g["chunk_id"] in top:
            hits += 1
            rr += 1.0 / (top.index(g["chunk_id"]) + 1)
    n = len(golden)
    print(f"{name:42s} recall@{K}={hits / n:.3f}  MRR@{K}={rr / n:.3f}  dims={docs.shape[1]}")

encode_query and encode_document apply a model’s built-in prompts only when it ships them. Qwen3 ships its query prompt, and its model card reports a 1 to 5 percent gain from query instructions. By contrast, multilingual-e5-large-instruct ships none, so its Instruct: ... Query: ... format has to be passed explicitly through PROMPTS; without it the model degrades and the bake-off under-ranks it. normalize_embeddings=True makes dot product equal cosine, the metric mismatch behind many broken first deployments.

The 2026 open models drop into CANDIDATES the same way. harrier-oss-v1 takes the same Instruct: ... Query: ... query format, so give it a PROMPTS entry. Nemotron-3-Embed-8B ships saved prompts that encode_query and encode_document apply, but its card requires Transformers 5.2.0 and sentence-transformers 5.4.1 or later; Qwen3-Embedding needs transformers 4.51.0 or later.

What you’ll see

Good is a tight cluster, candidates within a couple of recall points, and the decision turns on hosting, dimension cost and context length. Bad is a 10 to 20 point spread with the leaderboard leader mid-pack: the corpus is off-distribution (code, non-English, dense jargon), and the specialised options (voyage-code-4, voyage-law-2, voyage-finance-2) deserve a run, as does BGE-M3’s sparse head for exact-token queries.

Dimensions and the Matryoshka lever

Storage scales linearly with dimensions: one million chunks at 3072 float32 dimensions is 12.3 GB of raw vectors before any HNSW graph, 4.1 GB at 1024; the chunk and index sizing calculator adds index overhead. Storage and index type are a database decision as much as a model one; once the embedding width is set, how to choose a vector database covers matching it to a store.

pgvector is the tightest ceiling: its HNSW and IVFFlat indexes take vector columns up to 2,000 dimensions and halfvec up to 4,000, per the pgvector README. Full-width 3072-dimension OpenAI or Gemini vectors and 4096-dimension Qwen3-8B or Nemotron vectors have to be truncated or stored at half precision before they can be indexed there. The Qdrant vs Milvus vs Pinecone comparison covers index types and RAM sizing for the dedicated stores.

Matryoshka Representation Learning (Kusupati et al., 2022) front-loads information into the leading dimensions, so a stored vector can be truncated after the fact. The paper reports up to 14x smaller embeddings at equal accuracy, on ImageNet rather than text. OpenAI’s docs claim a 256-dimension slice of text-embedding-3-large beats ada-002 at 1536, and Google’s docs put the older gemini-embedding-001 at 67.99 on MTEB at 768 dimensions against 68.16 at 2048. Both are vendor numbers and both point one way: cut to 768 or 1024, then verify recall on the golden set. Cohere’s int8 and binary output types stack on top: its Embed 5 launch post estimates 100 million chunks shrinking from about 819 GB at 2048-dimension float32 to 3.2 GB at 256-dimension binary, and recommends 1024-dimension int8 as the balance point.

Caveats

  • Switching is a full re-index. Vectors from different models, and per Google’s docs even different versions of one model, are incompatible: gemini-embedding-001 and gemini-embedding-2 vectors cannot share an index, so moving off the deprecated model means re-embedding everything. Price the re-embedding job before committing to an API whose deprecations you do not control. The exceptions are families built on one shared space: all four Voyage 4 models, including the open voyage-4-nano, and Cohere’s Embed 5 Pro and Fast, where Cohere puts the cross-model recall cost at 1.6 to 2.7 percent.
  • Context length is not chunk size. A 32K-token window does not mean 32K-token chunks, since one vector averages every topic in it; sizes that work are in the chunking guide, and how to chunk text for RAG caps each chunk with the embedding model’s own tokenizer.
  • Retrieved text is untrusted input. Whatever embeds a document also embeds any instructions hidden in it; see indirect prompt injection in RAG pipelines.
  • Query drift. Recall measured at launch decays as the question mix shifts; track it like any production model, and SentryML’s ML monitoring metrics taxonomy is the checklist.

FAQ

what was the best embedding model in 2025

Qwen3-Embedding-8B was the standout open-weight model of 2025, ranked first on MTEB multilingual at 70.58 on June 5, 2025. On the hosted side, gemini-embedding-001 went GA in July 2025 and Cohere’s Embed 4 shipped in April with a 128K-token window. All three now have 2026 successors or challengers, so retest before trusting a 2025 ranking.

is openai text-embedding-3-large still good for rag

It still works, but it is no longer a default pick. OpenAI lists it at 64.6 on MTEB with an 8,192-token limit, and it costs $0.13 per million tokens, more than voyage-4-large at $0.12. Voyage’s January 2026 comparison puts voyage-4-large 14.05 percent ahead of it on RTEB, a vendor-reported figure worth checking on your own queries.

which embedding model is best for multilingual rag

harrier-oss-v1 is the highest-scoring self-hosted option: Microsoft’s 27B model scored 74.3 on multilingual MTEB v2 and the 0.6B scored 69.0, both MIT-licensed with 32K context and 94 languages tagged on the 0.6B card. Hosted, Cohere Embed 5 and Gemini Embedding 2 each cover 100+ languages. BGE-M3 covers 100+ and adds sparse vectors.

can i run a good embedding model on cpu

Yes, if you pick a model near 300M parameters. EmbeddingGemma-300m (Gemma licence) takes 2,048 tokens, outputs 768 dimensions truncatable to 128, scores 69.67 on MTEB English v2 and ships int4 and int8 QAT checkpoints; its activations do not support float16. voyage-4-nano, also about 0.3B and Apache 2.0, produces vectors compatible with Voyage’s hosted 4-series.

is the mteb leaderboard reliable for choosing an embedding model

Only its retrieval numbers are, and only for building a shortlist. The overall MTEB average mixes classification, clustering and other tasks RAG never runs. RTEB, added to the leaderboard on October 1, 2025, scores retrieval alone by nDCG@10 and holds some datasets private to expose models overfit to public test sets. Final selection belongs to your own golden set.

Sources

  1. MTEB: Massive Text Embedding Benchmark
  2. MMTEB: Massive Multilingual Text Embedding Benchmark
  3. BEIR: zero-shot IR benchmark
  4. Matryoshka Representation Learning
  5. OpenAI embeddings guide
  6. Voyage AI embedding models
  7. Voyage AI pricing
  8. Gemini API embeddings
  9. Cohere embeddings documentation
  10. Cohere changelog: Embed 5
  11. Qwen3-Embedding-8B model card
  12. BAAI/bge-m3 model card
  13. intfloat/multilingual-e5-large-instruct model card
  14. Voyage AI: The Voyage 4 model family (January 15, 2026)
  15. voyageai/voyage-4-nano model card
  16. Gemini API pricing
  17. Gemini API deprecations
  18. Google: Gemini Embedding 2, our first natively multimodal embedding model
  19. Google Developers Blog: Building with Gemini Embedding 2
  20. Gemini Embedding 2: A Native Multimodal Embedding Model from Gemini
  21. Cohere: Introducing Embed 5
  22. Cohere models overview
  23. Cohere pricing
  24. SiliconANGLE: Cohere releases Embed 4
  25. OpenAI API pricing
  26. NVIDIA Nemotron 3 Embed ranks #1 overall on RTEB
  27. nvidia/Nemotron-3-Embed-8B-BF16 model card
  28. microsoft/harrier-oss-v1-27b model card
  29. microsoft/harrier-oss-v1-0.6b model card
  30. Hugging Face API: harrier-oss-v1-27b repository metadata
  31. google/embeddinggemma-300m model card
  32. Introducing RTEB: A New Standard for Retrieval Evaluation
  33. pgvector README: index dimension limits

Related