最近 EmbeddingGemma 2 发布了,但还没有技术报告,于是先读了上一代 EmbeddingGemma 的论文:EmbeddingGemma: Powerful and Lightweight Text Representations。两者的一大区别是:EmbeddingGemma 2 是原生多模态模型,而 EmbeddingGemma 只处理文本。
decoder-only 还是 encoder?
之前不了解 EmbeddingGemma,读了才发现它居然是 encoder-only 模型。
直觉上,双向注意力的 encoder 更适合做 embedding。但如今 LLM 大多是 decoder-only,基于 LLM 的 embedding 模型也多直接沿用这一结构,取末尾 EOS 或最后一个 token 的表示作为向量:这个位置在序列末尾,即使是因果注意力也能看到全部前文,汇总整段信息。因果注意力还有算力上的好处:注意力矩阵是下三角的,注意力分数部分的计算量理论上约为双向注意力的一半(FFN、投影层不受影响,整体并不会快一倍)。
EmbeddingGemma 没有走这条路,而是先把 decoder-only 的 Gemma 3 改造成 encoder-decoder,再取出其中的 encoder。
从 Gemma 3 到 encoder
EmbeddingGemma 从 300M 的 Gemma 3 出发,按 T5Gemma 的方法得到 encoder:
- 构建 encoder:复用 Gemma 3 的 self-attention、FFN 等权重,把因果注意力改成双向注意力。
- 构建 decoder:同样复用原权重,保留因果 self-attention,并新增 cross-attention 读取 encoder 输出。
- UL2 继续预训练:在 Gemma 3 的预训练数据上做混合去噪任务,encoder 理解输入、decoder 还原目标文本,两者联合更新。
- 取出 encoder:作为 embedding 模型的主干,decoder 直接丢弃。
encoder 共 24 层,隐藏维度 768。输出的 token 表示先做 mean pooling,再经过两层随机初始化的线性投影(768 → 3072 → 768)得到最终向量。
消融实验(MTEB 多语言任务均分)印证了这些选择:
- 初始化:encoder-decoder 60.4 > decoder-only 59.7。作者认为这得益于双向注意力,以及 encoder 参数可以专门负责理解输入。
- 池化:mean 60.4 > attention 60.2 > first-token 59.9 > last-token 59.7。带可学习参数的 attention pooling 反而不如简单平均。
训练目标
训练同时优化三个损失,分别负责区分相关文本、让向量空间充分展开和吸收大模型的表示能力。
记号: 是查询向量, 是相关文档(正例)向量, 是看似相关、实则不相关的困难负例向量, 是 batch 大小。
1. 对比损失 :拉近相关,推远不相关
在标准 InfoNCE 的基础上,单个样本的损失为:
其中 是余弦相似度, 是温度。正例在所有候选中的相对得分越高,损失越小。分母中除了正例自身,还有两类负例:
- 困难负例:权重 ,。负例越像查询,权重越大,模型越重视它; 表示停止梯度,权重只反映当前难度,本身不参与求导。困难负例是可选的:大规模、噪声多的 pre-finetuning 阶段只用 (query, target) 对,微调阶段才加入。
- batch 内负例:同一 batch 中其他样本的正例 。每个 batch 只取自同一数据集,这样的负例更难区分、更有价值; 会把查询或正例与当前样本重复的项 mask 掉,避免误当负例。
2. 分散正则 :避免向量挤在少数方向上
对 batch 内两两不同的查询、两两不同的正例,分别惩罚它们内积的平方:
内积越接近 0(近似正交),惩罚越小,于是向量整体在空间中铺开。思路来自 GOR(global orthogonal regularizer):让随机两条文本的向量,在内积的均值和二阶矩上都接近单位球面上独立均匀采样的两点;论文只保留了二阶矩这一项。
它约束的是整体统计性质,并不要求语义相近的文本彼此正交:拉近相关文本仍由对比损失负责,两者相互制衡。作者还希望这种分布让模型对量化更鲁棒,也更适合近似最近邻(ANN)检索。
3. 嵌入匹配 :直接学习老师的向量
老师是更大的 Gemini Embedding。以往的蒸馏大多只让学生模仿老师给出的查询-文档相关性分数;这里基于 EmbedDistill,直接把学生的向量对齐到老师的向量,学到的是老师整个向量空间的几何结构。
与 EmbedDistill 不同,论文不只对齐查询和正例,也对齐困难负例,并发现这能明显提升效果。直觉上,这和对比损失中使用困难负例的作用相同:学生能学到老师是如何区分查询与困难负例的。三项等权相加:
补充:MRL
和 还套用了 MRL(Matryoshka Representation Learning),在多个嵌套的前缀维度(768 / 512 / 256 / 128)上分别计算损失再直接相加。这样训练出的向量可以直接截断到低维使用。