EmbeddingGemma 2 开源了:图片、音频、视频都能压进 768 维,还顺手把存储砍掉 6 倍

Embedding 模型在发布季里从来不是主角,跑分再漂亮,朋友圈转的也都是生成式模型的演示视频。但如果你真的在搭 RAG、做搜索、搞分类和聚类,就会知道 embedding 才是那个每天在跑、每天在烧存储的东西。所以 Google DeepMind 这次把 EmbeddingGemma 2 用 Apache 2.0 开源出来,值得单独聊一聊——它不是又一个「我性能又提升了」的例行更新,而是把多模态 embedding 和端侧部署这件事揉在了一起。

先说它到底干了什么。EmbeddingGemma 2 是一个开源多模态 embedding 模型,把文本(含代码)、图片、视频、音频,以及它们的混合输入,统一映射进一个 768 维的向量空间。总参数 740M,其中文本部分 270M,视觉编码器 170M,音频编码器 300M,这几个模块是可以按需加载的。官方给出的定位很明确:能跑在手机、笔记本这类消费级硬件上,用于端侧的语义搜索、RAG、分类和聚类。

真正让我愿意花时间读这份模型卡的,是下面几个点。

第一个是存储成本。EmbeddingGemma 2 用了 Matryoshka Representation Learning(MRL),原生支持把 768 维向量截断成 128d、256d、512d 再重新归一化。官方给的说法是最高能带来 6 倍向量存储压缩,而质量在 256 维之前几乎无感(MTEB 多语言从 768d 的 61.36 掉到 256d 的 60.41,基本可以忽略)。对做向量检索的人来说,这个数字比任何 benchmark 都现实——向量库的账单是按维度算的,768 维压到 256 维,同样的记录数存储直接少三分之二。不过要注意 128d 只适合纯文本场景,多模态压到 128 维质量掉得明显(MMEB 总体从 59.01 掉到 45.65),自己负载验证过再用。

但这玩意儿有个坑,官方在模型卡里反复强调,我必须转述一遍。截断一个单位长度向量的前若干维之后,它就不再是单位长度了,做余弦相似度前必须先 L2 归一化,否则排名质量会「静默恶化」——不是报错,而是给你算出一堆看起来正常的分数。另外一个更隐蔽的是精度问题:EmbeddingGemma 2 只建议用 bfloat16 或 float32,千万别用 float16。它的激活值范围超出 float16 的动态范围,跑起来会返回 NaN 或者静默退化的 embedding,又没有报错,特别容易漏过去。这类「不会报错的错」正是生产环境里最头疼的。

第二个是任务前缀(task instruction prefix)。这个模型在训练时就用了短文本指令前缀来优化不同任务的 embedding——搜索、问答、事实核查、代码检索用不对称前缀(query 和 document 各一套),分类、聚类、相似度用对称的同一套。查询侧像 task: search result | query: {query},语料侧像 title: {title} | text: {content}。官方说忘记前缀也能跑,但精度会下降。带标题的文档要手动拼 title: ...,prompt_name="Document" 默认是 title: none。这在 sentence-transformers 里已经集成好了,两行代码就能出向量。

第三点是从架构到端侧部署的落地方案。视觉和音频编码器是独立组件,支持选择性加载:纯文本只加载 270M,文本+图片 440M,文本+音频 570M,全部才 740M。上下文窗口统一 8K token,图片按 280 token/张(约 29 张),视频按 140 token/帧(约 58 帧),音频 25 token/秒(约 327 秒),多模态混着用会共享同一个预算。视频默认 1 帧/秒采样,音频按 16kHz 单声道给。

跑分方面,它在 768 维全精度下的参考值:MTEB 多语言 61.36,MTEB 代码 78.68(相对前代提升约 14%),MIEB-lite 图片 64.64,MSEB 音频检索 MRR@10 为 69.54。需要提醒的是,embedding 的 benchmark 只说明一部分问题,尤其端侧部署和混合模态场景,最好拿自己的负载测一遍。

最后必须说清楚这条边界:EmbeddingGemma 2 是一个预训练 embedding 模型,没有像生成式模型那样做对齐、安全微调或输出级审核,安全缓解主要靠训练数据过滤。它会产出表示而不是用户可见文本,所以下游的安全风险在使用方式上体现,开发者要自己上应用层的防护,并遵守 Gemma 禁止用途政策。

它在 Hugging Face 上线没多久,下载量目前还不高(上月 364),但社区已经跟进——Hub 上有 18 个微调版本和 19 个量化版本。对于要在手机或笔记本上跑一个统一多模态 embedding、还想省向量存储账单的人来说,这模型值得拉下来在真实数据上试一把。我的建议是:先跑通文本链路,验证一下截断和归一化这两个坑,再决定要不要把视觉和音频编码器一起挂上。毕竟省下的不止是存储,还有你自己调试时的那几个小时。

相关链接

  • Model Card: https://huggingface.co/google/embeddinggemma-2
  • GitHub: https://github.com/google-gemma
  • Launch Blog: https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2
  • Documentation: https://ai.google.dev/gemma/docs/embeddinggemma