向量检索是什么

从“找一样的”到“找像的”:稠密/稀疏向量、最近邻本质、为什么数据库做不了语义检索,以及完整链路。

一句话定义

向量检索(Vector Search / Similarity Search):把文字、图片、音频等内容编码成一串浮点数(向量 / embedding),然后通过"计算向量之间的距离/相似度"来找回语义上最接近的内容,而不是靠关键词精确匹配。

它解决的核心问题是:"和这条内容意思最像的东西是什么?"——传统数据库只会回答"等于/包含某个字符串",答不了"意思相近"。

稠密向量 vs 稀疏向量

做向量检索前先要分清两种向量,它们是不同的技术路线:

维度稠密向量(Dense)稀疏向量(Sparse)
来源神经网络模型(BGE / OpenAI / BERT)编码词频统计 / 词项权重(BM25、SPLADE)
维度固定 384 / 768 / 1536 维,每维都有值词汇表大小(几万~几十万),绝大多数是 0
可解释性低,每个维度无明确含义高,每个非零维度对应一个词项
擅长语义相似、同义改写、跨语言精确关键词、专有名词、罕见词
典型用法语义搜索、RAG 召回关键词检索;或做"混合检索"的另一路
稠密向量(768 维) [0.21, -0.83, 0.05, 0.44, ...] 几乎每一维都有非零值 语义整体落在连续空间 稀疏向量(词表 5 万) [0,0,0.7,0,0,...,1.2,0,...] 99% 以上位置是 0 非零位对应具体词项
图 1:稠密向量(语义、连续)与稀疏向量(关键词、离散)的形态对比

检索的本质:最近邻问题

把每条内容变成向量后,检索就退化成一个数学问题:给定查询向量 q,在 N 个候选向量里,找距离 q 最近的 k 个。这就是 k 近邻(k-NN)。

目标:argmin_{x in 候选集} distance(q, x) ,取 top-k

"距离"越小 = 越相似。常见距离/相似度见本系列《相似度度量》一篇。理论上 k-NN 可以暴力扫描所有候选求距离,但当 N 达到百万、亿级,且向量维度高达 768/1536 时,暴力扫描慢到不可接受——这正是后面 ANN(近似最近邻)要解决的。

为什么传统数据库 / LIKE 不行

一句话:传统数据库擅长"找一样的",向量检索擅长"找像的"。两者互补,不是替代。

向量检索的典型流程

① 文本/图 ② 编码模型Embedding ③ 建索引HNSW/IVF ④ 相似检索ANN top-k ⑤重排
图 2:向量检索五步——编码 → 建索引 → 检索 → (可选)重排

① 把原始内容用 Embedding 模型编码成向量;② 离线把所有向量建好索引(一次性成本);③ 查询时把 query 也编码,用索引快速找 top-k;④ 通常再接一个 Cross-Encoder 重排提升精度。RAG 就是这套流程 + 把召回文本喂给 LLM。

应用场景

记住:任何"找相似"的需求,本质上都是向量检索。它是大模型时代检索系统的底座。