视频搜索留在笔记本上:29秒建索引,25毫秒找一帧
EmbeddingGemma 2 把视频帧和文字放进同一向量空间。Avi Chawla 在 M3 Pro 上实测:60 秒视频索引 29 秒,9 个查询平均 25 毫秒。binary quantization 能把 RAG 存储压到 1/32,但网友实测 top-1 准确率会掉 8 到 12 个百分点,重排仍是常见补丁。
Avi Chawla 用 EmbeddingGemma 2 搭了一个本地视频搜索界面。输入一句话,界面找到匹配帧并跳到对应时间戳。
EmbeddingGemma 2 来自 Google DeepMind,把文本、图像、视频、音频映射到同一个向量空间。文字和视频帧因此可以比较相似度。开发者已经写了原生 Rust 实现做本地推理。Unsloth 还提供一个 176 MB、4-bit GGUF checkpoint,用于文本嵌入;这个版本不包含完整多模态 pipeline。
他测的是视频搜索:在 Apple M3 Pro 上用 CPU,60 秒视频建索引 29 秒,9 个查询平均 25 毫秒,保存的帧向量占 180 KiB。视频只索引一次。每次新搜索只嵌入查询,再和保存的帧向量比较。处理全在笔记本上。下面是他录的完整流程:
这组数字只覆盖 60 秒视频。视频变长,索引存储会涨。模型量化降低权重内存,检索索引有自己的存储成本。Avi Chawla 另外写了一篇 binary quantization 的文章,讲怎么把向量存储压到 1/32,并附可运行检索实现。
那篇文章的路线:先用 BAAI/bge-large-en-v1.5 生成 float32 嵌入,把大于 0 的维度记 1,其余记 0,再用 np.packbits 打包成字节。Milvus 里字段类型用 BINARY_VECTOR,索引 BIN_FLAT,距离用 HAMMING。查询也做同样二值化,取 top-k。文中给的规模是在 PubMed 数据集上查询 36M+ vectors,低于 30ms,回答生成低于 1s。技术栈包括 LlamaIndex、Milvus 和 Groq 上托管的 Kimi-K2。完整代码在 fastest-rag-milvus-groq。
binary quantization 的吸引力很直接:一维一比特,原始存储相比 float32 少 32 倍。Perplexity 在搜索索引里用,Azure 在检索管线里用,HubSpot 在 AI assistant 里用。这些是原文说法。
代价也直接。有网友 Vishwraj Jadav 在约 5 万份印度法院案件上测过:检索速度快、top-k 召回强,但 top-1 准确率掉了 8 到 12 个百分点。他给法律 RAG 的建议是二值负责检索,float 负责重排。另一位网友 Abdel Latrache 也提到,大规模数据里 Hamming 距离好用,二值量化对性能帮助大,但仍要 rerank 补回精度。
视频搜索还有另一层成本。有网友 Agentik 说,他试过每秒采样帧来搜录屏,索引很快膨胀,后来只嵌入场景变化的帧。采样少了省空间,但只出现一秒的画面会不会被漏掉,需要单独测。Ruslan 的评论更直接:查一个只出现一秒的东西,才知道更小的索引漏了什么。
对普通用户,这个方向有画面:输入“孩子第一次独自骑自行车”,在多年家庭视频里找到那段,文件不出本机。有网友 K4k0 这样描述。现在看,模型和多模态嵌入已经能跑在本地,真正难的是索引策略、采样频率、存储增长和精度取舍。29 秒索引一分钟视频,25 毫秒找一帧,是开胃菜。视频多起来以后,账才开始算。
发布时间: 2026-11-09 12:32