稀疏向量、稠密向量和多向量检索有什么区别?

稀疏向量、稠密向量和多向量检索,到底选哪个?
上篇聊了混合检索怎么调优,关键词匹配叠加上语义向量,效果确实能翻倍。
但问题来了:向量本身到底有几种?稀疏向量、稠密向量、多向量,它们各自的脾气是什么?
不了解它们的性格,混合检索就是瞎混。
这回把三种向量检索技术掰开了揉碎了讲,看完你就知道什么场景该用什么武器了。
搜索的进化史:从数笔画到问专家
先回顾一下搜索是怎么一步步走到今天的。
最早的搜索叫关键词匹配。你搜"苹果",系统就找文档里含有"苹果"这两个字的。
这种方法有个硬伤——它只会数笔画,不会思考。
举个例子,你搜"水果怎么保存",但一篇讲"草莓保鲜技巧"的优质文章,一个字都没提"水果"。关键词匹配直接把它漏掉了。
后来有了BM25算法,稍微聪明一点,能根据词频调整权重。但本质上还是"数笔画"——不理解语义。
向量检索才是真正的质的飞跃。
它把每个文本变成一串数字(向量),扔进一个高维空间里。你搜"水果怎么保存",系统不是在找包含这几个字的文档,而是在找"意思跟这个问题最接近"的文档。
苹果和草莓在高维空间里可能是邻居。"水果"这个概念在空间里的位置,和它们都很近。
这就是语义理解。

稀疏向量:搜索引擎的智能升级版
先说稀疏向量。
你可能会问:向量不都是一串数字吗,怎么还有稀疏稠密之分?
关键看这串数字长什么样。
想象一个3万维的向量,每一个维度对应一个词。如果一篇文章只有500个词,那这3万个维度里,500个位置有数字,其他29400个位置全是0。
这就是稀疏——大部分是空的。
SPLADE是目前稀疏向量检索的主流方法。它不是简单地把词扔进去就完事了。
它会自动删掉"的""了""和"这类停用词,还会自动扩展同义词。搜"手机",系统可能自动加上"iPhone""智能手机""移动终端"的相关性。
本质上,稀疏向量继承了传统搜索引擎的精华——关键词匹配能力,同时又有了语义扩展的本领。
它适合什么场景?
当用户搜的东西很明确、很具体的时候。比如搜"iPhone 15 Pro 512G 价格",或者搜"北京到上海的高铁时刻表"。这种场景下,关键词本身已经传达了用户的真实意图。
我之前做电商搜索优化的时候就深有体会,用户输入商品型号的时候,稀疏向量召回率比纯语义高出一大截。

稠密向量:让AI真正理解你在说什么
稠密向量和稀疏向量完全相反。
如果说稀疏向量是3万个维度里只有几百个有值,那稠密向量就是每个维度都有值。
你的文本经过Embedding模型之后,变成一个固定维度的向量——常见的维度是768维,或者1536维。
每个维度上都密密麻麻地填着数字。这就是"稠密"的意思。
Embedding模型是怎么工作的?
它学了几十亿句话之后,悟出了一个道理:"苹果"和"iPhone"应该离得近,"苹果"和"香蕉"也应该离得近,但"苹果"和"手机壳"可以远一点。
这不是简单的关键词匹配能搞定的。它理解了"苹果"这个词在不同语境下可能指什么。
所以你搜"苹果",系统不是机械地找包含"苹果"两个字的文章,而是找那些"意思跟苹果相关的"文档。可能是水果种植指南,也可能是iPhone使用技巧。
稠密向量擅长的是语义泛化。当用户的需求比较模糊,或者表达方式多种多样的时候,它能抓到核心意思。
但它有个弱点:太"宏观"了。
用户如果要找"2024年Q3财报数据"这种很精细、很具体的信息,稠密向量可能给出的是一堆语义相关但细节不对的文档。
这是因为它把整句话压缩成了一个向量,某些细节信息在这个过程中被"模糊化"了。

多向量检索:给每个词都发一张身份证
有没有办法既保留语义理解,又不丢失关键词细节?
多向量检索就是这个问题的答案。
它的核心思路很简单:别把整句话压缩成一个向量了,让每个词都有自己的向量。
这句话叫"苹果最新款手机多少钱",经过Tensor或ColBERT模型处理后,"苹果"、"最新款"、"手机"、"多少钱"各有各的向量。
检索的时候怎么打分?
有一套叫MaxSim的机制。
系统找出Query中每个词,和文档中每个词的相似度。比如"苹果"和"苹果"相似度0.95,"手机"和"手机"相似度0.92。然后取每个Query词的最高分求和。
这就好比阅卷老师不是看个总分,而是逐题打分,确保每个知识点都不落下。
多向量检索的定位是精排/Reranker阶段。
为什么?
因为它效果好,但太慢了。每个文档都要和Query逐词比对,工程上吃不消。
实际架构是这样的:先用稠密向量或稀疏向量从海量文档里海选一批(比如1000个),再用多向量检索精确排序,选出最好的10个给用户。
高考阅卷也是这个流程:先粗筛排除大部分考生,再用细阅决定最终排名。

三种技术怎么选?看场景下菜碟
说了这么多,到底怎么选?
直接给结论:
| 场景 | 推荐技术 | 原因 |
|---|---|---|
| 海量文档粗筛 | 稠密向量 | 速度快,语义泛化能力强 |
| 关键词精确召回 | 稀疏向量 | 保留BM25优势,支持同义词扩展 |
| 精排/Reranker | 多向量/ColBERT | 效果最精准,计算成本最高 |
| 通用场景 | 稠密+稀疏混合 | 兼顾语义和关键词 |
再打个比方。
你去一家大型自助餐厅,菜太多,不知道从哪下手。
稠密向量就像是餐厅入口的电子屏幕,根据你平时喜欢的口味给你推荐几道菜——不一定精准,但帮你缩小了范围。
稀疏向量就像是分类标签牌,"川菜区""粤菜区""甜点区",你想吃辣的直接去川菜区。
多向量检索就是坐下来之后,服务员拿着菜单一道道给你讲解——哪道菜用了什么食材、口味偏重还是偏轻、适合配什么酒。
粗筛用前两个,精排用第三个,这就是业界标准的做法。

混合搜索:企业级系统的标配
明白了三种技术的特点,混合搜索就不难理解了。
为什么要混合?
因为没有银弹。
单一技术都有局限:
- 稠密向量:语义好,但细节可能丢失
- 稀疏向量:关键词精准,但语义泛化差
- 多向量:效果好,但太慢,只能用在精排阶段
组合起来,取长补短,才是正道。
主流的做法叫N路召回。比如Infinity框架支持你自由组合:稠密向量召回 + 稀疏向量召回 + 传统全文搜索,三路并行。
每路召回一批候选文档,合并去重后,用多向量检索统一排序。
这套架构已经是企业级检索系统的标配了。向量搜索负责语义召回,Tensor/ColBERT负责精准排序,BM25负责关键词兜底。
三个臭皮匠,真能顶个诸葛亮。

留个小问题给你
Embedding系列到这里就差不多了。
从第一篇"什么是Embedding"开始,我们聊了向量是怎么生成的、怎么存储的、怎么检索的、怎么优化的。
然后讲到了今天的稀疏向量、稠密向量、多向量检索。
你会发现,这其实是一条不断进化的路:
从关键词到语义,从粗筛到精排,从单一到混合。
每一步都在解决实际问题,又带来新的权衡。工程就是这样,没有最优解,只有最适合当前场景的解。
最后留个小问题给你:
如果让你设计一个企业知识库检索系统,面对研发文档、财务报表、客服话术三类完全不同性质的内容,你会怎么组合这三种检索技术?
这个答案没有标准,但思考的过程本身就是价值。
希望这六篇文章,能让你对Embedding和向量检索有一个完整的认知体系。下次遇到相关问题,你知道该问什么了。
