EmbeddingGemma 2:向量截断怎么验
EmbeddingGemma 2支持把768维输出截短到512、256或128维,但“可以截短”不等于“直接切片就能沿用旧索引”。你需要重新归一化、统一查询与文档的处理规则,并验证目标任务的召回。存储按维度缩小,检索质量却不会按同一比例保持不变。
文章目录
下面把新闻信息与工程判断分开,用一个三维小例子解释归一化为何会改变排名,再算清100万条向量的存储账。Read in English。
周报推荐与模型发布,是两个日期
Google News收录的Google开源周报发表于2026年10月15日,其中推荐了EmbeddingGemma 2。它的原始发布公告日期是10月6日,因此这次是对近期模型的技术解读,而不是把周报日期当成新品发布日。
公告说明模型把文本、图像、音频和视频表示映射到共享空间。对做本地检索的人,更值得细看的是输出表示能否按资源预算缩短;下面聚焦这项能力,不把多模态支持推断成每个任务都已有可靠效果。
截断能力来自训练,不能推广到任意向量
官方模型卡列出768维原生输出,以及512、256、128维的MRL截断选项,并要求截断后重新归一化。MRL的价值在于表示经过相应训练,让前缀有机会保留有用信息;它不是“所有embedding都能任意删后几维”的数学保证。
还要区分输出维度与模型权重。把结果从768维改为128维,主要缩小存储与计算这些坐标的部分,并不等于编码器参数也减少六倍。若目标是降低设备推理内存,需要另看编码器加载、精度和实际运行时开销。
固定模型、输入模板
截取支持的前d维
对截取结果重新归一化
以同一规则重建索引与查询
100万条向量,能省下多少坐标存储
只计算稠密坐标,N条d维、每坐标b字节,总量为N×d×b。取N=100万、float32每坐标4字节,768维是3,072,000,000字节,128维是512,000,000字节,前者恰好是后者的六倍。
这是十进制字节量的算术,不是数据库实测占用。向量索引图、元数据、文档文本、副本、预留容量和分配器都会额外占空间;查询时还可能同时加载其他结构,不能拿纯坐标结果当作应用峰值内存。
3072000000 bytes
2048000000 bytes
1024000000 bytes
512000000 bytes
位宽变化,别算成维度的功劳
100万条256维float16坐标也占512,000,000字节,与128维float32相同。它相对768维float32同样少六倍,却是维度缩小三倍、坐标字节量再减半共同造成的。若迁移时两项一起改,就不能把质量或速度差异全归给截断。
评估时先固定存储位宽比较维度,再固定维度比较位宽,并确认数据库实际采用的存储格式。模型推理精度、输出数组类型与索引内部压缩格式可能是三件事。把文件标成float16,不能证明查询路径没有转换成另一种格式;应测量真正用于服务的那一份。
截断以后,旧的单位长度已经不存在
一个完整向量即使已经归一化,截取前缀之后,长度通常也不再是1。若索引使用点积近似余弦,相似度就可能混入保留部分的长度差异。应先确认数据库比较的是点积、余弦还是其他距离,再明确预处理归谁负责。
构造查询q=(1,0,0),候选A=(0.6,0,0.8),候选B=(0.8,0.6,0)。三者完整向量都是单位长度,完整点积里B的0.8高于A的0.6。截到二维后,A长度变为0.6、B仍为1;重新归一化以后,A变成(1,0),排名反而领先B。
这个例子有两层含义:不归一化的前缀点积与前缀余弦可能不一样;即使正确归一化,截断后的排名也可以与完整空间不同。它是人为构造的几何反例,不是EmbeddingGemma 2实际生成的向量,更不能当作该模型质量退化的测量。
# Constructed vectors: this does not run EmbeddingGemma 2.
import math
def prefix_unit(v, dim):
if not isinstance(dim,int) or isinstance(dim,bool) or not 0 < dim <= len(v):
raise ValueError("invalid prefix dimension")
part = v[:dim]
length = math.sqrt(sum(x*x for x in part))
if length == 0 or not math.isfinite(length):
raise ValueError("retained vector cannot be normalized")
return [x/length for x in part]
def dot(a,b):
if len(a)!=len(b):
raise ValueError("dimension mismatch")
return sum(x*y for x,y in zip(a,b))
q, a, b = [1.,0.,0.], [0.6,0.,0.8], [0.8,0.6,0.]
assert dot(q,a) < dot(q,b) # Full vectors: B ranks above A.
raw_a,raw_b = dot(q[:2],a[:2]),dot(q[:2],b[:2])
assert raw_a < raw_b
q2,a2,b2 = [prefix_unit(v,2) for v in [q,a,b]]
assert dot(q2,a2) > dot(q2,b2) # Retained-space cosine: A above B.
assert math.isclose(dot(a2,a2),1.)
for bad,dim in [([0.,0.,1.],2),([1.],0),([1.],2)]:
try:
prefix_unit(bad,dim)
except ValueError:
pass
else:
raise AssertionError("invalid normalization accepted")
assert 1_000_000*768*4 == 3_072_000_000
assert (1_000_000*768*4)//(1_000_000*128*4) == 6
print("full: B>A; normalized prefix: A>B; invalid inputs rejected")
代码已本地执行,验证排名反转、单位长度、零前缀和无效维度,并检查存储算术。没有下载或运行模型,没有测量真实检索质量。示例的二维用于看清几何,实际模型应使用模型卡支持的维度。
模型卡的结论,要保留任务条件
模型卡提供按维度划分的评测,并把128维更适合文本任务作为使用建议。这不应被改写成“128维在所有模态上无损”。厂商评测有自己的数据集、指标与精度条件,目标语料的表现仍需单独确认。
本地文档、代码片段、截图和音频检索往往需要不同的相关性标注。对于有多模态需求的应用,至少分别检查各模态与跨模态查询,而不是只用一组文本问题就决定整个系统的维度。本文不复制厂商成绩表来代替自己的验收。
先定义输入契约,再重建索引
维度、归一化之外,模型版本、文档切分、输入格式和任务前缀也会影响表示。官方模型卡为查询与文档指定了不同用途的模板。迁移时只改数据库维度,却沿用另一套输入处理,得到的差异就不能归因于维度本身。
可以给索引保存一份非敏感的配置清单:模型版本、输出维度、归一化顺序、距离度量、语料版本和输入模板。查询端与建库端检查同一份清单;发现不一致就明确拒绝混用,避免请求“能运行”却返回难以解释的排名。
从768维索引迁移到256维,通常需要生成与新契约一致的数据并建立对应索引。只有系统已经保留了可验证的原始表示,且处理规则允许时,才考虑由原向量截取重建。不同模型或不同处理版本产生的同维向量,也不能仅凭维度相等认定可混用。
质量验收先隔离表示误差与索引误差
先在固定小语料上用精确检索比较768、512、256、128维,保持其他处理不变。这一步观察表示改变对排名的影响。随后固定某个维度,再比较近似索引与该维度的精确结果,才有机会把两类误差拆开。
使用有相关性标注的查询,记录前k结果中是否出现相关文档,并检查失败样本。站内RAG召回率分母说明了统计口径;这里尤其要避免把同一长文的重复切块当成多个独立正确答案,掩盖关键文档缺失。
还应保留查询组别与样本数:代码检索下降不能被大量容易的文本查询平均掉。若应用有“不该返回任何文档”的情况,单纯top-k必然给出若干候选,也要单独验证拒答或阈值逻辑。缩短向量的目标是节省资源后仍能完成任务,不是只保留一张更小的占用截图。
迁移可以先建立并行测试索引,用相同查询比较结果,再决定切换。保留可回退的旧契约与语料版本,有助于在发现某类查询退化时定位原因。这是部署建议,本文没有对任何真实索引执行迁移。
端侧运行,也要检查数据走了哪里
本地生成向量减少了上传原始输入的必要,但系统是否全程离线,还取决于模型下载、日志、遥测、远程索引和生成模型调用。不要把“嵌入模型可在端侧运行”简化成整个应用自动具备隐私保证。
规划离线检索时,先用非敏感样本走完整链路,再核对输入、向量、文档片段和日志各自的存储与传输路径。本文没有接入任何数据集或追踪服务,也没有使用私人材料做示例。
如何做出维度选择
选择顺序可以很实际:先在代表性任务上找出能满足质量要求的最小候选维度,再测真实设备上的索引占用、查询时延和更新成本。若128维只在部分任务满足要求,就按实际需求分开设计,而不是为统一配置强行接受质量损失。
EmbeddingGemma 2给出的是可选择的表示预算,应用仍要承担选择后的验证。若这套归一化反例与验收顺序帮你少走一次索引迁移弯路,欢迎通过文末自愿支持。
来源与验证范围
10月15日Google开源周报;10月6日原始公告;官方模型卡。Google News周报条目时间为10月15日18:32:19 UTC,早于本文计划时间。两图与代码为原创教学内容;存储数字是计算值,不是设备或模型实测。
支持
如果文中的解释或示例帮你解决了问题、节省了时间,欢迎自愿打赏支持本站。
二维码可点击放大。更多支持方式见支持页面。


