PostgreSQL码农集散地

从稠密到稀疏再到量化

本期播客

AI 搜索热点技术: 稀疏向量、稠密向量和向量量化

稀疏向量、稠密向量和向量量化是向量表示和处理中的三个重要概念,广泛应用于自然语言处理、信息检索、机器学习和推荐系统等领域。下面对它们进行对比和解释:


一、稀疏向量(Sparse Vector)

定义:
稀疏向量是指大部分元素为零,只有少数元素非零的向量。

特点:

  • 高维:通常维度非常高(如词袋模型中维度等于词典大小)。
  • 存储效率低:若用普通数组存储,会浪费大量空间存储零值。
  • 计算效率低:在进行点积、距离计算时,需遍历大量零值。
  • 可解释性强:每个非零维度通常对应一个明确的特征(如某个词的出现次数)。

典型应用:

  • 词袋模型(Bag-of-Words)
  • TF-IDF 向量
  • 传统信息检索中的文档表示

示例:
假设词典为 ["apple", "banana", "cherry", "date"],句子 "I like apple and banana" 的词袋向量为:
[1, 1, 0, 0] → 稀疏(2个非零)


二、稠密向量(Dense Vector)

定义:
稠密向量是指几乎所有元素都非零的低维向量,通常通过嵌入(embedding)技术学习得到。

特点:

  • 低维:维度通常在几十到几百之间(如 768、1024)。
  • 语义丰富:向量的每个维度虽无明确含义,但整体能捕捉语义、上下文关系。
  • 存储和计算高效:无需特殊结构即可高效处理(尤其适合 GPU 加速)。
  • 可支持相似度计算:如余弦相似度,用于语义搜索。

典型应用:

  • Word2Vec、GloVe、FastText
  • BERT、Sentence-BERT 等预训练语言模型生成的嵌入
  • 现代语义搜索、推荐系统

示例:
"apple" 的稠密向量可能是:
[0.23, -0.45, 0.67, ..., 0.12](维度为 768,几乎每个值都非零)


三、向量量化(Vector Quantization, VQ)

定义:
向量量化是一种压缩技术,将高维(通常是稠密)向量映射到一个 有限的离散码本(codebook) 中的代表向量(称为“码字”或“centroid”),从而用更少的比特表示原始向量。

核心思想:
用“最近”的码字近似原始向量,牺牲少量精度换取显著的存储和计算效率提升。

常见方法:

  1. K-Means 聚类:构建码本,每个簇中心是一个码字。
  2. 乘积量化(Product Quantization, PQ):将向量分段,每段独立量化,组合形成近似。
  3. 残差向量量化(Residual Vector Quantization, RVQ):逐层量化残差,精度更高。

优点:

  • 大幅压缩存储:例如,768 维 float32 向量(3KB)可压缩为 1~2 字节的索引。
  • 加速近似最近邻搜索(ANN):如 FAISS 库广泛使用 PQ/RVQ。
  • 适合大规模向量数据库:如十亿级向量检索。

缺点:

  • 信息损失:量化会引入误差,影响检索精度。
  • 需预训练码本:码本质量直接影响性能。

应用场景:

  • 大规模语义搜索(如电商商品搜索、问答系统)
  • 向量数据库(如 Milvus、Pinecone、Weaviate)
  • 模型压缩与加速(如语音识别、图像检索)

对比总结

特性
稀疏向量
稠密向量
向量量化(作用于稠密向量)
维度
高(数千~百万)
低(几十~几千)
保持原维度,但用索引表示
非零元素比例
极低(<1%)
几乎全非零
不适用(是对稠密向量的压缩)
语义表达能力
弱(基于关键词匹配)
强(捕捉语义和上下文)
近似保留语义
存储效率
低(需稀疏存储结构)
中等
极高(压缩比可达 10x~100x)
计算效率
低(点积慢)
高(适合并行计算)
极高(索引+查表)
典型用途
传统文本检索
语义搜索、深度学习
大规模向量检索、ANN

总结

  • 稀疏向量适合关键词匹配场景,但难以捕捉语义;
  • 稠密向量通过嵌入模型实现语义理解,是现代 AI 的基础;
  • 向量量化是对稠密向量的高效压缩手段,使十亿级向量检索成为可能。

在实际系统中,三者常结合使用:原始文本 → 稠密向量(如 BERT)→ 向量量化(如 PQ)→ 高效 ANN 检索。