近似最近邻 (ANN) 搜索是一种用于高效地在数据集中找到与给定查询相似的项目技术。与精确最近邻搜索不同,后者通过将查询与每个项目进行比较来保证精确结果,ANN 优先考虑速度而非完美准确性。这种权衡使得 ANN 适用于大规模应用,在这些应用中,精确方法会太慢或计算成本太高。例如,在一个包含数百万高维向量(如图像嵌入或文本表示)的数据集中,ANN 算法可以快速返回“足够好”的匹配,而无需穷举检查每一种可能性。
ANN 通过将数据组织成允许更快、近似比较的结构来工作。常见的方法包括哈希、基于树的划分或基于图的遍历。例如,局部敏感哈希 (LSH) 将相似的项目映射到哈希表中的相同“桶”中,从而减少搜索空间。另一种方法,例如 Annoy 库,构建二叉树森林来划分数据,从而实现对数时间查找。基于图的算法,如分层可导航小世界 (HNSW),创建分层图,其中节点代表数据点,允许高效遍历到附近邻居。这些方法都旨在最小化所需的比较次数,同时保持合理的准确性。
开发者在推荐系统、语义搜索或图像检索等应用中使用 ANN。例如,音乐流媒体服务可能会使用 ANN 从数百万首曲库中找到具有相似音频特征的歌曲。在实现 ANN 时,关键考虑因素包括平衡速度、内存使用和结果质量。Facebook 的 FAISS、Spotify 的 Annoy 或 Google 的 ScaNN 等工具针对不同场景提供了优化的实现。选择合适的算法取决于数据集大小、维度和查询延迟要求等因素。虽然 ANN 会引入一些误差,但性能提升通常大于精度上的微小损失,尤其是在计算精确结果不切实际的情况下。