Embedding 进阶:Matryoshka 表示学习、量化向量与检索调优,把 RAG 的存储和延迟砍一个数量级
前两篇分别聊了向量数据库选型(向量数据库选型对比)和检索链路的分块/重排序(RAG 检索优化深度拆解),但都把 Embedding 模型当成了黑盒——喂进去文本,吐出来一串浮点向量。这篇把盒子拆开,聚焦一个高级后端工程师做规模化 RAG 时迟早会撞上的问题:向量又大又多,存储和检索延迟怎么砍?
先算笔账。一个 100 万 chunk 的语料库,用 1536 维 float32 的 Embedding(比如 text-embedding-3-small),单是向量本体就是:
1,000,000 × 1536 × 4 字节 ≈ 6.1 GB
这还没算 HNSW 图索引的开销(通常再乘 1.2 到 1.5 倍)。规模涨到 1000 万 chunk,向量本体就 61GB,单机内存放不下,得上分布式。但真相是:绝大多数检索场景根本用不到 1536 维的全精度浮点。今天聊的三件事——对比学习怎么训出 Embedding、Matryoshka 怎么一个模型任意维度截断、量化怎么把向量压 8 到 32 倍——就是把这笔账砍下来的三条路。