Top picks by priority
| Priority | Recommended | Why |
|---|---|---|
| Quality with managed API | Voyage-3 or OpenAI text-embedding-3-large | Top MTEB scores; pay-per-call |
| Cost-efficient managed | OpenAI text-embedding-3-small, Cohere embed-v3-light | Strong quality at fraction of cost of large variants |
| Self-hosted, quality-first | BGE-M3, GTE-large, Nomic-embed-v2 | Top open-weights options; competitive with API models |
| Multilingual | BGE-M3, Cohere embed-multilingual-v3, multilingual-e5-large | Designed for many languages; strong cross-lingual retrieval |
| Code embeddings | Voyage-code-3, OpenAI code-embedding-3 | Trained specifically on code corpora |
| Small / edge deployment | all-MiniLM-L6, Nomic-embed-text-v1 | Tiny footprint; runs on CPU |
The main embedding families
3072 dimensions, configurable down via Matryoshka representation. Strong MTEB scores, good multilingual capability, well-supported by every vector database and RAG framework. Pay-per-call with generous quota.
Best for: production RAG with managed-API preference, broad use cases without specialized domain needs.
Voyage AI's embeddings consistently top MTEB benchmarks. Multiple variants for general, code, and domain-specific use. Competitive pricing vs OpenAI. Used as the default by some major RAG platforms.
Best for: teams that benchmark and pick on quality; specialized domains (code, finance, legal).
Apache 2.0 license, strong multilingual support, dense + sparse + multi-vector retrieval in one model. Runs efficiently on a single GPU. The most-used open-weights embedding for serious self-hosted RAG.
Best for: self-hosted RAG, multilingual workloads, on-prem deployments.
Cohere's embedding family with strong cross-lingual retrieval (a query in one language finds relevant documents in another). Configurable dimension. Good for global / multilingual applications.
Best for: multilingual RAG, applications spanning many languages, cross-lingual search.
Compact embeddings that run efficiently on CPU. Quality is below frontier models but adequate for many applications. Apache 2.0. Good for edge deployments, mobile applications, or environments where GPU inference isn't available.
Best for: CPU-only inference, edge / mobile, tight latency budgets, prototyping.
Dimensions and Matryoshka
Modern embeddings often support variable dimensions through Matryoshka representation learning. A 3072-dim embedding can be truncated to 1024 or 512 dimensions with a small quality loss — useful when you have huge corpora and storage matters. See embedding API networking for the storage/bandwidth math.
How to actually evaluate
MTEB scores are a starting point but the only honest evaluation is on your data:
- Build a small test set of 50-100 queries with known good answers.
- Embed your corpus with each candidate model.
- For each query, measure: did the relevant doc appear in top-5? top-10?
- Differences between top embeddings on MTEB often disappear on specific domain data. Differences on your domain data are the ones that matter.
Cost comparison
Per-million-token pricing (rough indicative):
- OpenAI text-embedding-3-small: ~$0.02/1M tokens. Cheapest API.
- OpenAI text-embedding-3-large: ~$0.13/1M tokens.
- Cohere embed-v3: similar to OpenAI tier-equivalents.
- Voyage-3: similar pricing tier.
- Self-hosted BGE/Nomic: hardware cost only (one mid-range GPU embeds millions of docs/hour).
For one-time corpus indexing of millions of documents, managed API can run thousands of dollars. For ongoing query embedding (one per user query), API cost is negligible vs the LLM call cost.
Frequently Asked Questions
Which embedding model is best for RAG?
OpenAI text-embedding-3-large and Voyage-3 are the strongest managed-API choices. For self-hosted, BGE-M3 is the most-used. The best for your case depends on whether you need multilingual support, domain specialization (code, legal, medical), or specific cost constraints.
What is the difference between dense and sparse embeddings?
Dense embeddings are continuous vectors capturing semantic meaning. Sparse embeddings (like BM25 or SPLADE) capture lexical / keyword signal. Hybrid retrieval combines both. BGE-M3 produces all three from one model — useful for hybrid search out of the box.
Should I use OpenAI ada-002 or text-embedding-3?
text-embedding-3-small or -large. ada-002 is the older generation and is deprecated for new use; text-embedding-3 is strictly better at lower or comparable cost.
Can I self-host an embedding model on CPU?
Yes. Smaller models like Nomic-embed-text-v1.5 (137M parameters) and all-MiniLM-L6-v2 (22M parameters) run efficiently on CPU. Throughput is much lower than GPU but adequate for low-query-rate applications. Quality is below frontier models.
How often should I re-embed my corpus?
Every time you change embedding model. Changing the model invalidates all existing vectors because cross-model similarity is meaningless. Plan for a full reindex when upgrading. Re-embedding the same documents with the same model isn't needed unless content changed.