Google Developers Blog

EmbeddingGemma 2: The Developer Guide

7.1内容质量

TL;DR · AI 摘要

EmbeddingGemma 2: The Developer Guide - Google Developers Blog Google Tag Manager noscript End Google Tag Manager noscri...

核心要点

  • 主题聚焦:EmbeddingGemma 2: The Developer Guide
  • 来源:Google Developers Blog,建议结合原文判断细节。
  • AI 分析暂不可用,本条为保底评分与摘要。
#AI#编程#后端#云计算#产品
打开原文

EmbeddingGemma 2:开发者指南 - Google Developers Blog

Google Tag Manager (noscript)

结束 Google Tag Manager (noscript)

HTML

EmbeddingGemma 2:开发者指南

2026年10月6日

Maarten Grootendorst

技术团队成员

Ian Ballantyne

高级开发者关系工程师

分享

  • Facebook
  • Twitter
  • LinkedIn
  • 邮件

现代搜索和检索增强生成(RAG)应用越来越需要处理多种内容类型,从技术文档和源代码到图像、视频片段和音频记录。挑战在于找到能够在所有这些格式上实现高检索准确性且保持低延迟的模型,而无需依赖大规模计算基础设施进行运行和索引。

EmbeddingGemma 2旨在提供一个在Apache 2.0许可证下发布的单一紧凑型开源模型,为其实现卓越的多模态性能。基于Gemma 4,这个低于10亿参数的模型将文本、代码、图像、视频和音频映射到统一的768维空间。其模块化架构允许您仅加载所需组件,参数规模从文本和代码的2.7亿扩展到所有模态的7.4亿。

关键能力包括:

  • 原生多模态检索:在共享的768维向量空间中直接实现文本、代码、图像、视频和音频的跨模态搜索。
  • 优越的代码理解能力:在代码搜索和技术检索方面显著优于EmbeddingGemma 1,非常适合本地代码库索引和智能体代码搜索。
  • 模块化内存占用:运行时可选择性加载所需编码器:270M(文本/代码)、440M(文本+视觉)、570M(文本+音频)或740M(全多模态),所有编码器都投影到相同的兼容向量空间。
  • 灵活的向量存储:Matryoshka表示学习(MRL)支持从768维动态截断到128维,大幅降低向量数据库存储需求的同时保留大部分原始质量。例如在256维时,文本和代码的原始嵌入质量基本保持完整,图像、视频和语音检索质量保留约95%

内部工作原理

EmbeddingGemma 2用模块化编码器取代链式模型,这些编码器共同映射到共享的768维空间:

尽管每种模态由专用编码器处理,但所有输入都通过共享主干处理,生成的嵌入向量共享相同维度空间:

  • 文本和代码(270M基础模型):配备8192-token上下文窗口的适配Gemma 4解码器。
  • 视觉(+170M):处理图像、视觉文档(PDF、幻灯片、图表)和视频帧的视觉编码器。
  • 音频(+300M):直接摄入原始音频的专用语音和声音编码器。
  • 模块化加载:仅加载所需组件。文本模式运行270M参数,增加视觉模块扩展到440M参数,或加载完整的多模态模型740M参数。
  • 与Gemma 4共享分词器和音频编码器:在设备端RAG流水线中与Gemma 4配合使用时,两个模型共享相同的文本分词器和音频编码器架构,减少总内存占用。

我们嵌入了Hugging Face transformers代码库,并采用270M参数的纯文本配置。随后,通过使用Agent(Gemma 4 26B A4B与Pi代理工具)将查询与代码库的相似性进行匹配,利用这些嵌入向量高效地在大型代码库中进行搜索。

开发者指南:使用EmbeddingGemma 2

你可以通过sentence-transformers库(v6.1.0或更高版本)在文本、代码、图像、视频和音频上运行EmbeddingGemma 2:

code
pip install -U sentence-transformers[image,audio,video] transformers

Shell

已复制

步骤1:加载模型

完整模型支持文本、代码、图像、视频和音频的嵌入(7.4亿参数):

code
from sentence_transformers import SentenceTransformer

# 完整模型:支持所有模态(7.4亿参数)
MODEL_ID = "google/embeddinggemma-2"
model = SentenceTransformer(MODEL_ID)

Python

为减少内存占用,可在加载时通过设置config_kwargs中的vision_config或audio_config为None来省略未使用的模态编码器。禁用的编码器永远不会加载到内存中,因此内存节省既适用于权重也适用于峰值分配:

code
# 仅文本(2.7亿参数)
text_only_model = SentenceTransformer(
    MODEL_ID,
    config_kwargs={"vision_config": None, "audio_config": None},
)

# 文本、图像和视频(4.4亿参数)
text_image_model = SentenceTransformer(
    MODEL_ID,
    config_kwargs={"audio_config": None},
)

# 文本和音频(5.7亿参数)
text_audio_model = SentenceTransformer(
    MODEL_ID,
    config_kwargs={"vision_config": None},
)

步骤2:使用任务提示嵌入文本和代码

EmbeddingGemma 2通过短任务指令进行训练,用于引导特定任务的表示。在encode()中设置prompt_name即可自动添加提示:

对于检索任务,使用不同提示对查询和文档进行编码:

code
query = "极光是如何形成的?"
document = "极光是由太阳释放的带电粒子..." # 已截断

# 使用prompt_name进行嵌入
query_emb = model.encode(query, prompt_name="SearchQuery")
doc_emb = model.encode(document, prompt_name="Document")

print(model.similarity(query_emb, doc_emb))

步骤3:嵌入图像、视频、音频和混合输入

将媒体作为以模态为键的字典传递,无需提示。要将文本和媒体组合嵌入,使用<|image|>、<|video|>或<|audio|>标记每个项目的对应位置:

code
# 跨模态搜索:一个文本查询与照片和声音记录匹配
image_emb = model.encode({"image": "sunset_beach.jpg"})
audio_emb = model.encode({"audio": "ocean_waves.wav"})
query_emb = model.encode("日落时的海浪", prompt_name="SearchQuery")

print(model.similarity(query_emb, image_emb))
print(model.similarity(query_emb, audio_emb))

# 混合输入:一个包含文本、照片和视频的产品列表嵌入
listing_emb = model.encode({
    "text": "防水徒步鞋。 <|image|> 湿岩石抓地测试:<|video|>",
    "image": "trail_shoe.jpg",
    "video": "grip_test.mp4",
})
query_emb = model.encode("防水徒步鞋", prompt_name="SearchQuery")

print(model.similarity(query_emb, listing_emb))

尽管来自不同模态,EmbeddingGemma 2生成的嵌入向量都位于相同的维度空间中,可以通过语义相似性进行比较。

在目标对象上作画,EmbeddingGemma 2将猜测你正在画什么。亲自尝试Embedding Draw Challenge。

第 4 步:使用 Matryoshka (MRL) 截断维度

通过设置 truncate_dim(512、256 或 128)并启用 normalize_embeddings=True,可以获取更短的单位长度向量。查询和文档必须使用相同维度:

code
# 截断查询
query_emb = model.encode(
    query,
    prompt_name="SearchQuery",
    truncate_dim=256,
    normalize_embeddings=True,
)

若希望每次调用都使用相同维度,可在加载时设置:SentenceTransformer(MODEL_ID, truncate_dim=256)。例如,在 bfloat16 精度下,存储一百万组 768 维向量需要约 1.5 GB 内存,而将其截断到 128 维仅需 250 MB。这种 6 倍的存储减少可使相同内存预算下存储的嵌入向量数量增加 6 倍,显著提升大索引在内存或设备端的适配性。

配置选择

在 sentence-transformers 中,所有四种编码器配置都从相同检查点加载,因此共享一个向量空间:使用 270M 纯文本配置嵌入的查询可以直接与使用完整模型嵌入的文档进行匹配。

一般原则是:仅加载数据需要的编码器,仅在存储或搜索速度要求时才截断维度。

应加载哪些编码器

如果从纯文本索引开始,之后添加图像或音频嵌入,只需重新加载模型并启用额外编码器即可。已计算的嵌入向量无需重新计算。

应选择的维度

  • 768d 或 512d:多模态和视觉文档检索,或在召回率比存储更重要的场景。
  • 256d(存储减少 3 倍):存储受限索引。在文本和代码上保留原始嵌入约 80% 的质量,在图像、视频和语音检索上保留约 95% 的质量,存储需求仅为原来的 1/3。
  • 128d(存储减少 6 倍):大型纯文本索引和第一阶段短名单生成(重排序前的初步筛选)。文本和代码保留约 90% 的质量,但图像、视频和语音检索质量下降至约 75%。在部署 128d 用于多模态查询前,请在目标数据上进行验证。

单次输入能容纳多少内容

所有模态共享 8,192 个 token 的上下文窗口,按固定速率处理:

最大值假设为单一模态且不含文本。可通过文件路径(视频使用 MP4)、URL(图像和音频)或内存中的 PIL 图像、数组和张量传递媒体。视频默认以每秒 1 帧采样,音频应为 16 kHz 单声道。

基准测试与评估

EmbeddingGemma 2 在 MTEB(代码)基准测试中比 EmbeddingGemma 1 提高 14%,在保留 EmbeddingGemma 1 多语言文本准确性的同时,新增图像、视频和音频检索功能。

今日上手

准备好探索多模态嵌入了吗?查看以下资源了解更多信息:

  • 下载权重:直接在 Hugging Face 上获取模型权重(采用 Apache 2.0 许可证)。
  • 集成与学习:阅读 Gemma 文档中关于 EmbeddingGemma 2 的更多内容。
  • 使用您喜爱的开发工具:通过 vLLM、Hugging Face Transformers、sentence-transformers、SGLang、MLX、Ollama、LMStudio 和 LiteRT 高效运行模型。
  • 适配与微调:通过 Unsloth 探索高效的微调方法,实现快速实验。
  • 探索搜索:在 Google AI Edge Gallery 中尝试设备端的即时媒体搜索和视频片段查找演示。

发布于:

  • AI
  • 教程
  • 公告
  • 学习
  • 探索

上一篇

下一篇

相关文章

列表

移动

网页

公告

学习

使用 EmbeddingGemma 2 在边缘设备实现多模态语义搜索

人工智能

云服务

教程

Gemini 企业代理平台的代理和模型评估现已正式发布

2026年7月31日

案例研究

在TPU上加速视频扩散的时空注意力机制

2026年9月30日

导航点 /