嵌入中的向量量化是一种通过将高维向量映射到一组有限的代表性向量(称为“码本”)来降低高维向量的计算和存储成本的技术。 此码本包含少量向量(或“码字”),这些向量近似于原始数据。 每个高维嵌入都由码本中最接近码字的索引代替,从而有效地压缩数据。 例如,1024 维的嵌入可以表示为指向 256 个条目的码本中码字的单个整数,从而大大减少内存使用量。
该过程通常涉及两个步骤:创建码本和将嵌入分配给码字。 码本通常使用诸如 k-means 之类的聚类算法生成,其中聚类中心成为码字。 构建码本后,将每个原始嵌入与所有码字进行比较(例如,使用欧几里得距离或余弦相似度),并用最接近匹配项的索引替换。 例如,在推荐系统中,用户和项目嵌入可以量化为共享码本,从而通过比较索引而不是原始向量来更快地进行相似性搜索。 诸如 FAISS(Facebook AI Similarity Search)之类的库使用向量量化来加速大型数据集中的最近邻查询。
向量量化的权衡围绕准确性与效率。 尽管它可以减少内存并加快计算速度,但量化会引入近似误差,因为嵌入会被码字替换。 诸如乘积量化之类的技术通过将向量拆分为子向量并分别量化每个子向量来缓解此问题,从而平衡了准确性和压缩率。 例如,可以将 128 维向量划分为八个 16 维子向量,每个子向量量化为 256 个码字,从而产生 8 个索引(总共 8 个字节)而不是 128 个浮点数(512 个字节)。 这在诸如具有有限资源的实时推荐引擎或移动设备之类的应用中特别有用,在这些应用中,快速且内存高效的操作至关重要,即使会损失一些精度。