头图

Milvus 的高效向量检索能力是通过多种算法和数据结构实现的,主要包括以下方面:

索引算法:

IVF(Inverted File):

倒排文件索引,将向量数据划分为多个簇(clusters)。

在搜索时,先比较目标输入向量与每个簇中心之间的距离,确定最相关的几个簇,然后只在这些簇内进行搜索。这样可以大大减少搜索的范围,提高查询效率。通过调整相关参数,如聚类簇的数量(nlist)和检索簇的数量(nprobe),可以在给定场景下找到精度和速度之间的理想平衡

HNSW(Hierarchical Navigable Small World):

一种基于图的索引算法。

它构建了一个多层导航结构,上层更稀疏,节点之间的距离更远;下层更密集,节点之间的距离更近。搜索从最上层开始,找到该层中最靠近目标的节点,然后进入下一层开始另一次搜索。经过多次迭代,可以快速接近目标位置。这种算法在保证高查询效率的同时,也能保证较高的精度,但构建和维护图结构的成本较高,内存消耗也相对较大25。

PQ(Product Quantization):

乘积量化算法,将原始高维向量空间分解为多个低维向量空间的笛卡尔积,然后对分解后的低维向量空间进行量化。

在量化向量的乘积之前执行 IVF 索引聚类。这种方式可以大大降低算法的时间复杂度和空间复杂度,其索引文件的大小也会进一步减小,但会导致一定程度的搜索精度损失24。

数据结构:

分布式数据存储:

Milvus 采用分布式架构,可以将数据分散存储在多个节点上,实现水平扩展。这样可以处理大规模的向量数据,并且通过并行计算提高检索的速度和吞吐量。同时,分布式架构还可以提高系统的可用性和容错性,即使部分节点出现故障,系统仍然能够正常运行

内存存储与磁盘存储结合:

Milvus 支持将数据存储在内存和磁盘中,根据数据的使用频率和访问模式进行合理的存储管理。对于经常访问的数据,可以缓存在内存中,以提高访问速度;对于不经常访问的数据,可以存储在磁盘中,以节省内存空间。

通过内存映射文件(mmap)等技术,可以将标量和向量数据 / 索引加载到磁盘,与传统的内存索引相比,可以实现较高的内存节省。

相似度计算方法:

欧氏距离:

计算两个向量在多维空间中的直线距离,是一种直观的距离度量方法。在 Milvus 中,欧氏距离常用于图像、音频等领域的向量相似度计算。

余弦相似度:

通过计算两个向量夹角的余弦值来衡量它们的相似度,取值范围在 (-1, 1) 之间,值越大,向量越相似。在自然语言处理等领域,余弦相似度是一种常用的向量相似度计算方法。

内积:

直接计算两个向量的点积,是向量相似度计算中最简单的一种方法。内积的计算速度较快,在一些对实时性要求较高的场景中应用广泛。


Yujiaao
12.7k 声望4.7k 粉丝

[链接]


引用和评论

0 条评论