CodeShot

Embedding متراکم (Dense) در مقابل Embedding پراکنده (Sparse)

Embedding متراکم بردارهایی با صدها یا هزاران بُعد اما بدون صفر زیاد تولید می‌کند که معنای مفهومی متن را در فضای پیوسته نشان می‌دهد (تولیدشده توسط مدل‌های عصبی)، در حالی که Embedding پراکنده (مثل TF-IDF یا BM25) بردارهایی بسیار بزرگ اما عمدتاً صفر دارد که مستقیماً بر اساس فراوانی کلمات کار می‌کند و برای تطابق دقیق کلمه کلیدی قوی‌تر است.

ویژگیEmbedding متراکم (Dense)Embedding پراکنده (Sparse)
تعداد ابعاد غیرصفراکثراً غیرصفراکثراً صفر
قدرت در تطابق معناییبالاپایین
قدرت در تطابق کلمه دقیقضعیف‌ترقوی

کِی از Embedding متراکم (Dense) استفاده کنیم؟

وقتی می‌خواهید شباهت معنایی بین جملاتی که کلمات متفاوتی دارند اما مفهوم مشابهی دارند تشخیص دهید.

کِی از Embedding پراکنده (Sparse) استفاده کنیم؟

وقتی تطابق دقیق کلمه کلیدی یا عبارت خاص (مثل کد محصول یا نام دقیق) اهمیت بیشتری از شباهت معنایی دارد.

مثال Embedding متراکم (Dense)

from openai import OpenAI
vec = client.embeddings.create(
    model="text-embedding-3-small", input="گربه روی مبل"
).data[0].embedding  # بردار متراکم ۱۵۳۶ بُعدی

مثال Embedding پراکنده (Sparse)

from rank_bm25 import BM25Okapi
bm25 = BM25Okapi(tokenized_corpus)
scores = bm25.get_scores(["گربه", "مبل"])  # بر اساس کلمات دقیق

اشتباه رایج

اشتباه رایج تکیه صرف بر Embedding متراکم برای جستجوهای دقیق مثل شماره سریال یا کد خطا است؛ مدل‌های معنایی ممکن است این عبارات دقیق را به‌درستی تشخیص ندهند، در حالی که ترکیب با جستجوی Sparse (Hybrid Search) دقت بسیار بهتری می‌دهد.

جمع‌بندی

برای شباهت معنایی و مفهومی از Embedding متراکم و برای تطابق دقیق کلمه کلیدی از Embedding پراکنده استفاده کنید؛ سیستم‌های جستجوی مدرن اغلب هر دو را ترکیب می‌کنند (Hybrid Search).