EmbeddingGemma 300M 发布说明
TL;DR
Google 发布了 EmbeddingGemma,这是一款 308 M 参数的多语言仅文本嵌入模型,拥有 2 K token 的上下文窗口,旨在用于设备端检索、代理以及其他低延迟应用。它在 500 M 参数以下的模型中位居 Massive Text Embedding Benchmark (MTEB) 首位,并支持超过 100 种语言。
介绍 – 紧凑且高性能的多语言嵌入模型
EmbeddingGemma 是 Google DeepMind 最新推出的小规模多语言嵌入模型。量化后参数为 308 M,内存占用低于 200 MB RAM,在 Massive Multilingual Text Embedding Benchmark (MMTEB) 上实现了业界领先的性能,同时体积足够小,可用于移动端和边缘部署。模型在每次前向传播中处理 2048 token,输出 768 维 向量,并可通过 Matryoshka Representation Learning (MRL) 将维度可选截断至 512、256 或 128。
架构 – 仅编码器的 Gemma3,使用均值池化和密集头部
EmbeddingGemma 复用了 Gemma3 Transformer 主干,但将注意力方式从因果改为 双向注意力,将原本的解码器结构转变为编码器。该编码器生成 token 级别的嵌入,并通过 均值池化 合并为单一文本嵌入,随后经过两层密集层将池化向量映射为 768 维 输出。模型在一个精心挑选的 约 3200 亿 token 的多语言语料库上进行训练,语料库混合了公开网页文本、代码、技术文档以及合成的任务特定示例,并对 CSAM、敏感数据和低质量内容进行严格过滤。
评估 – 子 500 M 模型的最佳表现
EmbeddingGemma 在 Multilingual MTEB (v2) 和 English MTEB (v2) 两套基准上进行评测。尽管体积 modest(小),它始终优于可比的基线,并且在官方 MTEB 排行榜上是参数低于 500 M 的文本唯一多语言嵌入模型中排名最高的。博客文章提供了多语言和英文轨道的性能图,并指出任何在 MTEB 数据超过 20 % 上进行训练的模型均被排除,以避免过拟合。
提示设计 – 需要任务特定前缀
EmbeddingGemma 在训练时使用了一组 任务特定提示,必须在输入前添加这些前缀才能获得最佳性能。最常用的提示如下:
query:"task: search result | query: "document:"title: none | text: "
其他提示涵盖 BitextMining、Clustering、Classification、InstructionRetrieval、MultilabelClassification、PairClassification、Reranking、STS 和 Summarization。在 Sentence‑Transformers 库中,model.encode_query 和 model.encode_document 会自动添加 query 和 document 提示;其他框架则需要手动指定。
跨生态系统使用 – 即时运行示例
EmbeddingGemma 已集成到众多流行的检索和 LLM 工具包中。下面提供了简洁、独立的代码片段,演示如何获取嵌入并执行相似度搜索。
Sentence‑Transformers (Python)
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-300m")
query = "Which planet is known as the Red Planet?"
documents = [
"Venus is often called Earth's twin because of its similar size and proximity.",
"Mars, known for its reddish appearance, is often referred to as the Red Planet.",
"Jupiter, the largest planet in our solar system, has a prominent red spot.",
"Saturn, famous for its rings, is sometimes mistaken for the Red Planet."
]
q_emb = model.encode_query(query)
d_emb = model.encode_document(documents)
print(q_emb.shape, d_emb.shape) # (768,) (4, 768)
print(model.similarity(q_emb, d_emb))
该示例能够正确对文档进行排序,关于火星的句子获得最高相似度。
维度截断 (Matryoshka)
model = SentenceTransformer("google/embeddinggemma-300m", truncate_dim=256)
q_emb = model.encode_query(query)
d_emb = model.encode_document(documents)
print(q_emb.shape, d_emb.shape) # (256,) (4, 256)
将维度截断至 256 可降低存储和计算成本,同时保持排序顺序。
LangChain (Python)
from langchain_huggingface.embeddings import HuggingFaceEmbeddings
embedder = HuggingFaceEmbeddings(
model_name="google/embeddinggemma-300m",
query_encode_kwargs={"prompt_name": "query"},
encode_kwargs={"prompt_name": "document"}
)
# Use with FAISS vector store for retrieval as shown in the blog post.
LangChain 用户必须显式设置 query 和 document 提示。
LlamaIndex (Python)
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
emb = HuggingFaceEmbedding(
model_name="google/embeddinggemma-300m",
query_instruction="task: search result | query: ",
text_instruction="title: none | text: "
)
正确生成嵌入同样需要使用这些提示字符串。
Haystack, txtai, Transformers.js, ONNX Runtime, and TEI
博客为这些运行时提供了即用脚本。它们的流程相同:从 Hub 下载模型,配置相应的提示,计算嵌入,并执行内积相似度(训练目标)。Text Embeddings Inference (TEI) Docker 镜像(cpu-1.8.1、cuda-1.8.1 等)提供兼容 OpenAI 的 /v1/embeddings 接口,且 /embed 接口额外支持 prompt_name 和 dimensions 参数,以实现即时截断。
微调 – 在 MIRIAD 医疗数据集上的领域适配
EmbeddingGemma 可以使用 Sentence‑Transformers 库进行微调。博客展示了完整的流水线:
- 加载基础模型 (
google/embeddinggemma-300m)。 - 加载 MIRIAD 医疗指令检索数据集(10 万训练对,1 千验证,1 千测试)。
- 使用 CachedMultipleNegativesRankingLoss 实现高效的批内负样本采样。
- 在 RTX 3090 上进行 1 epoch 训练(≈5.5 h),使用混合精度 (
fp16)。 - 使用 InformationRetrievalEvaluator 进行评估,报告 NDCG@10。
基础模型在 MIRIAD 测试集上取得 0.8340 NDCG@10。微调后,模型 (sentence‑transformers/embeddinggemma-300m‑medical) 达到 0.8862 NDCG@10,超越所有列出的通用嵌入模型,包括更大的 Qwen3‑Embedding‑0.6B(596 M 参数)。
含义 – 实现设备端多语言检索
EmbeddingGemma 将 紧凑体积、2 K 上下文 与 多语言覆盖 相结合,使其在延迟、内存和带宽受限的场景中独具优势:
- 移动端 RAG 流程 可以在本地对查询和文档进行嵌入,降低对云 API 的依赖。
- 边缘代理(如语音助理、AR/VR 应用)能够在不传输原始文本的情况下执行语义搜索。
- 跨语言检索 在低功耗设备上变得可行,得益于对 >100 种语言的支持。
- Matryoshka 截断 让开发者在精度与存储、计算之间进行权衡,从而在普通硬件上实现大规模向量数据库。
总体而言,EmbeddingGemma 降低了在要求速度和效率的生产环境中部署高质量多语言嵌入的门槛。
进一步阅读
- 模型卡片: https://huggingface.co/google/embeddinggemma-300m
- Google 官方博客文章: https://developers.googleblog.com/en/introducing-embeddinggemma/
- 技术报告(arXiv): https://arxiv.org/abs/2509.20354
- Matryoshka 嵌入背景: https://huggingface.co/blog/matryoshka
- Sentence‑Transformers 训练指南: https://huggingface.co/blog/train-sentence-transformers
快速入门检查清单
- 安装 预览版 Transformers 包 (
pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview)。 - 选择 一个框架(Sentence‑Transformers、LangChain、LlamaIndex 等)。
- 加载 来自 Hub 的
google/embeddinggemma-300m。 - 应用 相应的提示(搜索使用
query,语料使用document)。 - 可选地截断 嵌入,使用
truncate_dim(256、512 或 128)。 - 部署 TEI 或 ONNX Runtime,以实现生产级扩展。
结论
EmbeddingGemma 在参数低于 500 M 的模型中,提供了多语言能力、设备端高效性以及领先基准质量的罕见组合。其开源可用性、与主要检索框架的广泛集成以及简洁的微调流程,使其成为在受限硬件上构建下一代语义搜索和检索增强生成系统的开发者的实用选择。