稀释向量和密集向量

cloud-yuan
21
2025-08-19

在机器学习和向量数据库中,密集向量(Dense Vector)稀疏向量(Sparse Vector)是两种不同的向量表示方式,适用于不同的数据特性和应用场景。以下是它们的核心区别和实际应用解析:


1. 密集向量(Dense Vector)

特点:

  • 全维度填充:每个维度都有非零值(或显式存储的零值)。

  • 连续存储:所有维度值按顺序存储,无省略。

  • 固定长度:维度数在创建时确定,不可变。

示例:

 # 一个128维的密集向量(如BERT嵌入)
 [0.12, -0.45, 0.87, ..., 0.23]  # 所有128个维度都有值

典型应用:

  • 深度学习模型输出:如BERT、ResNet生成的嵌入向量。

  • 向量数据库存储:Milvus、FAISS等处理的默认向量类型。

  • 相似性计算:余弦相似度、欧氏距离等。

优势:

  • 适合表示连续、稠密的数据特征(如图像、语义嵌入)。

  • 计算效率高(硬件加速友好)。


2. 稀疏向量(Sparse Vector)

特点:

  • 大部分维度为零:仅存储非零值及其位置,省略零值。

  • 压缩存储:通常用 (index, value) 键值对表示。

  • 可变长度:非零值数量不固定。

示例:

 # 一个100万维的稀疏向量(如词袋模型)
 {
     1024: 0.9,   # 第1024维的值为0.9
     2048: 0.3,   # 第2048维的值为0.3
     ...          # 其他维度均为0(不存储)
 }

典型应用:

  • 文本特征表示:TF-IDF、词袋模型(Bag-of-Words)。

  • 推荐系统:用户行为特征(如点击历史)。

  • 高维分类数据:One-Hot编码。

优势:

  • 节省存储空间(尤其适合维度极高且稀疏的场景)。

  • 计算时跳过零值,提升效率。


3. 核心对比

特性

密集向量

稀疏向量

存储方式

存储所有维度值

仅存储非零值及其位置

维度灵活性

固定维度

理论支持无限维度

典型维度数

几十到几千维(如BERT: 768)

几万到百万维(如TF-IDF)

零值处理

显式存储零值

完全省略零值

计算优化

适合矩阵运算(GPU加速)

适合基于非零值的快速检索

适用模型

神经网络、CNN/RNN

传统机器学习(如LR、SVM)


4. 在向量数据库中的实践

Milvus/Pinecone等处理方式:

  • 密集向量:直接存储和索引,支持欧氏距离、内积等计算。

     # Milvus插入密集向量
     data = {"id": 1, "vector": [0.1, 0.2, 0.3], "text": "..."}
  • 稀疏向量:需转换为密集向量或专用稀疏索引(如Milvus 2.3+支持SPTAG稀疏索引)。

     # 稀疏向量转密集向量(补零)
     sparse = {1: 0.9, 3: 0.2}
     dense = [0, 0.9, 0, 0.2]  # 补零后的密集表示

选择建议:

  • 若数据天然稀疏(如文本词频),优先用稀疏表示。

  • 若需深度模型处理或相似性搜索,转换为密集向量更高效。


5. 可视化理解

 密集向量:
 [0.3, 0.7, 0.0, 0.4, 0.0]  → 存储所有5个维度
 ​
 稀疏向量:
 {0: 0.3, 1: 0.7, 3: 0.4}    → 仅存储3个非零值

通过理解这两种表示法的差异,可以更高效地设计特征工程和选择向量数据库方案。