Product Quantization
在前面一节讲解了向量数据库索引相关的内容,那么本节将会讲解其中压缩方法的量化手段:乘积量化器。
简单来说将向量的所有维度划分为多个子空间,每个子空间一部分维度,然后每个子空间独立去找最近距离。例如一个128维度的向量,划分为16个子空间,每个子空间有该向量的8个维度,第一个子空间:1-8,第二个子空间9-16,第十六个子空间121:128。下面详细讲解Product quantization的训练与查询:
注:本篇文章已更新至星球。
1.训练
将n个数据集的d个维度按照m个子空间进行划分,每个子空间的维度为d/m,子空间的维度不一定要相等。对n个数据集中的所有子空间的向量采用k-means算法进行聚类,找出每个子空间的k个质心。质心也称为再现值(reproduction value)。质心集称为码本(codebook)。
例如:有1000个向量,每个向量都是128维度,需要拆分8个子空间,k-means的聚类k = 256,那么每个子空间的维度是128/8=16维,每个子空间的向量是16 * 32bits
,下图展示了每个子空间聚类256个中心点,每个中心点的维度是16,总共有子空间数量(8)个中心集合,codebook的维度就是8 * 256 * 16
。