Choosing an Embedding Model for Local RAG

Choosing an embedding model for local RAG: Nomic Embed, MxBai Embed Large, and BGE-M3 compared on size, context length, and language support.

The embedding model is the piece of a RAG pipeline that decides what “similar” means, and picking the wrong one silently caps your retrieval quality no matter how good the vector database or the generation model is downstream — a vector database can only rank what the embedding model gave it to rank. Our catalogue tracks three open-weight embedding models, and the right one depends on document language and how you plan to search, not on which is “best” in the abstract.

The three embedding models compared

Nomic Embed TextMxBai Embed LargeBGE-M3
PublisherNomic AIMixedbread AIBAAI
Parameters137M335M567M
Context window8K tokens512 tokens8K tokens
Language coverageEnglish-focusedEnglish-focused100+ languages
Retrieval modesDenseDenseDense, sparse, and multi-vector
VRAM floor0 GB (CPU)0 GB (CPU)1 GB
LicenseApache 2.0Apache 2.0MIT
Best forDefault RAG embeddingHigh-quality English embeddingsMultilingual and hybrid retrieval

The 512-token context window on MxBai Embed Large is the single biggest practical constraint in this table: if your RAG chunking strategy produces passages longer than roughly 400 words, MxBai will silently truncate them before embedding, and the truncated tail of every long chunk is invisible to retrieval. Nomic Embed Text and BGE-M3 both handle 8K-token passages, which covers most chunking strategies without truncation.

Why parameter count isn’t the deciding factor

BGE-M3 at 567M parameters is over four times the size of Nomic Embed Text’s 137M, but that size difference buys multilingual coverage and three retrieval modes, not a strictly better English embedding. BAAI built BGE-M3 to support dense retrieval (the standard “embed both query and document, compare vectors” approach), sparse retrieval (keyword-weighted, closer to traditional search), and multi-vector retrieval (finer-grained matching within a document) in one model, specifically for multilingual and hybrid-search use cases. If your documents are entirely English and your search is a standard dense-vector RAG setup, that extra capability is dead weight — Nomic Embed Text’s 137M parameters is meaningfully cheaper to run at nearly the same practical retrieval quality for that narrower job.

A worked decision path

Start with what your documents actually are:

  • English-only documents, standard RAG chatbot → Nomic Embed Text. It’s the catalogue default for a reason: smallest footprint, CPU-friendly, 8K context, and it’s what most RAG tutorials and frameworks assume when they don’t specify.
  • English-only documents, quality matters more than footprint → MxBai Embed Large, but only if your chunks stay under roughly 400 words — check your chunking strategy against its 512-token window before committing.
  • Documents in multiple languages, or you need both keyword and semantic matching → BGE-M3. Its hybrid retrieval modes are the only ones in this table built to combine keyword precision with semantic recall in one pass.

None of the three needs a GPU to run — all three list a VRAM floor of 0-2GB, so the hardware decision for your RAG pipeline is really about the generation model, not the embedding step.

Pairing with a vector database

The embedding model and the database that stores its output are separate decisions. ChromaDB is the lowest-friction starting point for any of the three embedding models above — zero-config setup with simple Python and JS APIs. Qdrant and Weaviate both add production features (multi-tenancy, horizontal scaling) once a single-machine ChromaDB setup stops being enough. pgvector is the pick when your embeddings need to live alongside relational data you already have in Postgres, and FAISS is the choice for billion-scale similarity search where operational simplicity matters less than raw retrieval speed. Our full vector database comparison covers the operational trade-offs in more depth.

Limitations

None of these three embedding models is evaluated here against a standardized public retrieval benchmark — our catalogue reports what each publisher states about its own model (parameters, context window, license, intended use), not independent third-party benchmark scores, so treat the “best for” guidance above as a starting point to test against your own documents, not a guaranteed ranking. Retrieval quality also depends heavily on chunking strategy and query phrasing, both of which can matter more than the embedding model choice itself for a poorly-tuned pipeline.

Bottom line

Default to Nomic Embed Text unless you have a specific reason not to: it’s the smallest, runs on CPU, and its 8K context window means your chunking strategy won’t get silently truncated. Reach for BGE-M3 specifically for multilingual documents or hybrid search, and consider MxBai Embed Large only after confirming your chunks fit its 512-token window. Whichever you pick, re-embedding your corpus is the cost of changing your mind later, so test against a representative sample of your own documents before indexing everything.

Frequently Asked Questions

Does a bigger embedding model always retrieve better?

Not proportionally. Our catalogue's largest embedding model, BGE-M3 at 567M parameters, isn't a strict upgrade over the 137M Nomic Embed Text — it wins specifically on multilingual and hybrid retrieval, not on raw English quality. Match the model to what your documents actually need rather than defaulting to the biggest one.

Can I switch embedding models after I've already indexed documents?

Not without re-indexing. Every document's stored vector was produced by one specific embedding model, and a query embedded with a different model lives in a different vector space — comparing across them produces meaningless similarity scores. Switching embedding models means re-embedding your entire corpus, not just changing a config value.

Do I need a GPU to run an embedding model?

No. All three embedding models in our catalogue list a VRAM floor of 0-2GB and run comfortably on CPU — embedding a document corpus is a one-time or incremental batch job, not a latency-critical interactive path, so the hardware bar is far lower than for the LLM doing generation.

Which vector database should I pair with my embedding model?

The embedding model and the vector database are independent choices — any of ChromaDB, Qdrant, FAISS, pgvector, or Weaviate can store vectors from any of the three embedding models here, since they all store fixed-length float vectors regardless of what produced them. Pick the embedding model for retrieval quality and language coverage, and the database for your operational constraints; see this guide's vector database section below, or our full ChromaDB vs Qdrant vs FAISS vs pgvector comparison, for the operational trade-offs.