资讯

最近邻搜索是什么?在一大堆数据里找出最像的那个

2026-11-052 分钟阅读百科
TL;DR最近邻搜索(NNS)是在数据集中查找与给定查询点距离最近的点或点集的算法问题,是 k 近邻算法、推荐系统、图像检索和向量数据库的核心,大规模场景下常用近似最近邻(ANN)算法提速。

最近邻搜索(Nearest Neighbor Search,NNS)是在数据集中找出与查询点“最近”的点的问题。这里的“近”由某种距离或相似度来衡量,比如欧氏距离、余弦相似度。给定一张图片,在图库里找出最相似的几张;给定一首歌,找出风格最接近的歌;给定一个用户,找出兴趣最相近的其他用户,这些都是最近邻搜索。

用在哪里

最近邻搜索在很多领域都非常重要。在机器学习中,它是 k 近邻(k-NN)算法的核心:要判断一个未知样本属于哪一类,就找出和它最相似的 k 个训练样本,看它们大多属于哪一类。在计算机视觉中,它被用于特征匹配和物体识别,比如在两张图片之间找出对应的特征点。在推荐系统中,用来找相似的商品和用户。在地理信息系统中,用来查找离某个位置最近的餐厅、加油站。如今最重要的应用之一是语义检索和检索增强生成(RAG):把文档转换成嵌入向量后,用户的问题也转成向量,在向量库里找出最接近的几个文档,交给大模型参考。向量数据库的核心功能就是高效的最近邻搜索。

精确搜索太慢

最直接的方法是暴力搜索:把查询点和数据集中的每一个点都算一遍距离,再挑出最小的。数据少的时候这没问题,但当数据有几亿、几十亿条,每条又是几百上千维的向量时,每次查询都算一遍,速度慢得无法接受。在高维空间中,传统的空间索引结构,比如 KD 树,效果也会急剧下降,这被称为“维度灾难”。

近似最近邻

因此,大规模场景下通常使用近似最近邻(ANN)搜索:不保证每次都找到绝对最近的那个,但能以很高的概率找到非常接近的结果,同时速度快几个数量级。常见的方法包括:基于图的方法,比如 HNSW,把数据组织成一张多层的“邻居网络”,沿着网络快速逼近目标;基于量化的方法,比如乘积量化,把向量压缩成很短的编码,大幅减少计算和存储;基于聚类分桶的方法,比如 IVF,先找到查询可能落在的几个簇,只在这些簇里搜索;以及局部敏感哈希等。Faiss、HNSWlib 等开源库让这些方法得到了广泛应用。