当前位置:   article > 正文

Faiss的基本使用_faiss 使用

faiss 使用

1. Faiss简介

Faiss(Facebook AI Similarity Search)是一个用于高效相似性搜索和密集向量聚类的库。它包含了能够在任意大小的向量集合中进行搜索的算法,甚至适用于那些可能无法完全装入内存的数据集。此外,Faiss 还包含了评估和参数调优的支持代码。Faiss 用 C++ 编写,并为 Python/numpy 提供了完整的接口。其中一些最有用的算法实现了 GPU 支持。

Faiss 提供了多种相似性搜索方法。它假设实例以向量形式表示,并通过整数进行标识,这些向量可以通过 L2(欧几里得)距离或点积进行比较。与查询向量具有最短 L2 距离或最大点积的向量被认为是相似的。Faiss 还支持余弦相似度,因为这是在归一化向量上的点积。

GPU 实现可接受来自 CPU 或 GPU 内存的输入。在配备 GPU 的服务器上,GPU 索引可作为 CPU 索引的直接替代品使用(例如,将 IndexFlatL2 替换为 GpuIndexFlatL2),并自动处理与 GPU 内存的复制。如果输入和输出都保留在 GPU 上,结果将更快。Faiss 支持单 GPU 和多 GPU 使用。

2. Faiss的安装

安装CPU版本:

pip install faiss-cpu
  • 1

安装GPU版本(PyPI上的faiss-gpu版本较为落后,只有1.7.2):

conda install -c pytorch faiss-gpu
  • 1

建议安装1.7.4及以上的版本。其中faiss-gpu仅支持Linux系统。

3. IndexFlatL2/IndexFlatIP

3.1 Index概念

Faiss 的核心是 Index,即索引,这个概念可能听起来有些抽象。我们可以暂且认为它是一个「数据库」,我们可以通过它的 add 方法将若干个向量添加到这个数据库中,通过它的 search 方法来在数据库中检索与给定的查询向量最相似的前 k k k 个向量。

Index 中最常用的要属 IndexFlatL2IndexFlatIP 了,本节也将重点讲解这两个。

顾名思义,IndexFlatL2 是根据L2距离来衡量向量之间的相似度,两个向量之间的L2距离定义如下:

d i s ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 \mathrm{dis}(x,y)=\sqrt{\sum_{i=1}^n(x_i-y_i)^2} dis(x,y)=i=1n(xiyi)2

L2距离越短,说明两个向量之间越相似。但 IndexFlatL2 在实际计算的时候并不会开根号,因为执行开根号不仅会降低计算效率,还会降低数值稳定性。

IndexFlatIP 则是根据内积(Inner Product)来衡量向量之间的相似度,两个向量之间的内积定义如下:

d o t ( x , y ) = ∑ i = 1 n x i y i \mathrm{dot}(x,y)=\sum_{i=1}^nx_iy_i dot(x,y)=i=1nxiyi

内积越大,说明两个向量之间越相似。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/453067
推荐阅读
相关标签