在 AI 和搜索领域,向量(Vector) 是计算机理解万物的基础。你可以把向量想象成坐标,通过这些坐标,计算机就能在“数学空间”里衡量内容之间的关系。
稀疏向量和稠密向量代表了两种完全不同的“描述方式”,它们在 RAG(检索增强生成)项目中各司其职。
1. 稠密向量 (Dense Vector) —— 捕捉“语义”
稠密向量是目前大模型(LLM)和 Embedding 模型的底层核心。
- 特点:向量的每一位通常都是非零的实数(如 0.12, -0.5 等)。维度相对固定且较低(通常是 768、1536 维)。
- 代表算法:OpenAI Embedding、BGE、BERT。
- 生活例子:如果要用稠密向量描述一个“苹果”,AI 不会只记录“苹果”这两个字,而是会用几千个维度来描述它:
[甜度: 0.8, 颜色: 红色, 类别: 水果, 形状: 圆形, ...]。 - 优势:擅长语义检索。即便用户搜“西红柿”,它也能通过语义坐标找到“番茄”,因为它知道这两个词在语义空间里靠得很近。
2. 稀疏向量 (Sparse Vector) —— 捕捉“关键字”
稀疏向量主要用于传统的关键词匹配,它非常“死板”但很精准。
- 特点:维度极高(通常等于词典的总词数,可能有几万甚至几十万维),但绝大部分位置都是 0。只有当某个词出现时,对应的位置才有数值。
- 代表算法:BM25、TF-IDF。
- 生活例子:想象一个巨大的清单,上面列出了字典里所有的词。描述“苹果”这个词时,清单上只有“苹果”那一栏填了 1,其他几万个词(如“电脑”、“桌子”)全是 0。
- 优势:擅长精确匹配。当你搜索一个特定的型号(如
iPhone 15 Pro Max)或专业术语时,稀疏向量能精准锁定这个词,而不会因为“语义接近”就给你推一个iPhone 14。
3. 核心对比
| 特性 | 稠密向量 (Dense) | 稀疏向量 (Sparse) |
|---|---|---|
| 数值形态 | 绝大部分是非零小数 | 绝大部分是零 |
| 维度 | 较低(几百到几千) | 极高(词典大小) |
| 擅长领域 | 理解意思(语义搜索) | 字面匹配(关键词搜索) |
| 代表场景 | “给我推荐点健康的水果” | “查找型号为 AB-123 的零件” |
4. 为什么 RAG 项目中要强调“混合检索”?
单靠一种向量是不够的:
- 只有稠密向量:容易产生“幻觉”或模糊。比如搜“Java 17”,它可能觉得“Java 8”语义也挺近,结果把旧版本的文档推给了你。
- 只有稀疏向量:太死板。搜“提高代码质量”,如果文档里写的是“优化重构技巧”,关键词对不上,就彻底搜不到。
混合检索(Hybrid Search) 就是将两者结合:
- 稠密向量 负责把“意思相近”的内容捞回来。
- 稀疏向量 负责把“关键字完全一致”的内容提上来。
在 Pinecone 等向量数据库中,通过给两者分配不同的权重(Alpha 值),可以大幅提升检索的准确率。