embeddinggemma-2 - 统一文本、图像、视频与音频的 768 维多模态嵌入模型
embeddinggemma-2 是 Google 在 Hugging Face 上发布的 Apache-2.0 多模态嵌入模型,把文本(含代码)、图像、视频和音频映射到同一个 768 维向量空间。项目自述总参数量 740M,支持 8K 上下文与 MRL 维度截断,面向端侧检索、RAG、分类与聚类等场景。
embeddinggemma-2 是 Google 发布在 Hugging Face 上的多模态嵌入模型,任务类型为 feature-extraction,默认走 transformers 框架。按项目自述,它把文本(包括代码)、图像、视频和音频——以及这些模态的组合——映射到同一个统一的 768 维向量空间,因此不同类型的输入可以直接在同一个空间里做相似度比较。它面向的是需要在端侧或消费级硬件上跑语义表示的场景:搜索、检索增强生成(RAG)、分类、聚类,以及需要跨模态检索的应用。项目自述其设计目标是低延迟,并声称可在手机、笔记本这类消费级硬件上运行。
维护者与状态
该模型由 google 维护,仓库位于 Hugging Face。仓库创建时间为 2026-09-14,最后更新时间为 2026-10-06,数据读取时间为 2026-10-08。截至 2026-10-08,近 30 天下载量为 7562,点赞数为 963。许可证为 apache-2.0。
需要说明的是,事实表中没有给出该仓库的正式 release 信息,因此本文不描述其版本发布节奏;仓库的更新状态以上面的创建与最后更新时间为准。
主要能力
以下能力均来自项目自述(模型卡),属于维护者一方的描述,未经本站独立验证。
- 原生多模态:据项目说明,模型把文本、图像、视频、音频四种模态统一在一个共享的 768 维嵌入空间中,而不是为每种模态单独建索引。
- 多语言与代码:项目自述支持 100 种以上语言,并称在代码任务上相对前代有约 14% 的提升。
- 可裁剪的体量:模型卡给出的参数结构是 270M 的文本主干(130M transformer 加 140M embedder),加上可选择性加载的视觉编码器(170M)与音频编码器(300M),总参数量 740M。开发者可以只加载自己用得到的模态。
- Matryoshka 表示学习(MRL):项目自述原生支持把嵌入截断到 128d、256d、512d 和 768d,用于降低向量存储成本。
- 上下文长度:8K token 上下文窗口,项目自述足以处理数分钟的音频或视频。
- 任务引导表示:通过轻量的文本指令前缀,把嵌入优化到不同任务上,例如搜索、分类、聚类、语义相似度等。
模型卡还给出了一张结构表:24 层、模型维度 512、隐藏维度 2048、滑动窗口 1024 token、词表大小 262144、4 个注意力头、局部与全局 KV 头为 2/1、局部与全局比例 5:1、注意力为 GQA/MQA、激活为带 GELU 的门控 FFN、池化方式为均值池化、投影层为 512 到 768。输入输出方面,支持模态为文本、图像、视频、音频,上下文窗口 8192 token,原生输出维度 768,MRL 截断维度为 128、256、512。
关于效果,模型卡列出了若干基准结果,例如 MTEB 多语言 v2 的 Mean(Task) 为 61.36、MTEB code v1 为 78.68、MIEB lite 为 64.64、MMEB v2 图像为 57.28、MMEB v2 视频为 50.67、MSEB 检索为 69.54、MAEB 为 49.39,并给出了 768d 到 128d 各截断维度下的对应数值。这些数字均出自项目自述,本文照录不代表本站验证,读者如需引用请以模型卡原文为准。
使用入口
模型仓库地址:google/embeddinggemma-2。
据项目说明,使用前先安装 sentence-transformers 与 transformers:
pip install -U sentence-transformers transformers
生成文本嵌入的示例代码如下,其中通过 prompt_name 指定任务前缀:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
query = "What causes the northern lights?"
document = "The northern lights are caused by charged particles from the sun."
query_emb = model.encode(query, prompt_name="SearchQuery")
doc_emb = model.encode(document, prompt_name="Document")
print(model.similarity(query_emb, doc_emb))
项目自述还给出了几条使用要点。其一是任务指令前缀:模型训练时在文本输入前拼接了短任务前缀,用对前缀能提升质量,省略也能用但精度会下降;前缀只作用于文本,图像、视频、音频不加前缀。带真实标题的文档应格式化为 title: {title} | text: {content},没有标题时用 title: none。检索这类非对称任务,查询用查询前缀、语料用文档前缀;分类、相似度这类对称任务,则对所有被比较的输入使用同一个任务前缀。模型卡还特别提醒,prompt_name="Document" 实际套用的是 title: none,带标题的文档仍需手动拼接。
其二是选择性加载编码器。视觉与音频编码器是独立组件,纯文本或单模态部署时可以通过 SentenceTransformer 的 config_kwargs 关掉不用的编码器:纯文本为 {"vision_config": None, "audio_config": None},有效规模 270M;文本加图像为 {"audio_config": None},440M;文本加音频为 {"vision_config": None},570M;全模态为 {},740M。项目同时提示,不同模型库对省略编码器的配置方式并不一致,需要查阅对应文档。
其三是 MRL 维度截断。768 维输出可以只保留前若干维来缩短,支持 768、512、256、128。项目自述的运行时注意事项是:截断后必须重新做 L2 归一化,因为对单位向量切片并不保持单位长度,跳过这一步会静默地降低排序质量——它不会报错,只会给出看起来合理的分数;此外查询与文档必须使用相同维度,768 维的查询无法与 128 维的文档打分。
许可与限制
许可证为 apache-2.0,具体条款以仓库中的 LICENSE 文件为准。
限制方面,项目自述中明确提到的包括:任务前缀只适用于文本,图像、视频、音频不加前缀;省略前缀虽然可用但精度会下降;截断向量必须重新归一化,且查询与文档维度必须一致;不同模型库对选择性加载编码器的配置方式不一致。此外,模型卡中的基准数字均基于全精度 checkpoint,量化或其他精度下的表现并未在素材中说明。模型卡提到的「可在手机、笔记本等消费级硬件上运行」属于项目自述的目标定位,本文不据此推断具体硬件型号或最低配置要求。