IVF (Inverted File)索引的基本原理是将向量数据集划分为多个子集,每个子集称为一个聚类中心或一个簇。每个簇都有一个代表性的向量,称为聚类中心向量。通过构建一个倒排表,将聚类中心向量与属于该簇的向量进行关联。 在进行搜索时,首先根据查询向量找到与之最相似的聚类中心向量,然后在该聚类中心对应的倒排表中查找...
在实际使用的时候,IVF_PQ 这种索引方法预先计算好的各个聚类中心间的距离,通过查找表得出两个向量索引值的距离,来近似替代两个向量的真实距离,这种方法加快了计算速度;在使用中可以通过参数 m 的设置,使得向量压缩成很小的比例,也大量减少了内存占用(约为向量原始空间大小的 5%~10%)。下图为 IVF_PQ 索引压缩示例...
IVF_PQ索引 索引IndexFlatL2和IndexIVFFlat存储完整的向量。为了扩展到非常大的数据集,Faiss 提供了基于乘积量化的有损压缩来压缩存储的向量的变体。 压缩基于Product Quantizer,应用于要编码的向量的子向量。 Product Quantization是一种有效的量化方法,它通过将高维向量切分为若干子向量,然后分别对子向量进行量化,最终将...
量化索引 为了更好理解实时相似性查询,我们先来简单回顾一下基于乘积量化的向量索引(IVFPQ)。在索引构建过程中,数据库的向量通过 k-mean 算法分出 n 个聚类(IVF),然后对每个数据库向量进行分段,划分出 m …
其中,IVF_PQ 是基于 IVF_FLAT 的一种向量数据有损压缩算法( PQ 乘积量化),具有高速查询磁盘、内存占用极低等特点,符合“侦图”产品的应用场景; 同时,我们将最佳的搜索参数设置为: search_params = {"metric_type": "IP", "params": {"nprobe": 32}} ...
IVF_FLAT:基于倒排索引和线性扫描的简单方法,适用于小型数据集或低查询频率的场景。它将数据分成多个簇并按簇进行搜索,适用于需要精准查询的场景。 IVF_PQ:结合倒排索引和产品量化(Product Quantization)技术,通过对每个簇内部的向量进行量化来减少存储需求和提高查询效率,适用于大规模数据集和近似最近邻(ANN)查询。
ScaNN算法的基础是IVF_PQ。 IVF就是通过kmeans聚类将数据分成若干个bucket,搜索时query向量和聚类中心的距离排序,选择nprobe个bucket进行计算即可。 ScaNN针对IVFPQ两点做了优化: 量化的时候选择kmeans聚类中心来代替subvector的方式,是否有更好的方式 搜索时的查表操作是一个内存瓶颈的事情,是否可以更高效 ...
在查询时,PQ 使用量化后的代码进行向量相似度计算,从而加速搜索过程。 参数: m:表示将每个向量拆分成多少个子向量。m越大,精度越高,但存储需求和计算开销也越大。 nlist:与 IVF 索引一样,表示分桶的数量。 优缺点: 优点:可以显著减少存储和计算开销,适用于内存受限的环境。
IVFPQ索引在IVFFlat基础上采用乘积量化技术。 乘积量化将向量划分成多个子向量进行量化编码。这样能有效减少存储开销并保持一定检索性能。HNSW索引是基于图结构的索引类型。它通过构建分层图结构来加速向量的查找。HNSW索引在高维向量数据上表现良好。ANNOY索引基于二叉树结构实现快速近似最近邻搜索。它将向量空间划分成多个...
向量索引:Milvus采用了多种向量索引结构,如IVF-PQ(产品量化)、FBitVector等,以便在高效地存储和检索大规模向量数据。 查询处理:Milvus支持高效地处理各种类型的查询请求,如精确查询、模糊查询和范围查询等。 结果排序:在返回查询结果时,Milvus可根据用户设定的排序规则对匹配的向量进行排序。 二、技术详解 Milvus在实现...