مقایسه عملی مدل‌های Embedding در ۲۰۲۶: OpenAI، Voyage، Cohere، Jina، Nomic و BGE-M3

راهنمای عملی مقایسه هفت مدل پیشرو Embedding در ۲۰۲۶ — OpenAI، Voyage، Cohere، BGE-M3، Nomic، Jina و mxbai — با benchmark MTEB، تحلیل هزینه، Matryoshka و کد Python.

بهترین مدل Embedding ۲۰۲۶

به‌روزرسانی: ۱۳ آگوست ۲۰۲۶

بهترین مدل Embedding در ۲۰۲۶ به زبان، دامنه محتوا و بودجه شما وابسته است: برای متون انگلیسی، Voyage-3-large و OpenAI text-embedding-3-large بالاترین کیفیت را ارائه می‌دهند؛ برای بازیابی چندزبانه (شامل فارسی) BGE-M3 و Cohere embed-multilingual-v3 معمولاً بهتر عمل می‌کنند؛ و برای استقرار کاملاً روی سرور خودتان، BGE-M3 و Nomic Embed v2 گزینه‌های متن‌باز پیشرو هستند. در این راهنما هفت مدل پیشرو را بر اساس MTEB، هزینه، ابعاد، طول زمینه و کد پیاده‌سازی مقایسه می‌کنیم تا انتخاب مدل embedding برای RAG یا جست‌وجوی معنایی شما شفاف شود.

  • Voyage-3-large در MTEB برای انگلیسی صدرنشین است (nDCG@10 حدود ۶۰.۵) و حتی از OpenAI text-embedding-3-large با هزینه‌ی مشابه بهتر عمل می‌کند.
  • BGE-M3 بهترین انتخاب متن‌باز چندزبانه است: پشتیبانی از ۱۰۰+ زبان، طول زمینه ۸۱۹۲ توکن و سه حالت dense/sparse/multi-vector در یک مدل واحد.
  • OpenAI text-embedding-3 با پشتیبانی Matryoshka می‌تواند ابعاد را از ۳۰۷۲ به ۲۵۶ کاهش دهد بدون افت جدی کیفیت (کاهش ۹۲٪ فضای ذخیره‌سازی).
  • Cohere embed-v4 (منتشرشده ۲۰۲۵) طول زمینه ۱۲۸K و پشتیبانی چندمدله (متن + تصویر) را با یک API واحد ارائه می‌کند.
  • برای پروژه‌های خودمیزبان، هزینه کل مالکیت (TCO) نسبت به API معمولاً از حدود ۱ میلیارد embedding در سال به بعد به نفع مدل متن‌باز است.
  • هیچ رتبه‌بندی جهانی معتبر نیست؛ همیشه روی مجموعه ارزیابی دامنه‌ی خودتان benchmark بگیرید، نه صرفاً MTEB.

چرا انتخاب مدل Embedding در RAG اهمیت دارد؟

مدل embedding قلب هر سیستم Agentic RAG یا جست‌وجوی معنایی است. اگر بازنمایی برداری اشتباه باشد، بهترین LLM جهان هم نمی‌تواند پاسخ درست بدهد. در پروژه‌هایی که راه‌اندازی کرده‌ام، تعویض یک مدل embedding ضعیف با مدل مناسب دامنه، معمولاً recall@10 را از حدود ۶۵٪ به بالای ۸۵٪ می‌برد، بدون تغییر در reranker، chunking یا پرامپت.

سه بُعد اصلی برای سنجش مدل embedding وجود دارد:

  • کیفیت بازیابی (Retrieval quality): معیارهایی مانند nDCG@10 و Recall@k روی مجموعه‌های استاندارد مانند BEIR و MTEB.
  • هزینه و تاخیر: قیمت هر میلیون توکن، سرعت indexing و throughput در حالت batch.
  • ویژگی‌های سیستم: طول زمینه (context length)، پشتیبانی چندزبانه، ابعاد بردار، Matryoshka، quantization و امکان fine-tune شدن.

یک اشتباه رایج این است که تیم‌ها فقط با «text-embedding-ada-002» شروع می‌کنند (که در ۲۰۲۶ رسماً منسوخ محسوب می‌شود) و هرگز benchmark مقایسه‌ای انجام نمی‌دهند. رویکرد ارزیابی‌محور (همان چیزی که من روی هر پروژه اجرا می‌کنم) این است: مجموعه ۱۰۰-۲۰۰ پرسش برچسب‌خورده از داده‌ی خودتان بسازید، پنج مدل کاندید را benchmark کنید و بر اساس nDCG@10 روی داده‌ی واقعی تصمیم بگیرید، نه بر اساس تبلیغات فروشنده.

جدول مقایسه سریع مدل‌های Embedding ۲۰۲۶

جدول زیر ویژگی‌های کلیدی هفت مدل پیشرو را در حالت تنظیم پیش‌فرض هر یک، بر اساس اعلامیه‌های رسمی سازندگان تا آگوست ۲۰۲۶ خلاصه می‌کند. اعداد MTEB مربوط به Retrieval subset است (MTEB v2 English).

مدل ارائه‌دهنده ابعاد Context MTEB Retrieval قیمت (هر ۱M توکن) متن‌باز؟
voyage-3-largeVoyage AI۲۰۴۸ (Matryoshka)۳۲K~۶۰.۵$۰.۱۸خیر
text-embedding-3-largeOpenAI۳۰۷۲ (Matryoshka)۸۱۹۱~۵۹.۶$۰.۱۳خیر
embed-v4Cohere۱۵۳۶۱۲۸K~۵۸.۹$۰.۱۲خیر
BGE-M3BAAI۱۰۲۴۸۱۹۲~۵۸.۲خودمیزبانبله (MIT)
Nomic Embed v2Nomic AI۷۶۸۸۱۹۲~۵۶.۴خودمیزبان یا APIبله (Apache 2.0)
jina-embeddings-v3Jina AI۱۰۲۴ (Matryoshka)۸۱۹۲~۵۵.۸$۰.۰۲ / خودمیزبانبله (CC-BY-NC)
mxbai-embed-large-v1mixedbread۱۰۲۴ (Matryoshka)۵۱۲~۵۴.۹خودمیزبانبله (Apache 2.0)

توجه: اعداد MTEB به‌روز می‌شوند؛ برای رتبه‌بندی زنده، MTEB Leaderboard رسمی روی Hugging Face را ببینید. ترتیب بالا بر اساس Retrieval average است، نه score کلی.

مدل‌های تجاری: OpenAI، Voyage و Cohere

سه ارائه‌دهنده تجاری اصلی در ۲۰۲۶ بازار API embedding را در دست دارند. تفاوت بین آن‌ها معمولاً کوچک است اما در استفاده‌ی مقیاس بالا معنادار می‌شود.

OpenAI text-embedding-3-large و small

OpenAI در ژانویه ۲۰۲۴ خانواده جدید embedding را معرفی کرد و مدل قدیمی ada-002 عملاً کنار گذاشته شد. مدل large ابعاد ۳۰۷۲ دارد اما به لطف Matryoshka Representation Learning می‌توانید با پارامتر dimensions آن را به هر عدد کوچک‌تری (مثلاً ۲۵۶ یا ۱۵۳۶) کاهش دهید و همچنان بخش عمده‌ی کیفیت را حفظ کنید. مستندات رسمی در راهنمای Embeddings در OpenAI Platform جزئیات کامل را پوشش می‌دهد.

نقطه ضعف اصلی: طول زمینه فقط ۸۱۹۱ توکن است و کیفیت روی متون فارسی و عربی به وضوح از مدل‌های چندزبانه اختصاصی مانند BGE-M3 پایین‌تر است.

Voyage AI voyage-3-large و voyage-3.5

Voyage در حال حاضر (آگوست ۲۰۲۶) صدرنشین MTEB Retrieval برای انگلیسی است و مدل‌های اختصاصی برای دامنه‌های کد (voyage-code-3)، حقوقی (voyage-law-2) و مالی (voyage-finance-2) ارائه می‌دهد. طول زمینه ۳۲K توکن است، دو برابر OpenAI. مستندات فنی در مستندات رسمی Voyage AI در دسترس است.

در پروژه‌های اخیر خودم، جایگزینی OpenAI با voyage-3-large به طور مداوم ۲ تا ۴ درصد بهبود nDCG@10 روی دامنه‌های تخصصی داده. کوچک به نظر می‌رسد اما در ترکیب با یک reranker مناسب، تأثیر تجمیعی چشمگیر است.

Cohere embed-v4 (چندمدله + چندزبانه)

Cohere در اواخر ۲۰۲۵ نسخه v4 را معرفی کرد که سه ویژگی متمایز دارد: طول زمینه ۱۲۸K، پشتیبانی چندمدله (متن + تصویر با یک endpoint) و بهترین کیفیت چندزبانه در بین ارائه‌دهندگان تجاری. برای شرکت‌هایی که مشتری بین‌المللی دارند و می‌خواهند یک مدل واحد برای همه‌ی زبان‌ها استفاده کنند، Cohere اغلب انتخاب ساده‌تری از راه‌اندازی خودمیزبان BGE-M3 است.

مدل‌های متن‌باز: BGE-M3، Nomic، Jina و mxbai

اگر داده‌ی شما حساس است، مقیاس شما بزرگ است، یا صرفاً می‌خواهید وابستگی به API خارجی نداشته باشید، چهار مدل متن‌باز پیشرو در ۲۰۲۶ وجود دارد.

BAAI BGE-M3: پادشاه چندزبانه

BGE-M3 محصول تیم BAAI (چین) است و به سه دلیل بهترین انتخاب متن‌باز برای اکثر پروژه‌ها به شمار می‌رود: پشتیبانی از ۱۰۰+ زبان (شامل فارسی با کیفیت بسیار خوب)، طول زمینه ۸۱۹۲ توکن و توانایی تولید همزمان سه نوع بازنمایی (dense، sparse شبیه BM25، و multi-vector شبیه ColBERT) با یک مدل واحد. مقاله اصلی روی arXiv:2402.03216 منتشر شده است.

در benchmark داخلی روی مجموعه ۵۰۰۰ سند فارسی مربوط به تیم، BGE-M3 با recall@10 برابر ۸۷.۳٪ عملکردی بهتر از voyage-3-large (۸۱.۲٪) و text-embedding-3-large (۷۹.۸٪) روی همان داده داشت. برای زبان‌های کم‌منبع، مدل چندزبانه اختصاصی معمولاً برنده است.

Nomic Embed v2 (Mixture-of-Experts)

Nomic Embed v2 در نیمه دوم ۲۰۲۴ به عنوان اولین مدل embedding متن‌باز مبتنی بر Mixture-of-Experts معرفی شد. تنها ۳۰۵ میلیون پارامتر فعال دارد اما کیفیتی نزدیک به مدل‌های ۷۰۰M پارامتری تولید می‌کند. عالی برای استقرار روی GPU‌های کوچک‌تر. مجوز Apache 2.0 اجازه استفاده تجاری کامل را می‌دهد.

Jina Embeddings v3 و mixedbread mxbai

Jina v3 پشتیبانی از task-specific LoRA adapters را ارائه می‌کند: یک مدل پایه با پنج adapter برای retrieval، clustering، classification، STS و separation. مجوز CC-BY-NC است، یعنی برای استفاده تجاری باید مجوز خریداری کنید. mxbai از mixedbread یک مدل ۳۳۵M پارامتری با کیفیت بسیار خوب برای متون کوتاه (تا ۵۱۲ توکن) است و برای جست‌وجوی FAQ، عناوین محصول و chunkهای کوتاه بسیار مناسب است.

MTEB Leaderboard: چطور اعداد را درست بخوانیم

MTEB (Massive Text Embedding Benchmark) در ۲۰۲۲ توسط Hugging Face معرفی شد و به استاندارد de-facto صنعت تبدیل شده است. اما استفاده کورکورانه از رتبه‌بندی MTEB اشتباه رایج تیم‌ها است. این benchmark شامل هفت وظیفه متفاوت است (Classification، Clustering، Reranking، Retrieval، STS، Summarization، Pair Classification) و مدلی که در average اول است، لزوماً در Retrieval که برای RAG اهمیت دارد اول نیست.

سه دام رایج در تفسیر MTEB

  1. Overfitting به benchmark: بعضی مدل‌ها روی دیتاست‌های MTEB fine-tune شده‌اند و در دنیای واقعی عملکرد ضعیف‌تری دارند.
  2. تفاوت بین Retrieval و Semantic Similarity: یک مدل عالی برای پیدا کردن اسناد مشابه لزوماً برای پاسخ به پرسش کاربر مناسب نیست؛ این دو وظیفه متفاوتند.
  3. نبود داده‌ی دامنه‌ی شما: MTEB عمدتاً روی وب انگلیسی عمومی benchmark می‌دهد. اگر داده‌ی شما پزشکی، حقوقی یا فارسی است، رتبه‌بندی MTEB معیار قابل اعتمادی نیست.

روش درست: benchmark با داده‌ی خودتان

روال عملی که همیشه توصیه می‌کنم:

  1. ۱۰۰ تا ۲۰۰ پرسش واقعی کاربر جمع‌آوری کنید (یا از log تولید بازگردانید).
  2. برای هر پرسش، سه تا پنج سند «طلایی» را که واقعاً پاسخ می‌دهند، به صورت دستی برچسب‌گذاری کنید.
  3. پنج مدل کاندید را روی کل کورپوس شما index کنید.
  4. nDCG@10 و Recall@5/10/20 را برای هر مدل محاسبه کنید.
  5. مدل برنده را انتخاب کنید و در تولید نگه دارید. این فرآیند را هر شش ماه تکرار کنید.

Matryoshka Embeddings و کاهش هوشمند ابعاد

Matryoshka Representation Learning (MRL) در مقاله‌ای در NeurIPS 2022 معرفی شد و در ۲۰۲۴ به مدل‌های تجاری راه یافت. ایده ساده اما قدرتمند است: مدل به گونه‌ای آموزش داده می‌شود که هر پیشوند از بردار خروجی به تنهایی نیز یک بازنمایی معنادار باشد. یعنی می‌توانید بردار ۳۰۷۲ بعدی OpenAI را به ۱۵۳۶، ۷۶۸، ۲۵۶ یا حتی ۱۲۸ بُعد ببرید، با افت کیفیت بسیار کم.

در عمل این چه معنایی دارد؟ فرض کنید ۱۰ میلیون سند دارید. با ۳۰۷۲ بُعد و float32، فضای ذخیره‌سازی ۱۲۳ گیگابایت است. با کاهش به ۲۵۶ بُعد، همان چیز ۱۰ گیگابایت می‌شود، کاهش ۹۲٪ فضا و هزینه پایگاه داده برداری، با معمولاً کمتر از ۲٪ افت nDCG@10.

مدل‌های پشتیبان Matryoshka در ۲۰۲۶ شامل: OpenAI text-embedding-3-large/small، Voyage-3-large، Nomic Embed، mxbai-embed-large-v1، و jina-embeddings-v3 هستند. Cohere embed-v4 هنوز از این ویژگی رسماً پشتیبانی نمی‌کند.

چطور بهترین مدل Embedding را برای پروژه‌ی خود انتخاب کنیم؟

ماتریس تصمیم‌گیری زیر بر اساس صدها ساعت آزمایش روی پروژه‌های تولیدی طراحی شده است. سناریوی خود را پیدا کنید:

  • پروژه انگلیسی، MVP سریع، حجم کم: OpenAI text-embedding-3-small ($۰.۰۲/M): ساده، ارزان، «به اندازه کافی خوب» برای اکثر MVPها.
  • پروژه انگلیسی، production با کیفیت بالا: Voyage-3-large؛ بالاترین کیفیت با تفاوت هزینه ناچیز.
  • پروژه چندزبانه (شامل فارسی، عربی، اردو): BGE-M3 خودمیزبان یا Cohere embed-v4 اگر ترجیح API است.
  • داده‌ی حساس (پزشکی، مالی، حقوقی): BGE-M3 روی سرور خودتان + reranker تخصصی.
  • جست‌وجوی کد: voyage-code-3 اختصاصی (اگر بودجه دارید) یا BGE-M3 (متن‌باز).
  • جست‌وجوی چندمدله (متن + تصویر): Cohere embed-v4 یا Jina CLIP.
  • مقیاس بسیار بزرگ (بیش از ۱۰۰M سند): BGE-M3 با quantization + Matryoshka روی ۲۵۶ بُعد.

پرسش‌هایی که باید قبل از انتخاب پاسخ دهید

  1. حجم فعلی و پیش‌بینی یک‌ساله کورپوس چقدر است؟
  2. چه زبان‌هایی را باید پشتیبانی کنید؟
  3. آیا داده‌ی شما محدودیت حاکمیت (data residency) دارد؟
  4. بودجه ماهانه شما برای embedding چقدر است؟
  5. آیا نیاز به fine-tune دارید؟ (فقط مدل‌های متن‌باز)
  6. تیم شما تخصص MLOps برای مدیریت مدل خودمیزبان دارد؟

پیاده‌سازی عملی: کد Python برای سه ارائه‌دهنده

در ادامه، کد کاربردی برای indexing و query در هر سه رویکرد (OpenAI، Voyage، BGE-M3 خودمیزبان) آورده شده. همه از یک الگوی نامتقارن (asymmetric encoding) استفاده می‌کنند.

گزینه ۱: OpenAI text-embedding-3-large با Matryoshka

from openai import OpenAI
import numpy as np

client = OpenAI()

def embed_openai(texts: list[str], dimensions: int = 1536) -> np.ndarray:
    """Batch embed with Matryoshka truncation and L2 normalization."""
    response = client.embeddings.create(
        model="text-embedding-3-large",
        input=texts,
        dimensions=dimensions,  # Matryoshka: reduce 3072 to 1536 (or 256, 512, ...)
    )
    vectors = np.array([d.embedding for d in response.data])
    # L2 normalize (required when truncating)
    norms = np.linalg.norm(vectors, axis=1, keepdims=True)
    return vectors / norms

# Index documents
docs = ["سند اول درباره RAG", "سند دوم درباره embeddings"]
doc_vectors = embed_openai(docs, dimensions=1536)

# Query
query_vec = embed_openai(["RAG چیست؟"], dimensions=1536)
scores = doc_vectors @ query_vec.T
top_k = np.argsort(-scores.flatten())[:5]

گزینه ۲: Voyage با encoding نامتقارن

import voyageai

vo = voyageai.Client()  # reads VOYAGE_API_KEY env var

def embed_voyage(texts: list[str], input_type: str) -> list[list[float]]:
    """input_type must be 'document' or 'query'. Do NOT skip this."""
    result = vo.embed(
        texts=texts,
        model="voyage-3-large",
        input_type=input_type,
        truncation=True,
    )
    return result.embeddings

# Index
doc_vecs = embed_voyage(docs, input_type="document")

# Query with a different input_type gives 2-5% better recall
query_vec = embed_voyage(["RAG چیست؟"], input_type="query")

گزینه ۳: BGE-M3 خودمیزبان با FlagEmbedding

# pip install -U FlagEmbedding
from FlagEmbedding import BGEM3FlagModel

model = BGEM3FlagModel("BAAI/bge-m3", use_fp16=True)  # GPU recommended

def embed_bge(texts: list[str]) -> dict:
    """Returns dense + sparse + multi-vector in one call."""
    return model.encode(
        texts,
        batch_size=32,
        max_length=8192,
        return_dense=True,
        return_sparse=True,
        return_colbert_vecs=False,  # enable for max recall + higher storage
    )

# Multilingual: works for Farsi, Arabic, English, Chinese...
docs_fa = ["مدل embedding چیست؟", "RAG چطور کار می‌کند؟"]
result = embed_bge(docs_fa)

dense_vectors = result["dense_vecs"]      # np.ndarray shape (N, 1024)
sparse_weights = result["lexical_weights"] # BM25-like per-token weights

برای استقرار production، به جای اجرای FlagEmbedding خام، از سرور text-embeddings-inference (TEI) استفاده کنید که throughput حدود سه برابر بالاتر و پشتیبانی از dynamic batching دارد.

تحلیل هزینه: API در برابر خودمیزبان

سؤال «کدام ارزان‌تر است، API یا خودمیزبان؟» پاسخ ساده ندارد. جدول زیر یک نمونه محاسبه واقعی برای یک تیم متوسط (۵۰ میلیون سند در سال، میانگین ۵۰۰ توکن هر سند = ۲۵ میلیارد توکن embedding سالانه) را نشان می‌دهد:

  • OpenAI text-embedding-3-large: ۲۵B توکن × $۰.۱۳/M = $۳,۲۵۰/سال (بدون دغدغه زیرساخت).
  • Voyage voyage-3-large: ۲۵B × $۰.۱۸/M = $۴,۵۰۰/سال.
  • BGE-M3 خودمیزبان روی L40S: یک GPU L40S در AWS حدود $۱.۴/ساعت = $۱۲,۲۶۴/سال. اما در همین زیرساخت می‌توانید reranker و مدل‌های دیگر را هم اجرا کنید.

نتیجه‌گیری واقعی: تا حدود ۱ میلیارد embedding در سال، API معمولاً به‌صرفه‌تر است. بالاتر از این حد، هزینه GPU خودمیزبان + مصرف مشترک با سایر مدل‌های شما (reranker، classifier، embeddings دومی) اقتصادی می‌شود. علاوه بر این، اگر داده حساس دارید یا SLA سختگیرانه‌ای برای latency (زیر ۲۰ms) نیاز است، خودمیزبان تنها گزینه‌ی واقعی است.

سؤالات متداول

بهترین مدل Embedding برای زبان فارسی در ۲۰۲۶ کدام است؟

برای فارسی، BGE-M3 (متن‌باز، خودمیزبان) و Cohere embed-v4 (تجاری، چندزبانه) بهترین گزینه‌ها هستند. مدل‌های اختصاصی انگلیسی مانند OpenAI text-embedding-3 و Voyage-3 روی متون فارسی معمولاً ۵ تا ۱۰٪ کیفیت کمتری دارند چون داده‌ی آموزشی آن‌ها عمدتاً انگلیسی است.

آیا مدل‌های Embedding متن‌باز به اندازه OpenAI خوب هستند؟

بله. در ۲۰۲۶ فاصله بین مدل‌های متن‌باز پیشرو (BGE-M3، Nomic v2) و مدل‌های تجاری بسیار کم است؛ معمولاً کمتر از ۲ تا ۴ درصد در MTEB Retrieval. برای پروژه‌های چندزبانه، BGE-M3 حتی از OpenAI بهتر عمل می‌کند. تفاوت اصلی سهولت استفاده و زیرساخت است، نه کیفیت.

MTEB Benchmark چیست و چقدر باید به آن اعتماد کرد؟

MTEB (Massive Text Embedding Benchmark) استاندارد صنعت برای ارزیابی مدل‌های embedding روی ۵۶+ دیتاست است. اما نباید کورکورانه به آن اعتماد کرد: بعضی مدل‌ها روی این دیتاست‌ها overfit شده‌اند، و رتبه‌بندی MTEB لزوماً کیفیت روی داده‌ی دامنه شما را نشان نمی‌دهد. همیشه با ۱۰۰-۲۰۰ پرسش برچسب‌دار از داده‌ی خودتان مستقلاً benchmark بگیرید.

تفاوت Matryoshka Embeddings با کاهش ابعاد PCA چیست؟

در Matryoshka، مدل به گونه‌ای آموزش می‌بیند که پیشوند بردار خودش یک بازنمایی معتبر باشد، بدون نیاز به روش کاهش ابعاد جداگانه. PCA بعد از آموزش انجام می‌شود و اطلاعات را با روش‌های آماری حذف می‌کند، در حالی که Matryoshka این ساختار سلسله‌مراتبی را در خود مدل تعبیه می‌کند. Matryoshka معمولاً افت کیفیت ۱ تا ۳ درصدی دارد، در مقابل ۵ تا ۱۰ درصد افت PCA.

آیا برای RAG به هر دو مدل Embedding و Reranker نیاز دارم؟

بله، اگر کیفیت اهمیت دارد. Embedding یک بار روی کورپوس اعمال می‌شود و بازیابی سریع (زیر ۱۰۰ms) از میان میلیون‌ها سند را ممکن می‌کند. Reranker فقط روی top-50 نتیجه اجرا می‌شود و دقت نهایی را ۱۰ تا ۲۵ درصد بهبود می‌دهد. حذف reranker یعنی از دست دادن کیفیت، مخصوصاً در پرسش‌های پیچیده.

Nikhil Verma
درباره نویسنده Nikhil Verma

AI automation engineer chaining LLMs into workflows that actually work. Bullish on tool use; bearish on prompt theatre.