“解析 Gemma”系列的前几篇帖子提供了详细的 Gemma 模型系列架构概述。您可以在下方找到每篇帖子的链接:
在这篇帖子中,您将探索新的 EmbeddingGemma 架构及方案。有关高级别介绍,您可以阅读此公告博客。如需全面了解方法、实验及评估,请参阅完整的技术报告。让我们开始吧。
您是否曾好奇计算机是如何被训练的?它理解您所写的单词、短语甚至整篇文档的含义与语境。其奥秘往往在于一种名为“嵌入”的技术——它通过数值表示捕捉文本的本质与意义。EmbeddingGemma 就是这样一种嵌入模型,能够将文本转化为嵌入向量。这些嵌入向量可用于搜索、检索增强生成以及理解等任务。
EmbeddingGemma 并非从零开始创建,它源于一款预训练的 300M 参数的 Gemma 3 模型。首先,该模型使用T5Gemma 的适应方法进行转换,将原来仅含解码器的 Gemma 模型转换为编码器-解码器架构。然后,我们从这个新模型的编码器初始化了 EmbeddingGemma,从而确保它从一开始就能生成极具表现力的表达方式。这种方法允许 EmbeddingGemma 从其前身继承大量“世界知识”,而无需进行额外的训练。
您可以使用 Sentence Transformers 等框架调用 EmbeddingGemma 生成嵌入向量。给定一段文本输入序列后,EmbeddingGemma 会通过一系列精心设计的步骤对其进行处理,从而生成一个简洁的向量表示。
SentenceTransformer(
(0):Transformer层 ({'max_seq_length': 2048, 'do_lower_case': False, 'architecture': 'Gemma3TextModel'})
(1):池化层 ({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
(2):第一层 Dense ({'in_features': 768, 'out_features': 3072, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
(3):第二层 Dense ({'in_features': 3072, 'out_features': 768, 'bias': False, 'activation_function': 'torch.nn.modules.linear.Identity'})
(4):归一化层 ()
)
(0):Transformer 层
一段输入序列会经过这个仅含编码器结构的 Transformer 模型。该 Transformer 采用双向注意力机制,在给定的语境中理解每个 token 的含义,最终生成 768 维向量序列——输入序列中的每个 token 都会对应一个这样的向量。
(1):池化层
Transformer 的输出是一系列的 token 嵌入向量。池化层(Pooling Layer)的作用是为整个输入文本将这个长度不固定的 token 嵌入序列,转化为单一的、固定大小的嵌入向量。EmbeddingGemma 采用的池化策略名为“平均池化(Mean Pooling)”。这是最常用的方法,具体操作是计算所有 token 嵌入向量的平均值。
(2):第一层 Dense
接下来,我们通过一次线性投影(Linear Projection)操作,将(768 维)嵌入向量维度提升至更高的维度(3072 维)。
(3):第二层 Dense
随后,我们再通过一次线性投影(Linear Projection)操作,将经过学习得到的 3072 维嵌入向量,缩放至最终的目标维度(768 维)。
(4):归一化层
最后,我们通过欧几里得归一化(Euclidean Normalization),实现高效的相似度比较。相较于您可能在其他 Gemma 模型中调用的复杂 RMSNorm,这是一种简单且低成本的操作。
EmbeddingGemma 在训练过程中,通过对三种不同加权损失函数进行组合优化,逐步学会生成其高性能的嵌入向量。
NCE 损失教会模型相似性和对比性的基本概念。对于每个输入(例如,查询),模型会学习到:
关键在于纳入了“难负样本”(hard negatives)——即那些在语义上与查询文本相似,但本质上错误或信息不完整的答案。通过在这类具有迷惑性的样本上进行训练,模型会被迫学习到细微、精准的语义差异,从而能够区分“正确答案”与“近似正确但实际错误的答案”。
这就像建立一个组织良好的图书馆,相关物品彼此靠近,而无关物品则保持距离。
该损失函数旨在鼓励 EmbeddingGemma 生成能够在整个嵌入空间中分散开来的嵌入向量。即使模型已经学会了区分相似与不相似的内容,它也可能变得“偷懒”,只是将所有嵌入向量都堆放在空间的同一个小角落里。
该正则化器能让嵌入向量具备抗量化鲁棒性,同时支持在向量数据库中使用“近似最近邻(Approximate Nearest Neighbor, ANN)算法”实现高效检索。
该损失函数是一种知识蒸馏机制,在这一过程中,EmbeddingGemma 会以规模更大、性能更强的 Gemini Embedding 模型作为“教师模型”,从中学习嵌入能力。
该损失函数会最小化两种嵌入模型针对“查询文本” 和“段落文本”生成的嵌入向量之间的 L2 距离(一种衡量向量差异的指标)。通过这种方式,EmbeddingGemma 得以从教师模型中学习,从而高效继承其大部分知识与能力。
通过组合这三种损失函数,EmbeddingGemma 得以逐步学会生成结构优良、表达丰富且具备鲁棒性的表征向量,进而在真实世界的搜索与检索任务中展现出出色的性能。
MRL 是一种能够将更小尺寸的高质量表征向量嵌套在更大尺寸表征向量中的技术。例如,尽管 EmbeddingGemma 生成的嵌入向量本身是 768 维,但您可以对其进行截断处理,得到 512 维、256 维甚至 128 维的小尺寸向量,且这些小尺寸向量仍能保留较高的表征质量。
在训练过程中,损失函数不仅作用于最终生成的 768 维嵌入向量,还会作用于该嵌入向量的重叠子集(即前 512 维、前 256 维与前 128 维向量)。这种设计能确保:即便只使用完整嵌入向量的截断版本,它依然是具备强表征能力且语义完整的向量。
对您而言,这意味着您无需训练或管理多个模型,就能为自己的应用场景选择性能与效率之间的最佳平衡点。您只需选择最符合需求的嵌入向量维度即可:从能实现最高质量的完整 768 维,到能提升速度、降低存储成本的小维度,均可灵活选用。
模型的演进之路包括几个阶段
通过对强大的基础模型进行精心适配,并采用多维度训练方法对其进行精调优化,EmbeddingGemma 的架构被设计为能够生成高效且通用的文本表征,足以适配各类广泛的应用场景。
我们深入探讨了 EmbeddingGemma 的架构——这是一款用于生成文本嵌入的高性能模型。在此过程中,我们了解了其技术溯源、嵌入向量的生成流程以及模型开发方案。如需深入了解我们的训练方法、评估基准和完整的实验结果,我们建议您阅读官方技术报告。
EmbeddingGemma 这样的模型为更高效、更强大的语义技术开辟了道路。随着这类模型的能力不断增强、获取门槛持续降低,我们有理由期待其在多个关键领域推动技术突破,例如检索增强生成(RAG)、端侧 AI(On-Device AI)以及超个性化服务(Hyper-Personalization)。
可在 Hugging Face、Kaggle、Vertex AI 平台上查找模型权重,即刻开始探索实践吧。
感谢您的阅读!