精确向量搜索和近似向量搜索是两种在数据集中查找相似向量的方法,每种方法在准确性、速度和可扩展性方面都有不同的权衡。 精确向量搜索通过将查询向量与数据集中的每个向量进行比较来保证精确的结果,从而确保不会遗漏任何匹配项。 另一方面,近似向量搜索优先考虑速度和效率,使用减少比较次数的技术,以接受较小的误差来换取更快的结果。 它们之间的选择取决于用例——当准确性至关重要时,精确方法是理想的,而近似方法适用于速度和可扩展性比完美精度更重要的应用。
精确向量搜索方法,例如暴力 k 近邻 (k-NN),计算查询向量与数据集中每个向量之间的距离(例如,欧几里得距离或余弦距离)。 这确保了返回的结果是尽可能最接近的匹配项。 例如,在一个包含 1,000 个产品嵌入的小数据集中,暴力搜索将计算 1,000 个距离来按相似度对产品进行排名。 然而,随着数据集的增长,这种方法在计算上变得昂贵。 包含 1000 万个向量的数据集将需要每次查询进行 1000 万次距离计算,从而导致高延迟和资源使用。 精确方法通常用于对准确性不可协商的场景,例如验证近似搜索系统的结果或分析延迟不是问题的静态小数据集。
近似向量搜索通过使用诸如哈希、图遍历或量化之类的技术来缩小候选向量的范围,从而避免了详尽的比较。 例如,分层可导航小世界 (HNSW) 等算法会创建互连向量的网络,允许搜索“跳”过该图来查找邻居,而无需检查每个向量。 同样,FAISS 等库使用聚类来对相似向量进行分组,并仅在相关聚类中进行搜索。 虽然这些方法即使对于数十亿规模的数据集也能在几毫秒内返回结果,但它们可能会遗漏一些真正的最近邻居。 例如,使用近似搜索的推荐系统可能会返回 95% 的理想匹配项,但会省略 5% 以实现实时性能。 近似方法广泛应用于生产系统,如搜索引擎、欺诈检测或实时推荐,在这些系统中,亚秒级响应时间至关重要,并且可以接受较小的误差。