引言:它到底解决什么问题
EmbeddingGemma 2 是 Google DeepMind 于 2026 年 10 月 6 日发布的开放权重嵌入模型,Apache 2.0 许可,总参数 740M。它最大的变化是把上一代纯文本的 EmbeddingGemma(2025 年 9 月发布,308M 参数,累计下载超过 2000 万次)扩展到文本、代码、图像、视频、音频五种输入,并全部投影到同一个 768 维向量空间。
嵌入模型的作用是把内容编码成数值向量,让软件按“语义相似度”而不是关键词匹配来检索。在 RAG(检索增强生成)里,嵌入模型负责找证据,生成模型负责用证据回答。EmbeddingGemma 2 的定位是:把这套检索链路整体塞进手机、笔记本或浏览器,不经过任何网络请求。
值得注意的是它和 Google 云端的 Gemini Embedding 是两条产品线:同一家公司,一个跑在服务器、追求最高质量,一个跑在设备上、追求隐私与离线可用。
它是怎么做的:模块化编码器 + 共享向量空间
EmbeddingGemma 2 没有用“多个模型拼接”的方案,而是把不同模态交给专门编码器,再统一投到一个共享的 768 维空间。根据官方说明和模型卡,结构如下:
- 文本与代码核心(270M):基于 Gemma 4 架构的适配解码器,8,192 token 上下文,处理自然语言和代码。
- 视觉编码器(+170M):处理图像、文档截图(PDF、幻灯片、图表)和视频帧。
- 音频编码器(+300M):直接吃原始音频,不做转录。
因为模块可以按需加载,实际部署有四档:纯文本 270M、文本+视觉 440M、文本+音频 570M、完整多模态 740M。关键细节是四档输出落在同一向量空间,所以用 270M 文本版生成的查询,可以检索用 740M 全模态版索引的文档,不需要因为扩功能而重建整个向量库。
另一个关键设计是它和 Gemma 4 共享文本分词器与音频编码器。这意味着把 EmbeddingGemma 2(检索)和 Gemma 4(生成)放在同一条端侧 RAG 管线里时,两者可以复用组件,合计内存占用低于分别跑两套栈。
MRL:训练后还能截断向量
输出默认 768 维,采用 Matryoshka Representation Learning(MRL),可以在推理时直接把向量截断到 512、256 或 128 维,不需要重新训练。128 维相对 768 维,原始字节数是六分之一。官方给出的取舍是:256 维时文本与代码基本保留完整质量,图像、视频、语音检索约保留 95%;128 维更偏向纯文本场景。
注意两点容易踩坑的工程细节:截断后必须重新做 L2 归一化,且查询向量和文档向量必须用同一维度,否则相似度计算完全失准。存储节省的只是向量本体,索引和元数据开销另算。
上下文与资源
8K token 上下文是上一代的 4 倍。按公开的 token 计费规则:每张图像约 280 token、每帧视频约 140 token、每秒音频约 25 token,折算下来单次输入上限约为 29 张图像、58 帧视频或 5.5 分钟音频,也可以交错组合。文本与媒体共享这 8K 预算,所以“文本上限”并不等于“媒体上限”。
量化后在 Pixel 11 Pro 上,纯文本权重约 191MB 活跃内存,完整多模态约 567MB。要强调这是模型权重的活跃内存,不含运行时、激活值、向量索引和输入数据;实际应用占用会更高。
基准数据:把厂商数字当起点
官方给出的分数(全精度、768 维):
| 基准 | EmbeddingGemma 1 | EmbeddingGemma 2 |
|---|---|---|
| MTEB Code(NDCG@10) | 68.76 | 78.68 |
| 多语言 MTEB v2(Mean Task) | 61.15 | 61.36 |
代码检索提升 9.92 分(约 14.4%),是这次升级最明显的一项,官方据此推荐本地代码库索引、语义代码搜索和编码 Agent 检索。多语言文本基本持平(+0.21)。其他已公布结果包括 MIEB lite 图像 64.64、MSEB 音频检索 69.54、MAEB 音频均值 49.39、MMEB v2 视频命中 50.67。
这些是 Google 自己测的数字,未经独立复现。 而且官方材料没有点名“被超越的两倍大模型”具体是谁,所以“sub-1B 最优”这类结论只能当方向性参考。有媒体把它和参数量约 2.7 倍、但不支持音频的 Qwen3-VL-Embedding-2B 对比(后者 MMEB-V2 约 73.2),结论也因基准与口径不同而各说各话。真正该做的是拿自己的数据跑一遍召回率与排序质量。
和已有方案比,取舍在哪
对比云端嵌入 API(含 Gemini Embedding):端侧路线换来的是零网络往返、数据不出设备、无按次计费;代价是模型更小、质量上限更低,且要自己承担模型分发与更新。EmbeddingGemma 2 明确不是“云端最强”的替代品,而是“离线可用”的替代品。
对比 CLIP / SigLIP 这类视觉嵌入:CLIP 系通常只覆盖文本+图像,且常需额外处理视频与音频。EmbeddingGemma 2 用单一模型覆盖五种模态,省掉多套编码器的维护成本。Hacker News 上有开发者提到,图像/音频嵌入会同时携带“内容”和“风格/音色”信息,两者甚至可以被近似线性分离——这对检索是把双刃剑,取决于你的查询想匹配内容还是风格。
对比专用文本嵌入模型:纯文本场景下,270M 的文本模块未必比成熟的小型文本嵌入模型更省或更准,迁移前应先用真实查询对比。多模态混合资料库才是它真正的差异化场景。
开发者反馈里的几个真实担忧(来自 Hacker News 讨论,约 214 分、29 条评论):
- 欢迎 Apache 2.0 + 开放权重,认为“既有托管选项、又能回落到可自跑权重”对存着数百万向量的工作负载很重要。
- 有人指出它用 MRL 而非 MatFormers 训练,因此只能截断输出向量,不能同步缩小模型权重——这对端侧显存规划是个限制。
- 有人提到实践中 VoyageAI 效果更好;也有人要求与 Voyage、Qwen、SigLIP2 做对比。
- 重新嵌入(re-embedding)成本由谁承担,仍被视为未解决的风险。
- 多模态近似与对齐在真实场景下表现如何,仍有疑问。
另外,官方明确说明该模型未做安全对齐与输出审核(缓解措施放在训练数据侧),支持 100+ 语言但各语言性能并不均等,且不要用 FP16——动态范围会导致 NaN 或质量静默下降,请用 BF16 或 FP32。
动手跑:从 Python 到浏览器
用 sentence-transformers(v6.1.0+)可以按需关闭不用的编码器,vision_config / audio_config 设为 None 时对应权重根本不会加载:
from sentence_transformers import SentenceTransformer
# 纯文本:270M,最省内存
model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={
"vision_config": None, "audio_config": None},
)
# 检索要区分“查询”和“文档”两种任务提示
query = "损坏的地板怎么修"
docs = ["木地板泡水后的处理步骤……", "墙面开裂的常见原因……"]
q = model.encode(query, prompt_name="SearchQuery", normalize_embeddings=True)
d = model.encode(docs, prompt_name="Document", normalize_embeddings=True)
# 余弦相似度排序后取 Top-k,喂给生成模型
prompt_name 会替你加上训练时约定的前缀(如查询用 task: search result,代码检索用 CodeRetrieval,文档用 title: ...)——查询与文档必须用不同提示,否则召回会明显变差。
浏览器侧走 transformers.js + WebGPU。核心思路和公开的 EmbeddingGemma 浏览器 Demo 一致:模型首次加载后缓存进 IndexedDB,之后离线可用。
import {
pipeline, env } from "@huggingface/transformers";
// 允许从 Hub 拉取并缓存,首次加载后即可离线
env.allowLocalModels = false;
env.allowRemoteModels = true;
const embed = await pipeline(
"feature-extraction",
"<EmbeddingGemma-2 的 ONNX 仓库 ID,见模型卡>",
{
device: "webgpu", dtype: "q8" } // BF16/FP32 亦可,勿用 FP16
);
const out = await embed("离线 RAG 的检索原理", {
pooling: "mean", normalize: true });
配套的端侧工具链还包括 Google AI Edge 的 MediaPipe Tasks(Embedder / Semantic Retriever / Decision Task)、LiteRT,以及 Ollama、llama.cpp、MLX、vLLM、SGLang、LMStudio 等推理端,向量可存进 Qdrant(或浏览器内的 IndexedDB)。有公开数据提到,浏览器端用 WebGPU 单次查询约 20–70ms。
一条最小可用的离线 RAG 流程是:入库时用 EmbeddingGemma 2 把文档、图片、音频分块编码并存向量;查询时编码用户问题、算相似度取 Top-k;生成时把原片段连同问题一起交给本地 Gemma 4 生成答案。注意向量邻近只是“检索候选”,要保留原始文件的可寻址引用——需要精确措辞或截图里的小数字时,必须回取原文。
适合谁用
- 做隐私/合规敏感应用:医疗、法律、企业内部文档,数据不能离开设备的场景。
- 要离线或弱网可用:现场作业、飞机/地下环境、以及希望把静态站点托管到 CDN 就能跑检索的应用。
- 要做跨模态检索:一句话在混合的照片、录音、视频、文档里找东西,且不想维护多套编码器。
- 做本地代码检索/编码 Agent:代码检索提升最明显,值得一试。
- 想在浏览器里做零后端检索:模型走 WebGPU、向量存 IndexedDB,整套可以是纯静态文件。
不该无脑替换的场景:追求最高检索质量且数据可上云时,云端大模型仍可能更优;纯文本且已有一套成熟嵌入模型时,迁移收益需要实测;计划截断到 128 维又依赖多模态检索时,损失较明显,建议先以 768 维做基线再逐档下探。
结论
EmbeddingGemma 2 的工程价值不在“又多了一个嵌入模型”,而在于把五种模态塞进一个 740M、可拆装、可在浏览器里跑、Apache 2.0 的共享向量空间。它最该被验证的三件事:代码检索的 9.92 分提升在你自己仓库上是否成立、MRL 截断到 256 维后召回掉了多少、以及 FP16 之外的精度配置在你的目标硬件上是否稳定。把这些用自己的数据跑通,再决定是否从云端嵌入 API 迁移。
参考链接
- Google Blog — EmbeddingGemma 2: an open, lightweight multimodal embedding model: https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2/
- Google Developers Blog — EmbeddingGemma 2: The Developer Guide: https://developers.googleblog.com/en/embeddinggemma-2-the-developer-guide/
- Google Developers Blog — Bring multimodal semantic search to the edge with EmbeddingGemma 2: https://developers.googleblog.com/en/google-ai-edge-with-embeddinggemma-2/
- Hacker News discussion (EmbeddingGemma 2, ~214 points): https://hn.today/s/embeddinggemma-2
- Unsloth Docs — EmbeddingGemma 2: Run Locally: https://unsloth.ai/docs/models/embeddinggemma-2
- The Next Web — Google launches EmbeddingGemma 2, an open multimodal embedding model for devices: https://thenextweb.com/news/embeddinggemma-2-on-device-europe
- AlphaSignal — Google DeepMind's EmbeddingGemma 2 Searches Audio, Video, and Images on Your Phone: https://alphasignal.ai/news/google-deepmind-s-embeddinggemma-2-searches-audio-video-and-images-on-your-phone
- Google Developers Blog — Introducing EmbeddingGemma (2025, 前代对照): https://developers.googleblog.com/introducing-embeddinggemma/
创作说明:本文在资料整理与成文中使用了 AI 辅助(DeepSeek),经作者审阅后发布,作者对内容负责。