赞
踩
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 使用。
安装CPU版本:
pip install faiss-cpu
安装GPU版本(PyPI上的faiss-gpu版本较为落后,只有1.7.2):
conda install -c pytorch faiss-gpu
建议安装1.7.4及以上的版本。其中faiss-gpu仅支持Linux系统。
Faiss 的核心是 Index
,即索引,这个概念可能听起来有些抽象。我们可以暂且认为它是一个「数据库」,我们可以通过它的 add
方法将若干个向量添加到这个数据库中,通过它的 search
方法来在数据库中检索与给定的查询向量最相似的前
k
k
k 个向量。
Index
中最常用的要属 IndexFlatL2
和 IndexFlatIP
了,本节也将重点讲解这两个。
顾名思义,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=1∑n(xi−yi)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=1∑nxiyi
内积越大,说明两个向量之间越相似。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/453067
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。