EmbeddingGemma چیست؟
EmbeddingGemma مدل متنباز و سبک Google DeepMind برای ساخت Text Embedding است. این مدل بر پایه معماری Gemma 3 ساخته شده و نسخه رسمی آن حدود 308 میلیون پارامتر دارد؛ به همین دلیل معمولاً با نام «EmbeddingGemma 300M» هم دیده میشود.
Embedding با مدل زبانی مولد فرق دارد. یک LLM معمولی متن تولید میکند، اما EmbeddingGemma متن را به یک بردار عددی تبدیل میکند؛ برداری که تلاش میکند معنا، موضوع و ارتباط مفهومی متن را نمایش دهد. در نتیجه متنهایی که از نظر معنایی به هم نزدیکاند، معمولاً بردارهای نزدیکتری هم خواهند داشت.
این ویژگی پایه بسیاری از سیستمهای Semantic Search، RAG، Recommendation، Classification، Clustering و Duplicate Detection است.
مشخصات مهم EmbeddingGemma
| ویژگی | مقدار |
|---|---|
| سازنده | Google DeepMind |
| معماری | مبتنی بر Gemma 3 |
| اندازه | حدود 308M پارامتر |
| نوع ورودی | متن |
| Context Window | تا 2K توکن |
| ابعاد اصلی Embedding | 768 |
| ابعاد قابل استفاده با MRL | 512، 256 و 128 |
| زبانها | آموزشدیده روی بیش از 100 زبان |
| کاربرد اصلی | Retrieval، Similarity، Classification و Clustering |
| اجرای محلی | بله؛ مناسب لپتاپ، دسکتاپ و دستگاههای کممنبع |
Embedding دقیقاً چه کاری انجام میدهد؟
فرض کنید سه جمله داریم:
- «هوش مصنوعی در مدیریت ارتباط با مشتری کاربرد دارد.»
- «AI میتواند تجربه مشتری در CRM را بهبود دهد.»
- «امروز هوا سرد است.»
EmbeddingGemma برای هر جمله یک بردار عددی میسازد. انتظار داریم دو جمله اول از نظر فاصله برداری به هم نزدیکتر از جمله سوم باشند. با معیارهایی مانند Cosine Similarity میتوان این نزدیکی معنایی را محاسبه کرد.
مهمترین کاربردهای EmbeddingGemma
1. جستوجوی معنایی
در جستوجوی سنتی معمولاً وجود کلمه کلیدی مهم است. اما در Semantic Search، کاربر میتواند عبارتی متفاوت از متن سند بنویسد و سیستم همچنان سند مرتبط را پیدا کند.
برای مثال، جستوجوی «چطور مشتریهای ناراضی را حفظ کنیم؟» میتواند مقالهای درباره «کاهش Customer Churn» را پیدا کند، حتی اگر عبارت دقیق سؤال در مقاله وجود نداشته باشد.
2. ساخت RAG
یکی از مهمترین کاربردها، استفاده در Retrieval-Augmented Generation است. جریان معمول چنین است:
- اسناد به بخشهای کوچکتر یا Chunk تقسیم میشوند.
- برای هر Chunk با EmbeddingGemma بردار ساخته میشود.
- بردارها در Vector Database ذخیره میشوند.
- سؤال کاربر نیز Embed میشود.
- نزدیکترین Chunkها بازیابی میشوند.
- متنهای بازیابیشده به یک LLM داده میشوند تا پاسخ نهایی را تولید کند.
EmbeddingGemma خودش پاسخ متنی تولید نمیکند؛ نقش آن پیدا کردن Context مناسب برای مدل مولد است.
3. تشخیص شباهت و محتوای تکراری
میتوان برای پیدا کردن مقالات مشابه، سؤالهای تکراری، Ticketهای مشابه یا محصولات نزدیک به هم از Embedding استفاده کرد.
4. دستهبندی متن
بردارها را میتوان برای طبقهبندی پیامها استفاده کرد؛ برای مثال:
- فروش
- پشتیبانی فنی
- مالی
- شکایت مشتری
EmbeddingGemma برای Classification نیز prompt اختصاصی دارد.
5. خوشهبندی
اگر هزاران مقاله، پیام یا Ticket داشته باشید، میتوانید Embeddingها را با روشهایی مانند K-Means یا HDBSCAN خوشهبندی کنید و موضوعات مشترک را پیدا کنید.
6. جستوجوی کد
EmbeddingGemma prompt مخصوص Code Retrieval دارد؛ بنابراین میتواند برای پیدا کردن قطعهکد مرتبط بر اساس توضیح زبان طبیعی نیز استفاده شود.
اجرای EmbeddingGemma با Ollama
یکی از سادهترین روشها برای اجرای محلی مدل، Ollama است.
ابتدا مدل را دریافت کنید:
ollama pull embeddinggemmaسپس میتوانید API محلی Ollama را صدا بزنید:
curl http://localhost:11434/api/embed \
-d '{
"model": "embeddinggemma",
"input": "Semantic search is useful for RAG systems."
}'خروجی شامل آرایهای از اعداد اعشاری است که همان Embedding متن محسوب میشود.
استفاده در Python با Ollama
import ollama
response = ollama.embed(
model="embeddinggemma",
input="Embedding models convert text into numerical vectors."
)
vector = response["embeddings"][0]
print(len(vector))
print(vector[:8])در نسخه فعلی مدل، بردار کامل معمولاً 768 بعد دارد.
برای EmbeddingGemma در Ollama باید از نسخهای استفاده کنید که این مدل را پشتیبانی کند؛ صفحه رسمی Ollama حداقل نسخه 0.11.10 را ذکر میکند.
استفاده با Sentence Transformers
اگر کنترل بیشتری روی promptها، taskها و ابعاد بردار میخواهید، sentence-transformers انتخاب مناسبی است.
pip install -U sentence-transformersfrom sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-300m")
query = model.encode(
"What is semantic search?",
prompt_name="Retrieval-query"
)
document = model.encode(
"Semantic search retrieves information based on meaning.",
prompt_name="Retrieval-document"
)
score = model.similarity(query, document)
print(score)در Hugging Face لازم است شرایط استفاده از Gemma را برای دسترسی به فایلهای مدل بپذیرید.
Promptهای مهم در EmbeddingGemma
یکی از نکات مهم این مدل این است که نوع task را باید جدی بگیرید. Google برای کاربردهای مختلف promptهای متفاوتی تعریف کرده است.
| کاربرد | Prompt پیشنهادی |
|---|---|
| جستوجوی Query | task: search result | query: ... |
| Document | title: none | text: ... |
| Question Answering | task: question answering | query: ... |
| Fact Checking | task: fact checking | query: ... |
| Classification | task: classification | query: ... |
| Clustering | task: clustering | query: ... |
| Sentence Similarity | task: sentence similarity | query: ... |
| Code Retrieval | task: code retrieval | query: ... |
در sentence-transformers بسیاری از این موارد با prompt_name آماده هستند.
Query و Document را یکسان Embed نکنید
برای RAG بهتر است Query و Document با نقش مناسب Embed شوند:
query_embedding = model.encode(
"How does RAG work?",
prompt_name="Retrieval-query"
)
doc_embedding = model.encode(
"RAG combines retrieval with a generative language model.",
prompt_name="Retrieval-document"
)اگر عنوان سند را دارید، میتوانید آن را هم وارد prompt کنید:
doc_embedding = model.encode(
"RAG combines retrieval with generation.",
prompt="title: Introduction to RAG | text: "
)Google اشاره میکند که اضافهکردن عنوان مناسب میتواند عملکرد Document Embedding را بهتر کند.
Matryoshka Representation Learning یا MRL چیست؟
EmbeddingGemma بهصورت پیشفرض بردار 768 بعدی ایجاد میکند، اما با MRL میتوانید فقط بخش ابتدایی بردار را نگه دارید و از ابعاد کوچکتر استفاده کنید:
- 768: بیشترین اطلاعات و معمولاً بهترین کیفیت
- 512: تعادل مناسب بین کیفیت و هزینه
- 256: مناسب سیستمهایی با داده زیاد
- 128: کمترین مصرف حافظه و سریعترین جستوجو، با احتمال افت کیفیت بیشتر
مثال ساده:
import numpy as np
small = vector[:256]
small = small / np.linalg.norm(small)بعد از truncate کردن بردار، دوباره آن را normalize کنید.
MRL در سیستمهایی با میلیونها بردار بسیار مفید است؛ چون کاهش ابعاد میتواند مصرف Storage و هزینه جستوجوی برداری را بهشدت کم کند.
نکات مهم برای استفاده در پروژه واقعی
Chunking را با Context Window هماهنگ کنید
حداکثر Context مدل حدود 2K توکن است. برای RAG نباید اسناد بسیار بلند را بهصورت یکجا Embed کنید. معمولاً بهتر است سند را به Chunkهای معنیدار تبدیل کنید.
یک نقطه شروع عملی میتواند حدود 300 تا 800 توکن برای هر Chunk با کمی overlap باشد، اما عدد مناسب باید با نوع داده و تست Retrieval مشخص شود.
مدل، Dimension و Prompt را وسط کار تغییر ندهید
بردارهایی که با مدل، ابعاد یا prompt متفاوت ساخته شدهاند نباید بدون برنامه در یک Index واحد مخلوط شوند. اگر استراتژی Embedding را تغییر دادید، معمولاً باید اسناد را Re-index کنید.
از یک Metric ثابت استفاده کنید
برای شباهت متنی، Cosine Similarity انتخاب رایجی است. Vector Database و کد Query باید درباره normalization و metric یک رفتار سازگار داشته باشند.
کیفیت فارسی را روی داده خودتان ارزیابی کنید
مدل روی بیش از 100 زبان آموزش دیده است، اما کیفیت Retrieval میتواند با توجه به زبان، دامنه تخصصی و نوع متن متفاوت باشد. برای فارسی، عربی یا دادههای تخصصی بهتر است یک Evaluation Set واقعی از Query و Documentهای پروژه خود بسازید.
Embedding با Reranker فرق دارد
Embedding مرحله بازیابی سریع Candidateها را انجام میدهد. در سیستمهای حساس به دقت، میتوان نتایج اولیه را با یک Reranker دوباره مرتب کرد.
داده حساس را محلی نگه دارید
یکی از مزیتهای مهم EmbeddingGemma اندازه کوچک آن است. میتوانید Embeddingها را روی سیستم خودتان تولید کنید و مجبور نباشید متن خام را برای یک API خارجی ارسال کنید.
یک معماری پیشنهادی برای RAG محلی
Documents
↓
Chunking
↓
EmbeddingGemma
↓
Vector Database
↓
User Query
↓
EmbeddingGemma
↓
Similarity Search
↓
Top-K Chunks
↓
LLM
↓
Final Answerبرای Vector Database میتوانید بسته به معماری پروژه از گزینههایی مانند PostgreSQL + pgvector، Qdrant، Milvus یا Weaviate استفاده کنید.
EmbeddingGemma چه زمانی انتخاب خوبی است؟
این مدل زمانی گزینه جذابی است که:
- Embedding محلی و Offline میخواهید.
- روی RAM و منابع سختافزاری محدودیت دارید.
- پروژه چندزبانه دارید.
- RAG یا Semantic Search میسازید.
- میخواهید بین کیفیت و اندازه بردار با MRL انتخاب داشته باشید.
- حریم خصوصی داده برایتان مهم است.
اما اگر هدف شما تولید متن، چت، Reasoning یا پاسخگویی مستقیم است، EmbeddingGemma بهتنهایی مدل مناسبی نیست؛ چون یک Embedding Model است، نه یک Chat LLM.
جمعبندی
EmbeddingGemma یک مدل کوچک اما کاربردی برای تبدیل متن به نمایش برداری است. اندازه حدود 308M پارامتر، پشتیبانی از بیش از 100 زبان، Context حدود 2K توکن، Embeddingهای 768 بعدی و قابلیت MRL آن را برای جستوجوی معنایی و RAG محلی مناسب میکند.
برای شروع سریع، Ollama سادهترین مسیر است. برای کنترل دقیقتر روی task promptها و ابعاد، Sentence Transformers انعطاف بیشتری میدهد. مهمترین نکته در پروژه واقعی این است که Embedding را فقط یک تابع تبدیل متن به آرایه عددی نبینید؛ انتخاب prompt، Chunking، Dimension، Metric و روش ارزیابی مستقیماً روی کیفیت Retrieval اثر میگذارند.
منابع رسمی
- Google AI for Developers — EmbeddingGemma model overview
- Google DeepMind / Google Developers Blog — Introducing EmbeddingGemma
- Hugging Face —
google/embeddinggemma-300m - Ollama Library —
embeddinggemma