知识点深化 · 向量检索
向量检索与相似度:余弦、点积与 Faiss/Milvus/HNSW
万物皆可向量。怎么在百万向量里 0.01 秒找到最像的那几个?这一页讲透余弦/点积/欧氏/汉明距离的区别,以及 Faiss、Milvus、HNSW 这些工具如何用「近似最近邻」把检索提速几个数量级。
① 小白第一课怎么学(4 步走,约 60 分钟)
万物皆可向量。怎么在百万向量里 0.01 秒找到最像的那几个?
1建立直觉(10 分钟)
读②③:相似度就是"两个向量离多近",距离越近越像。
2记公式与工具(15 分钟)
读④:余弦/点积/欧氏/汉明距离,Faiss/Milvus/HNSW。
3手算例题(20 分钟)
精读⑤,亲手算一次余弦相似度。
4刷题纠错(15 分钟)
做⑦⑩,错题回⑥。
本课小目标学完你要能:① 手算余弦相似度;② 说清余弦和点积的区别;③ 知道 HNSW 这类近似索引为什么快。
② 一图看懂:向量检索体系
读法:先选"怎么算像不像"(距离公式),再选"怎么在海量向量里快速找"(索引/向量库)。
③ 本质直觉:距离就是"像不像"
每段话被 Embedding 模型变成一串数字(向量)。意思相近的两段话,向量在空间里挨得近。
余弦相似度看的是两个向量的夹角:方向一致就相似,不管长度。夹角 0° 时为 1(最像),反方向为 -1。
点积= 余弦×两个长度。如果向量都做了归一化(长度=1),点积就等于余弦。所以"归一化后用点积"很常见。
为什么不暴力全算?一百万条向量每条 768 维,每次查询都全比要算 768 万次乘法,太慢。HNSW 这类近似最近邻用图结构,只比少数几个候选就找到大概最近的,快几个数量级。
近似换速度HNSW 不保证找到绝对最近的,但在极短时间内找到非常接近的几个,工程上完全够用。
④ 完整体系:距离公式与索引对照
余弦相似度
cos(a,b) = (a·b) / (|a|·|b|) ∈ [−1,1],越接近 1 越相似
欧氏距离(直线距离)
d(a,b) = √( Σ(ai−bi)² ),越小越近
| 距离/相似度 | 看什么 | 适用 |
| 余弦 | 方向夹角(不管长度) | 文本语义相似度最常用 |
| 点积 | 方向×长度 | 归一化后等价于余弦 |
| 欧氏 | 直线距离 | 图像/特征空间 |
| 汉明 | 二进制不同位数 | 二值向量,极快 |
索引/工具
| 名称 | 是什么 | 特点 |
| Faiss | Meta 的向量检索库 | 库级、快、适合研究/单机 |
| 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语义相近的两段话,向量在空间里?
挨得近。
基础3余弦看方向还是看长度?
看方向夹角,不管长度。
基础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总览