Embedding Models Compared 2026: OpenAI vs Cohere vs Voyage vs BGE
The short answer
Four embedding model families serve production RAG in 2026: OpenAI text-embedding-3 (default general-purpose), Cohere embed-v3 (strong multilingual), Voyage AI (best for code, legal, finance), and BAAI BGE (open-source, self-hostable). Benchmark quality gaps between them are small; the pick depends on language mix, domain, cost ceiling, and whether you can run embeddings in-house. For most English use cases, OpenAI text-embedding-3-small is the right default.
Embedding models turn text into vectors. In 2026 the field has four serious contenders: OpenAI text-embedding-3, Cohere embed-v3, Voyage AI’s voyage-3 series, and the open-source BAAI BGE family. Each wins on a different axis, and the gap between them is small enough that your use case decides which to pick, not a leaderboard score.
This comparison looks at retrieval quality, cost, latency, multilingual support, and domain-specific variants, with concrete guidance on which model to pick for which workload. Measurements come from the MTEB benchmark 2026 refresh, published vendor benchmarks, and production deployments shared across the LangChain and LlamaIndex communities.
The four model families at a glance
The current state of each family:
OpenAI text-embedding-3. Two sizes: text-embedding-3-small (1536 dim, $0.02 per 1M tokens) and text-embedding-3-large (3072 dim, $0.13 per 1M tokens). General-purpose English and reasonably strong at other European languages. The default choice when you have no reason to pick something else.
Cohere embed-v3. Three variants: embed-english-v3, embed-multilingual-v3 (100+ languages), and embed-english-light-v3 (384 dim, cheaper). All priced at $0.10 per 1M tokens. Cohere’s strength is multilingual, and the Rerank-v3 model from the same vendor pairs cleanly with the embedding model.
Voyage AI. voyage-3 for general use, voyage-3-large for highest quality, voyage-code-2 for source code, voyage-law-2 for legal, voyage-finance-2 for financial documents. Priced $0.06 to $0.18 per 1M tokens. Voyage has quietly become the quality leader on MTEB and on domain-specific tasks.
BAAI BGE. bge-small-en-v1.5 (384 dim), bge-base-en-v1.5 (768 dim), bge-large-en-v1.5 (1024 dim), bge-m3 (multilingual). All open source, free to run on your own hardware. Quality is competitive with GPT-3.5-era closed models.
Retrieval quality: MTEB 2026 scores
MTEB (Massive Text Embedding Benchmark) is the standard retrieval benchmark, covering 58 datasets across semantic search, clustering, classification, and reranking. Higher is better. Reading the scores:
- Voyage voyage-3-large: 71.4
- Voyage voyage-3: 69.1
- OpenAI text-embedding-3-large: 68.8
- Cohere embed-english-v3: 68.0
- OpenAI text-embedding-3-small: 65.1
- BGE bge-large-en-v1.5: 64.2
- BGE bge-base-en-v1.5: 63.6
Voyage voyage-3-large leads, but the gap to OpenAI text-embedding-3-large is 2.6 points. That translates to about 3-5% better top-5 retrieval on average, which is noticeable but not life-changing. On any individual workload the picture flips, so your own benchmark trumps MTEB.
Cost comparison for 1 million documents
At 500 tokens per chunk and 20 chunks per document, 1 million documents is roughly 10 billion embedding tokens. Priced out:
- OpenAI text-embedding-3-small: $200 for the initial embed, roughly $0.02 per million query embeddings after.
- OpenAI text-embedding-3-large: $1,300 initial, $0.13 per million queries.
- Cohere embed-english-v3: $1,000 initial, $0.10 per million queries.
- Voyage voyage-3: $600 initial, $0.06 per million queries.
- Voyage voyage-3-large: $1,800 initial, $0.18 per million queries.
- BGE on self-hosted GPU: hardware + electricity, usually $100-500 total for the initial embed, $0 per query after that.
Voyage voyage-3 is the quietly-good price-quality winner. OpenAI text-embedding-3-small is the cheapest cloud option with acceptable quality. BGE is the right pick when data cannot leave your network or when the corpus is small enough that running a GPU for a day is cheaper than a month of API calls.
Latency: cloud vs self-hosted
Latency matters more than people expect because it compounds across the pipeline. A query that calls one embedding API, retrieves from a vector store, calls a reranker, and then calls a chat model has 4 round trips.
- OpenAI: 100-250ms per query embedding call, consistent globally.
- Cohere: 150-300ms, consistent.
- Voyage: 80-200ms, usually fastest of the cloud providers.
- BGE self-hosted: 10-30ms on a modern GPU (A10, L4, A100), 30-80ms on CPU for the base model.
Self-hosted BGE wins hard on latency when your application is in the same region as the GPU. For voice-driven applications or interactive search, that 100-200ms savings matters. For batch workflows or chatbots where the user waits 2+ seconds anyway, the cloud latency is invisible.
Multilingual: Cohere and bge-m3 lead
Cohere embed-multilingual-v3 and BGE bge-m3 are the two models designed from the ground up for non-English retrieval. OpenAI and Voyage models are English-first with reasonable Romance and Germanic language support, but they lose quality fast on Asian scripts, Arabic, and Slavic languages.
If your corpus is primarily English with occasional non-English documents, OpenAI or Voyage is fine. If your corpus is primarily non-English or genuinely multilingual (customer support across 10 countries), use Cohere embed-multilingual-v3 or bge-m3.
Note that bge-m3 supports dense, sparse (BM25-equivalent), and multi-vector (ColBERT-style) retrieval from the same model, which is a nice all-in-one for teams that want hybrid search without integrating a second system.
Domain-specific variants from Voyage
Voyage ships specialized embedding models for three high-value domains. The lift over general-purpose embeddings on in-domain content is meaningful.
voyage-code-2. Trained on code plus natural language queries about code. Beats text-embedding-3-large by 5-12% on code retrieval tasks. Essential for any system that embeds source files or developer documentation.
voyage-law-2. Trained on legal corpus. Lifts citation retrieval, case law search, and contract clause matching by 8-15% over general-purpose. The go-to for legal RAG systems.
voyage-finance-2. Trained on financial reports, SEC filings, and analyst documents. Significantly better on 10-K retrieval, earnings call analysis, and risk-section search.
If your use case is one of these three domains and quality matters more than cost, use the Voyage domain variant. The 5-15% lift is a bigger win than any amount of chunking or reranking tweaks.
Dimension reduction and Matryoshka embeddings
Both OpenAI text-embedding-3 and Voyage voyage-3 support Matryoshka Representation Learning. The full 3072-dim vector can be truncated to 1536, 1024, 512, or even 256 dimensions with graceful quality degradation.
In practice:
- 256 dim: 20-30% worse retrieval, 90% less storage
- 512 dim: 10-15% worse retrieval, 80% less storage
- 1024 dim: 5-8% worse retrieval, 65% less storage
- 1536 dim: 2-4% worse retrieval, 50% less storage
For large indexes where storage dominates cost (think 100M+ chunks), truncating to 512 or 1024 dimensions is a free optimization. For small indexes, keep the full dimensionality.
A pragmatic picker
Six questions, in priority order:
- Is the corpus primarily non-English? Cohere embed-multilingual-v3 or bge-m3.
- Is it code? voyage-code-2.
- Is it legal? voyage-law-2.
- Is it financial? voyage-finance-2.
- Does the data need to stay on your network? BGE bge-large-en-v1.5 self-hosted.
- None of the above? Start with voyage-3 (best quality-cost tradeoff) or OpenAI text-embedding-3-small (cheapest cloud option).
Set up a 50-100 query test set before switching models. The MTEB numbers are averages across 58 benchmarks; your actual workload is one benchmark that may not look like any of them.
Switching costs
Embeddings from different models are not comparable. Switching the embedding model means re-embedding the entire corpus. For 1 million documents that is a one-time cost of $200 to $1,800 cloud, or a day of GPU time self-hosted.
Three ways to make switching painless:
- Store raw text with every vector. Lets you re-embed later without re-fetching source documents.
- Record the model name in metadata. Lets you run two versions side by side during migration.
- Use a dimension-flexible setup. Pinecone, Weaviate, Qdrant, and Chroma all support multiple collections, so running an A/B test between models is a one-afternoon job.
Teams that never think about embedding model switching usually realize at month 9 that they picked wrong, and the re-embed looks like a Herculean task. It is not. It is one script and a day of API cost.
Frequently asked questions
Official documentation
Which embedding model has the best quality in 2026?
Voyage voyage-3-large currently leads MTEB at 71.4, with Voyage voyage-3 and OpenAI text-embedding-3-large close behind. For domain-specific use (code, legal, finance), the Voyage domain variants beat all general-purpose models by 5-15% on their respective domains.
Is OpenAI text-embedding-3-small good enough for production RAG?
For general English content with modest quality requirements, yes. It scores 65.1 on MTEB, which is competitive, and costs $0.02 per 1M tokens. Teams that migrate to text-embedding-3-large or Voyage typically see 3-6% retrieval improvement, which may or may not justify the 5-9x cost difference depending on your use case.
Can I run embeddings locally without an API?
Yes. BAAI BGE models (bge-small, bge-base, bge-large) are open-source and run on CPU or GPU through the sentence-transformers library. Quality is competitive with mid-tier closed models. For 1 million chunks, a single GPU embeds the corpus in a few hours and costs nothing to query thereafter.
Should I use text-embedding-3-large or text-embedding-3-small?
Start with text-embedding-3-small. Measure retrieval quality. If the top-5 recall is below 70% on your test queries, upgrade to text-embedding-3-large or Voyage voyage-3. The small model handles most workloads at 1/6 the cost of the large.
Do embedding dimensions affect retrieval quality?
Yes but not as much as people assume. OpenAI and Voyage models with Matryoshka training degrade gracefully: 1024 dim is 5-8% worse than 3072 dim, and 512 dim is 10-15% worse. For storage-constrained indexes, truncating to 1024 is a reasonable trade. For top quality, keep the full dimensionality.
Can I mix embedding models in one RAG system?
Not within one index. Embeddings from different models live in different spaces and cannot be compared with cosine similarity. You can run two indexes side by side (one per model) and route queries based on document type, but the pipeline cost doubles. Easier to pick one model that covers your workload.
Voyage voyage-3 is the sensible default for new 2026 RAG systems. Switch to a domain variant if your corpus is code, legal, or finance. Switch to OpenAI text-embedding-3-small if cost dominates. Switch to BGE if data cannot leave your network. All four families are strong enough that the pipeline wins or loses on chunking, reranking, and prompting, not embedding choice.
