云计算百科
云计算领域专业知识百科平台

EmbeddingGemma 2 能进浏览器检索吗:先验证模型链路

图片到浏览器检索的四道接口

拿摄像头画面生成一个固定长度数组,再算余弦相似度,演示很容易做出来。问题是,数组从哪里来?若所有图片都返回同一个向量,检索代码依旧能运行,排序却没有任何语义依据。

Google 2026 年 10 月 6 日发布 EmbeddingGemma 2 相关资料,为多模态检索提供了新的研究对象。模型存在与浏览器可运行是两件需要分别验证的事。本文不虚构浏览器权重、算子支持或设备吞吐,也不把随机向量当成模型产物。

模型文件之外,还缺哪些环节

第一步确认编码器处理什么输入,图像与文本是否进入可比较的空间,维度和归一化如何定义。不同编码器输出即使长度一样,也不能默认混用。

第二步锁定授权权重及预处理。缩放、裁切、颜色通道、数值范围和 tokenization 都可能改变结果。第三步记录转换工具、格式和不支持的算子。第四步用目标运行时加载,比较浏览器输出与参考输出,再测检索。

LiteRT.js 官方文章展示了 Web 推理路线;10 月 19 日 Tensor API 文章介绍了更底层的原生图构建。两者不能替代“这一个模型、这一个转换版本、这组浏览器”之间的兼容性证据。若某一步失败,就标记失败,不能换模拟向量把流程接起来后仍称端侧模型跑通。

图片、向量和检索的证据链

先让检索数学拒绝假输入

这个最小例子只检查余弦相似度的输入约束与召回指标,不运行任何模型。保存为 retrieval-math.mjs,执行 node retrieval-math.mjs:

import assert from "node:assert/strict";

function cosine(a, b) {
if (!a.length || a.length !== b.length) throw new Error("dimension mismatch");
let dot = 0, aa = 0, bb = 0;
for (let i = 0; i < a.length; i++) {
if (!Number.isFinite(a[i]) || !Number.isFinite(b[i]))
throw new Error("non-finite embedding");
dot += a[i] * b[i]; aa += a[i] ** 2; bb += b[i] ** 2;
}
if (!Number.isFinite(dot) || !Number.isFinite(aa) || !Number.isFinite(bb) || aa === 0 || bb === 0)
throw new Error("invalid norm");
return dot / Math.sqrt(aa * bb);
}
function recallAtK(rankedIds, relevantIds, k) {
if (!Number.isSafeInteger(k) || k < 1) throw new Error("invalid k");
const truth = new Set(relevantIds);
if (!truth.size || new Set(rankedIds).size !== rankedIds.length)
throw new Error("non-empty truth and unique results required");
return rankedIds.slice(0, k).filter(id => truth.has(id)).length / truth.size;
}
assert.equal(cosine([1, 0], [0, 1]), 0);
assert.equal(cosine([1, 0], [1, 0]), 1);
assert.throws(() => cosine([0, 0], [1, 0]));
assert.throws(() => cosine([1], [1, 2]));
assert.equal(recallAtK(["b", "c", "a"], ["a", "b"], 2), 0.5);
assert.throws(() => recallAtK(["a", "a"], ["a"], 1));
// 反例:若编码器永远输出同一向量,所有候选得分相同。
assert.equal(cosine([1, 0], [1, 0]), cosine([1, 0], [1, 0]));
console.log("retrieval math passed; embeddings are hand-written fixtures");

最后一条断言刻意展示退化编码器。真实验证至少需要多张不同授权图片与多条查询,确认输出不是常量、零值或非有限值;“向量不同”也只是基本检查,仍需标注相关性来检验质量。

条码识别与视觉相似检索也应分开。条码解码得到一个标识符,通常可直接查商品库;视觉检索给相似候选,可能把外观相近但型号不同的商品排在前面。不要用相似度自动确认商品身份或价格。

一份可交接的实验记录

样本集固定授权来源、查询、相关商品 ID 与困难负样本;按查询统计 Recall@k,并保留错误案例。若图库较小,先用精确检索校验,再引入近似索引,避免把模型误差与 ANN 误差混在一起。

性能分为下载、初始化、解码预处理、编码、索引检索、回读显示;记录浏览器、OS、设备与失败原因。相机权限被拒绝时允许上传图片或改用文本;低端设备不支持时退回服务端或普通搜索,但需要告知图片将离开设备。

本轮已执行数学测试,未下载 EmbeddingGemma 2 权重,未转换模型,未获取真实嵌入,也没有 Recall@k 或 GPU 时间结果。当前结论是值得验证的链路,不是“浏览器已兼容”。

参考资料:EmbeddingGemma 2,2026-10-06;LiteRT.js,2026-07-09;LiteRT Tensor API,2026-10-19。采用前重新核验可得权重、许可与浏览器运行路线。

赞(0)
未经允许不得转载:网硕互联帮助中心 » EmbeddingGemma 2 能进浏览器检索吗:先验证模型链路
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!