← 返回算法与AI总览 算法与AI · 知识点深化 · 向量检索与相似度:余弦、点积与 Faiss/Milvus/HNSW
知识点深化 · 向量检索

向量检索与相似度:余弦、点积与 Faiss/Milvus/HNSW

万物皆可向量。怎么在百万向量里 0.01 秒找到最像的那几个?这一页讲透余弦/点积/欧氏/汉明距离的区别,以及 Faiss、Milvus、HNSW 这些工具如何用「近似最近邻」把检索提速几个数量级。

① 小白第一课怎么学(4 步走,约 60 分钟)

万物皆可向量。怎么在百万向量里 0.01 秒找到最像的那几个?

1建立直觉(10 分钟)
读②③:相似度就是"两个向量离多近",距离越近越像。
2记公式与工具(15 分钟)
读④:余弦/点积/欧氏/汉明距离,Faiss/Milvus/HNSW。
3手算例题(20 分钟)
精读⑤,亲手算一次余弦相似度。
4刷题纠错(15 分钟)
做⑦⑩,错题回⑥。
本课小目标学完你要能:① 手算余弦相似度;② 说清余弦和点积的区别;③ 知道 HNSW 这类近似索引为什么快。

② 一图看懂:向量检索体系

向量检索 余弦相似度 看方向夹角 点积/欧氏 点积含长度;欧氏看距离 精确 vs 近似 暴力 vs HNSW 向量库 Faiss/Milvus 应用:搜索/推荐/RAG 找最近邻 易错:不归一化 长度影响点积
读法:先选"怎么算像不像"(距离公式),再选"怎么在海量向量里快速找"(索引/向量库)。

③ 本质直觉:距离就是"像不像"

每段话被 Embedding 模型变成一串数字(向量)。意思相近的两段话,向量在空间里挨得近。

余弦相似度看的是两个向量的夹角:方向一致就相似,不管长度。夹角 0° 时为 1(最像),反方向为 -1。

点积= 余弦×两个长度。如果向量都做了归一化(长度=1),点积就等于余弦。所以"归一化后用点积"很常见。

为什么不暴力全算?一百万条向量每条 768 维,每次查询都全比要算 768 万次乘法,太慢。HNSW 这类近似最近邻用图结构,只比少数几个候选就找到大概最近的,快几个数量级。

夹角小≈相似
近似换速度HNSW 不保证找到绝对最近的,但在极短时间内找到非常接近的几个,工程上完全够用。

④ 完整体系:距离公式与索引对照

余弦相似度 cos(a,b) = (a·b) / (|a|·|b|)  ∈ [−1,1],越接近 1 越相似
欧氏距离(直线距离) d(a,b) = √( Σ(ai−bi)² ),越小越近
距离/相似度看什么适用
余弦方向夹角(不管长度)文本语义相似度最常用
点积方向×长度归一化后等价于余弦
欧氏直线距离图像/特征空间
汉明二进制不同位数二值向量,极快

索引/工具

名称是什么特点
FaissMeta 的向量检索库库级、快、适合研究/单机
Milvus开源向量数据库服务化、可扩展、生产级
HNSW图结构近似索引查询快、内存占用略高
归一化很关键比较文本相似度时通常先把向量归一化,这样点积=余弦,避免向量长度干扰。

⑤ 用法场景与典型例题

例1(手算余弦)a=(1,0),b=(1,1),cos(a,b)=?
套公式:点积除以模长乘积。
① a·b = 1×1+0×1 = 1。
② |a|=1;|b|=√(1+1)=√2。
③ cos = 1/(1×√2) = 1/1.414 ≈ 0.707。夹角 45°,比较相似。
例2(余弦 vs 点积)两个向量方向相同,但一个长度是另一个 3 倍,余弦怎么变?
余弦只看方向。
① 方向相同夹角为 0。
② 余弦 = 1,和长度无关。
③ 但点积会变大(=余弦×长度乘积)。
答案:余弦不变仍为 1;点积受长度影响。
例3(为什么用 HNSW)一百万向量暴力查询为何慢?
每次全量比较。
① 暴力要和每条都算距离,百万级×高维,延迟高。
② HNSW 通过图结构只探索少量候选。
答案:近似索引用少量比较换巨大提速。
Top-K检索返回最相似的 K 个结果,是搜索/RAG 的标准输出。

⑥ 高频错误诊断(4 条)

错误 1:不做归一化就用点积比文本相似度长句子向量长度大,会被误判为更"相似"。先归一化,或直接用余弦。
错误 2:混淆"距离小"和"相似度大"欧氏距离越小越近;余弦越大越像。方向别记反。
错误 3:以为近似索引一定 100% 找到最近HNSW 是近似,偶尔漏掉真最近邻,可通过调参数平衡召回率和速度。
错误 4:维度/模型不匹配硬比不同 Embedding 模型产出的向量不能直接比,必须同一套模型。

⑦ 考点真题演练(4 题)

考点分布

考法出题形式应对
余弦手算给两个向量算相似度点积除模长乘积
余弦 vs 点积长度影响谁余弦不管长度
索引问 HNSW/Faiss 作用近似最近邻,加速

真题基础1. 余弦相似度的取值范围是?

真题中档2. a=(1,0),b=(1,1),cos(a,b) 约为?

真题中档3. 两个向量方向相同、长度差 3 倍,余弦相似度?

真题拔高4. HNSW 这类近似最近邻索引的价值是?

⑧ 必背知识点卡

本质:意思近则向量近,用距离衡量相似度 最近邻
余弦:cos=(a·b)/(|a||b|),[-1,1],越大越像 看方向
点积:余弦×长度乘积,归一化后=余弦 含长度
欧氏:√Σ(aᵢ−bᵢ)²,越小越近 直线距离
汉明:二进制不同位数,二值向量快 比特比较
索引:HNSW 图结构近似最近邻,Faiss/Milvus 换速度
铁律:同模型才能比;文本先归一化 别跨模型

⑨ 应用输出:搭建一个语义搜索库

实战场景:在商品标题里语义搜索
① 建库:用同一 Embedding 模型把每个商品标题编码成 768 维向量。
② 归一化:把向量归一化,后续点积=余弦。
③ 入库:存入 Milvus,建 HNSW 索引。
④ 查询:用户输入"降噪耳机"也编码成向量,检索 Top-K 最相近的商品。
⑤ 调参:若召回不够准,调 HNSW 参数平衡速度与召回率。
口述"相似度就是两个向量像不像,文本用余弦、看方向不看长度;海量向量用 HNSW 近似索引快速找最近邻,Faiss/Milvus 是常用工具。"

⑩ 分层练习 16 题(基础 6 + 中档 5 + 拔高 5)

▍基础 6 题

基础1语义相近的两段话,向量在空间里?
挨得近。
基础2余弦相似度范围?
[-1,1]。
基础3余弦看方向还是看长度?
看方向夹角,不管长度。
基础4归一化后点积等于什么?
等于余弦相似度。
基础5Faiss 是什么?
向量检索库。
基础6HNSW 解决什么?
海量向量的近似快速检索。

▍中档 5 题

中档7向量 a=(3,4),模长是多少?
√(9+16)=√25=5。
中档8欧氏距离越小代表?
两个向量越近、越相似。
中档9为什么文本检索常归一化?
消除向量长度影响,让点积等价于方向相似度。
中档10Milvus 和 Faiss 的区别?
Faiss 是库;Milvus 是服务化向量数据库,更生产级。
中档11汉明距离用于什么向量?
二进制/二值向量,比不同比特位数。

▍拔高 5 题

拔高12为什么不同 Embedding 模型的向量不能直接比?
各模型坐标系不同,距离没有可比性。
拔高13近似索引为何可能漏掉真最近邻?
它只探索部分候选,用精度换速度;可调参数提高召回。
拔高14余弦为 0 说明什么?
两向量正交、方向无关,语义上基本不相关。
拔高15Top-K 在 RAG 里指什么?
返回最相似的 K 个文档块喂给大模型。
拔高16高维向量的"维度灾难"对检索意味着什么?
高维下所有点距离都差不多,区分度下降,更依赖好索引和归一化。

⑪ 记忆口诀 + 7 天复习计划

三句口诀 ① 语义近则向量近,距离衡量相似度。
② 余弦看方向不管长度,归一化后点积等于余弦。
③ 海量向量用 HNSW 近似索引,Faiss/Milvus 来装。
天任务自检
第 1 天读②③④,背余弦公式说清余弦看什么
第 2 天背知识点卡 + 基础 1-6基础全对
第 3 天做中档 7-11,手算余弦算对 a=(1,0),b=(1,1)
第 4 天做拔高 12-16懂近似索引取舍
第 5 天做⑦真题 4 题限时每题 2 分钟
第 6-7 天合上书口述距离与索引不看资料全说对

← 返回算法与AI总览