乘积量化 PQProduct quantization

把向量分成子空间,用各自码本中的编码近似表示。

核心约束
每个子向量通过有限码本表达。
适用问题
压缩向量索引并减少检索内存带宽。
边界与取舍
量化误差影响结果;码本训练数据需要有代表性。

常见操作#

d 为维度,M 为子空间数,K 为每个子空间码字数,n 为待扫描编码数;这里 d 可被 M 整除,K = 2^b,每个子空间维度 d/M。

操作时间复杂度条件与说明
训练码本M 个子空间聚类依赖训练样本数、K、迭代数与聚类算法,不能仅按编码长度估算。
编码一个向量朴素穷举码字 O(Kd)O(Kd)每子空间选择最近质心;加速器、批处理和编码策略可改变实际成本。
建立查询距离表O(Kd)O(Kd)计算查询到各子空间质心的距离。
扫描 n 个编码O(nM)O(nM)对每个候选查 M 次表并累加;top-k 选择工作另计。

时间与空间#

时间复杂度
距离表 O(Kd)O(Kd) + 编码扫描 O(nM)O(nM)
辅助空间
每向量 M log₂ K 位并向上取整到字节;共享码本 O(Kd)O(Kd),查询表 O(MK)O(MK)

这些是基本 ADC 的成本。IVF-PQ 只扫描部分列表,OPQ 另有旋转;压缩后的距离是近似值,需要评估召回率。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Jégou, Douze & Schmid · Product Quantization乘积码本与非对称距离估计的原始论文。

Faiss 1.9 · ProductQuantizer训练、编码、距离表和编码扫描实现。

3 个概念