向量:RAG 检索是在「找最近的邻居」
Embedding 把语义变成坐标,相似度就是距离。在平面上拖动查询点看最近邻怎么变,再看 HNSW 为什么能在亿级向量里瞬间找到
本页解决的问题
先给结论「向量:RAG 检索是在「找最近的邻居」」要解决的关键问题是什么?
Embedding 把语义变成坐标,相似度就是距离。在平面上拖动查询点看最近邻怎么变,再看 HNSW 为什么能在亿级向量里瞬间找到
让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。
写下一个问题:试完这个方法后,你能用什么证据回答它?
结论听起来很完整,却没有检查最关键的假设。
下面是一张迷你语义地图:12 个词已经被 Embedding 安排好了座位,自然聚成三个「街区」。拖动黑色的 ❓ 查询点(或点击地图任意位置放置它),留意:连线永远指向最近的 3 个词,距离实时变化,最近的那个戴 👑。把 ❓ 拖到两个街区中间,看看邻居怎么换人。
找最近的邻居,最笨的办法是把每个点都量一遍距离。60 个点无所谓,可 RAG 知识库动辄百万段、推荐系统动辄十亿条。下面同一张地图撒了 60 个点,🌟 是你的查询。先点「挨个算」数一数要几步,再点「HNSW 分层跳」对比——留意蓝色跳跃线是怎么「先大跳、再小跳」的。
RAG 检索
问题和资料都变坐标,找最近的几段资料塞给大模型——你每天用的「基于知识库回答」,底层就是本页这两个动画。
以图搜图
图片也能 Embedding 成坐标。拍张沙发照片搜同款,就是在几亿张图的语义地图上找你照片的邻居。
猜你喜欢
你的口味是一个坐标,每首歌每部剧也是。推荐系统天天在做的事:找离你最近的那批内容,端上来。
「先玩地图 · 语义相近 = 坐标相邻」为什么能找到相关内容
「下面是一张迷你语义地图:12 个词已经被 Embedding 安排好了座位,自然聚成三个「街区」。」把检索问题从“把资料存起来”推进到“怎样找到真正相关的资料”。这一步决定了 RAG、推荐和以图搜图最后交给模型的输入质量。
相似度不是答案,召回之后还要核对
在「找最近的邻居,最笨的办法是把每个点都量一遍距离。60 个点无所谓,可 RAG 知识库动辄百万段、推荐系统动辄十亿条。下面同一张地图撒了 60 个点,🌟 是你的查询。」对应的流程里,Embedding 负责把对象放到可比较的语义空间,近邻索引负责减少搜索范围,最终的回答仍然依赖召回片段是否覆盖问题、距离指标是否合适,以及内容有没有过期。
- 语义变坐标 :Embedding 给每句话、每张图发一个高维地图上的位置
- 相似变距离 :意思越近坐标越近——「语义搜索」四个字的全部原理
- 检索变找邻居 :RAG、以图搜图、猜你喜欢,全是同一个「近邻搜索」问题
先区分找得到和找得准
把「你的口味是一个坐标,每首歌每部剧也是。推荐系统天天在做的事: 找离你最近的那批内容 ,端上来」落成一次小测试:准备几条有明确答案的查询,记录召回的相关性、遗漏和无关结果,再决定是否需要换切分方式、索引或重排。
从「先玩地图 · 语义相近 = 坐标相邻」走到「再看速度 · 挨个算 vs 修高速公路」
「先玩地图 · 语义相近 = 坐标相邻」先把问题落在「下面是一张迷你语义地图:12 个词已经被 Embedding 安排好了座位,自然聚成三个「街区」。 拖动黑色的 ❓ 查询点 (或点击地图任意位置放置它),留意:连线永远指向 最近的 3 个词 ,距离实时变化,最近的那个戴 👑。把 ❓ 拖到两个街区中间,看看邻居怎么换人」上;到了「再看速度 · 挨个算 vs 修高速公路」,讨论继续推进到「找最近的邻居,最笨的办法是把每个点都量一遍距离。60 个点无所谓,可 RAG 知识库动辄百万段、推荐系统动辄十亿条。下面同一张地图撒了 60 个点,🌟 是你的查询。 先点「挨个算」数一数要几步,再点「HNSW 分层跳」对比 ——留意蓝色跳跃线是怎么「先大跳、再小跳」的」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。
把这条判断带到下一个场景
检索系统也可以这样看:先确定什么算相关,再观察召回是否覆盖问题,最后检查排序、切分和时效性有没有把真正有用的内容挤出去。
- 「先玩地图 · 语义相近 = 坐标相邻」:下面是一张迷你语义地图:12 个词已经被 Embedding 安排好了座位,自然聚成三个「街区」。 拖动黑色的 ❓ 查询点 (或点击地图任意位置放置它),留意:连线永远指向 最近的 3 个词 ,距离实时变化,最近的那个戴 👑。把 ❓ 拖到两个街区中间,看看邻居怎么换人
- 「再看速度 · 挨个算 vs 修高速公路」:找最近的邻居,最笨的办法是把每个点都量一遍距离。60 个点无所谓,可 RAG 知识库动辄百万段、推荐系统动辄十亿条。下面同一张地图撒了 60 个点,🌟 是你的查询。 先点「挨个算」数一数要几步,再点「HNSW 分层跳」对比 ——留意蓝色跳跃线是怎么「先大跳、再小跳」的
- 「最后的要点」:又是空间换时间 :多花存储建捷径图,换检索从分钟级降到毫秒级
最后的「最后的要点」把讨论落到「又是空间换时间 :多花存储建捷径图,换检索从分钟级降到毫秒级」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。
✅ 这一课想和你分享的
- 语义变坐标:Embedding 给每句话、每张图发一个高维地图上的位置
- 相似变距离:意思越近坐标越近——「语义搜索」四个字的全部原理
- 检索变找邻居:RAG、以图搜图、猜你喜欢,全是同一个「近邻搜索」问题
- 快靠分层捷径:HNSW 多存几层稀疏「高速公路」,亿级数据几十步到达
- 又是空间换时间:多花存储建捷径图,换检索从分钟级降到毫秒级
我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。
读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。
如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。
还没有这篇文章的讨论。