Faiss 学习 --- Faster search

Faster search

This is too slow, how can I make it faster?

  为了加快搜索速度,可以将数据集分割成多个片段。我们在d维空间中定义Voronoi细胞,每个数据库向量都属于其中一个细胞。在搜索时,只有查询x所在的单元格中包含的数据库向量y,并将一些邻近的数据库向量与查询向量进行比较。

  这是通过IndexIVFFlat索引完成的。这种类型的索引需要一个训练阶段,可以在与数据库向量具有相同分布的任何向量集合上执行这个阶段。在这种情况下,我们只使用数据库向量本身。

  IndexIVFFlat还需要另一个索引,即量化器,它将向量分配给Voronoi细胞。每个细胞由一个质心定义,找到向量所在的Voronoi细胞就是找到向量在质心集合中最近的邻居。这是另一个索引的任务,该索引通常是IndexFlatL2。

  搜索方法有两个参数:nlist,即单元格的数量,nprobe,即执行搜索时访问的单元格(在nlist之外)的数量。由于量子化,搜索时间随探针数加上某个常数大致线性增加。

posted @ 2021-11-26 09:19  神龙逗勇士  阅读(56)  评论(0编辑  收藏  举报