Skip to content

稠密 vs 稀疏向量(Dense vs Sparse Vector)

一句话 TL;DR:稠密向量是所有维度都有值的向量(如 embedding),稀疏向量是大部分维度为 0 的向量(如 BM25/TF-IDF 词袋表示)。稠密擅长语义相似,稀疏擅长关键词精确匹配。现代 RAG 系统常用混合检索(hybrid search)结合两者优势。


L1 · 一句话点破

两种向量表示:

稠密向量(Dense Vector):每个维度都有非零值,维度低(768-3072),由 embedding 模型生成。

"猫" 的 dense embedding: [0.23, -0.45, 0.12, ..., 0.78]  # 1536 维,每维都有值

稀疏向量(Sparse Vector):大部分维度为 0,只有少数维度非零,维度高(等于词表大小,如 30K-250K)。

"猫" 的 sparse (BM25/TF-IDF) 表示: {猫: 1.5, 宠物: 0.8, 喵: 0.6}  # 只有出现的词非零
"猫" 的 sparse (SPLADE) 表示: {猫: 2.1, 宠物: 1.5, 动物: 1.2, 喵喵: 0.9, ...}  # 扩展的稀疏

两者擅长不同:

  • 稠密:语义相似("猫" 和 "小猫" 接近)
  • 稀疏:关键词匹配("iPhone 15" 精确匹配)

现代 RAG 系统常用混合检索,结合两者。

L2 · 通俗类比

两种找书方式:

  • 稠密向量:把每本书的内容浓缩成一个"语义指纹"(如 1536 个数字),按"主题相似度"找。能找到"主题相关"但用词不同的书。但可能错过"用词完全匹配"的书。
  • 稀疏向量:把每本书看成一个"关键词清单",按"关键词重合"找。能精确找到含特定关键词的书。但同义词/换说法找不到。

具体例子:

查询:"苹果手机"

  • 稠密向量:找到"iPhone 15 评测"、"智能手机对比"等语义相关文档(即使不含"苹果手机")
  • 稀疏向量:找到含"苹果"+"手机"的文档,但可能错过"iPhone"(同义词不同词)

两者结合(混合检索):

  • 稠密召回语义相关
  • 稀疏保证关键词命中
  • RRF 或加权融合合并结果

这是现代 RAG 的主流方案。

L3 · 正经定义

稠密向量(Dense Vector):$\mathbf{x} \in \mathbb{R}^d$,所有维度都有非零值,$d$ 较小(768-3072)。由 embedding 模型生成。

稀疏向量(Sparse Vector):$\mathbf{x} \in \mathbb{R}^V$,大部分维度为 0,$V$ 等于词表大小(30K-250K)。只存非零项({index: value})。

稀疏向量的来源

方法思路代表
词袋 / TF-IDF词频统计经典 IR
BM25TF-IDF 改进,加文档长度归一Lucene, Elasticsearch
学习型稀疏(SPLADE)神经网络生成稀疏表示SPLADE
词权重每个词一个权重uniCOIL 等

对比

维度稠密稀疏
维度低(768-3072)高(30K-250K)
非零比例100%<1%
存储大(每维都存)小(只存非零)
语义相似
关键词匹配
可解释性强(看哪些词匹配)
计算索引ANN (HNSW)倒排索引

参考资料

L4 · 原理深挖

4.1 稠密向量:语义相似的力量

稠密向量由 embedding 模型(如 BERT、OpenAI text-embedding-3)生成。每个维度编码一个"语义侧面"。

优势

  • 语义相似:"猫" 和 "小猫"、"猫科动物" embedding 接近,能找到同义/相关
  • 跨语言:多语言 embedding 模型让中英文"猫" 和 "cat" 接近
  • 泛化:能处理训练时没见过的查询和文档

劣势

  • 关键词匹配弱:查询"iPhone 15"可能召回"iPhone 14"(语义太近)
  • 可解释性差:为什么这个文档被召回?看 embedding 维度看不出
  • 小数据训练不足:embedding 模型在某些领域(如医疗、法律专有词)可能不准

4.2 稀疏向量:精确匹配的力量

稀疏向量基于词项匹配,每个维度对应一个词。

经典方法:BM25 / TF-IDF

文档 "猫是一种常见的宠物" -> {猫: 1.2, 是: 0.1, 一种: 0.1, 常见: 0.8, 宠物: 1.0}
查询 "猫" -> {猫: 1}
匹配: 文档含"猫",得分高

优势

  • 精确匹配:查询词在文档中精确出现,得分高
  • 可解释:看哪些词匹配,为什么召回清晰
  • 无需训练:BM25 是无监督的,开箱即用
  • 专有名词强:罕见词、专有名词、代码标识符等精确匹配

劣势

  • 语义弱:查询"猫"找不到"小猫"、"cat"
  • 依赖分词:中文需先分词,分词错误影响检索
  • 词表大:维度等于词表大小,存储和计算需特殊处理

4.3 学习型稀疏:SPLADE 等新方法

SPLADE (Formal et al., 2021) 等方法用神经网络生成稀疏向量,结合稠密和稀疏优势:

查询 "猫" 通过 SPLADE 模型 -> {猫: 2.1, 宠物: 1.5, 动物: 1.2, 喵喵: 0.9, 小猫: 1.8, ...}

模型不只是输出"猫",还预测相关词("宠物"、"小猫"等)的权重,形成"扩展的稀疏表示"。

SPLADE 的优势

  • 语义扩展:通过模型预测相关词,比纯 BM25 语义更强
  • 稀疏存储:仍只存非零项,存储高效
  • 可解释:仍是词项匹配,可看哪些词匹配
  • 倒排索引友好:可直接用 Lucene 等倒排索引

SPLADE 的劣势

  • 需训练数据
  • 推理比 BM25 慢
  • 工程集成比 dense 复杂

SPLADE 在 BEIR 等 benchmark 上常优于纯 dense 检索,是稀疏检索的前沿。

4.4 混合检索:结合两者优势

现代 RAG 系统常用混合检索(Hybrid Search)

1. 同时用 dense 和 sparse 检索
   dense_results = dense_search(query, top_k=50)
   sparse_results = sparse_search(query, top_k=50)

2. 融合结果
   fused = rrf(dense_results, sparse_results)  # 或加权融合

3. 返回 top-k
   return fused[:top_k]

融合方法:

  • RRF (Reciprocal Rank Fusion):按排名倒数求和,无需归一化分数
  • 加权融合:$\alpha \cdot \text{dense_score} + (1-\alpha) \cdot \text{sparse_score}$,需分数归一化
  • 学习型融合(LTR:训练模型学习融合权重

为什么混合检索有效

  • 稠密覆盖语义相关
  • 稀疏覆盖精确匹配
  • 互补,召回率提升
  • 实证:混合检索 RAG 效果常优于纯 dense 或纯 sparse

主流方案:Elasticsearch 8+、Vespa、Weaviate、Milvus 2.4+ 等都内置混合检索。

4.5 稠密 vs 稀疏:什么时候用哪个

纯稠密适合

  • 语义查询为主("关于 AI 的文章")
  • 跨语言检索
  • 查询和文档用词差异大
  • embedding 模型在领域内表现好

纯稀疏适合

  • 关键词查询为主("iPhone 15 价格")
  • 专有名词、代码标识符检索
  • 数据量小,不值得训 embedding
  • 可解释性要求高

混合检索适合

  • 通用 RAG(既有可能问概念,也可能问具体词)
  • 高质量检索场景
  • 工程资源允许维护两套索引

实务:多数生产 RAG 用混合检索,效果最稳。

4.6 稀疏向量的索引:倒排索引

稀疏向量天然适合倒排索引(inverted index):

倒排索引:
  "猫" -> [文档1, 文档5, 文档8]
  "宠物" -> [文档1, 文档3, 文档5]
  ...

查询时:取查询词对应的文档列表,求交集/并集,按权重排序。

倒排索引是 BM25、TF-IDF 的基础,也是 Lucene/Elasticsearch 的核心数据结构。它对稀疏向量高效:

  • 只需查非零维度
  • 复杂度与查询词数成正比,与词表大小无关
  • 成熟工程(Lucene 几十年优化)

对比稠密向量的 ANN 索引(HNSW、IVF):两种索引针对不同向量类型,工程实现完全不同。混合检索系统需同时维护两套索引。

L5 · 沿革与坑

沿革

  • 1970s-1990s:稀疏向量(TF-IDF、BM25)统治信息检索。倒排索引成熟。
  • 2013-2018Word2Vec、BERT 等让稠密向量崛起,但早期检索效果不如 BM25。
  • 2020DPR (Karpukhin et al.) 证明稠密检索在开放域 QA 上超越 BM25。
  • 2021SPLADE 等学习型稀疏出现,结合稠密和稀疏优势。
  • 2022-2023:RAG 兴起,混合检索成为主流。Elasticsearch、Milvus 等集成混合检索。
  • 2024-2025:ColBERT、Multi-vector 等新表示出现,但 dense+sparse 混合仍是 RAG 主流。

常见误解

  • 误解:稠密向量一定比稀疏好。 ✅ 真相:稠密擅长语义,稀疏擅长关键词。各有所长,混合检索常优于纯稠密(4.5)。

  • 误解:稀疏向量过时了。 ✅ 真相:BM25 等稀疏方法在关键词匹配上仍强,且无需训练。混合检索让稀疏回归主流(4.4)。

  • 误解:稀疏向量维度低。 ✅ 真相:稀疏向量维度等于词表大小(30K-250K),远高于稠密(768-3072)。只是大部分为 0,存储高效(L3)。

  • 误解:BM25 是稀疏向量。 ✅ 真相:BM25 是一种打分函数,输出可看作稀疏向量(每个词一个权重)。概念上有联系但不等同(4.2)。

  • 误解:SPLADE 是稠密向量。 ✅ 真相:SPLADE 是学习型稀疏向量,输出仍是稀疏的(大部分维度为 0),但用神经网络生成(4.3)。

  • 误解:混合检索就是把两套结果合并。 ✅ 真相:合并需要正确的融合方法(RRF、加权、LTR)。简单合并可能让一种结果淹没另一种。RRF 是常用稳健方法(4.4)。

面试怎么考

  1. "稠密向量和稀疏向量的区别?" --稠密所有维度非零、低维、语义强;稀疏大部分为 0、高维、关键词强(L1、L3)。
  2. "什么时候用稠密,什么时候用稀疏?" --语义查询用稠密,关键词查询用稀疏,通用场景混合检索(4.5)。
  3. "什么是混合检索?怎么融合?" --同时用 dense+sparse 检索,用 RRF 或加权融合合并。主流 RAG 方案(4.4)。
  4. "SPLADE 是什么?" --学习型稀疏向量,用神经网络生成扩展的稀疏表示。结合稠密语义和稀疏存储优势(4.3)。
  5. "稀疏向量用什么索引?" --倒排索引。成熟高效,是 Lucene/ES 的核心(4.6)。
  6. "为什么 RAG 常用混合检索?" --稠密覆盖语义,稀疏覆盖关键词,互补。实证常优于纯 dense 或纯 sparse(4.4)。

延伸阅读


上一篇:高维向量 -- 维度灾难与维度的几何意义。下一篇:CLIP -- 图文对齐的多模态 embedding。

内容采用 CC BY-SA 4.0,代码采用 MIT。