faiss相似性搜索

本文介绍了如何安装gfortran和OpenBLAS,以及Faiss库的索引类型(精确索引、倒排索引和乘积量化索引),以Deep1B数据集为例,详细对比了不同索引类型的性能。作者指出,新架构GPU如NvidiaP100显著提高了查询速度。
摘要由CSDN通过智能技术生成

1、安装组件

2、索引类型:

a、IndexFlatL2(精确索引):

  • 精确索引通过遍历计算来查询向量与被查询向量的L2精确距离,在构建索引时需提供向量维数作为参数(不需要训练操作),构建完成后可以通过add添加数据和search查询数据;

b、IndexIVFFlat(倒排索引):

  • 倒排索引需要对数据做预处理来提高索引效率,将数据库向量通过聚类方法分割成若干类,查询时选择距离最近的类中心,在类中采用精确方法查询,通过增加相邻类查询来提高精确度;
  • nlist参数控制将数据集向量聚类的总数,nprobe参数控制在多少个类范围内进行查询,伴随nprobe参数值增加,精度值增加,同时时间开销增加,当nprobe=nlist时,与IndexFlatL2索引等效;

c、IndexIVFPQ(乘积量化索引):

  • 当数据量非常大超出内存限制时,采用乘积量化方法保存原始向量的有损压缩形式,创建索引的时候需要指定量化器的个数与每个量化器编码字节长度;
  • 在查询阶段返回的结果是近似值,实验显示,乘积量化后查询返回的距离值与真实值相比偏小,此外,索引的初始化过程的耗时也比较久一些;

3、索引样例:

        (图片丢失)

4、性能对比:

  • 索引创建:

  • 索引查询:

5、官方性能:

  • Deep1B 数据集上测试,30%的1-recall@1,在每向量0.5ms左右的时间,40%的1-recall@1,少于每向量2ms的检索时间,以2ms的检索时间计算,单核可达到500 QPS;
  • 与业内最先进的研究相比,Babenko 和 Lempitsky 在 CVPR 2016 上发表的论文:“Efficient Indexing of Billion-Scale Datasets of Deep Deors”显示需要 20 ms 来获取 45% 的 1-recall@1
  • 单个 GPU 的速度一般比 CPU 快五到十倍,新的帕斯卡架构 GPU 硬件,比如英伟达 P100,快 20 倍有余;

faiss是一个用于高效相似性搜索和聚类的库,它是由Facebook AI研究院开发的。它提供了一种快速的索引技术,可以在大规模数据集上进行快速的相似性搜索。在中文语义搜索方面,我们可以通过以下步骤在Python中使用faiss进行中文语义搜索: 1. 准备数据: 首先,我们需要准备中文文本数据。这些数据可以是一系列的中文句子、段落或文档。可以从文件中读取数据,也可以从数据库或API获取。 2. 中文文本处理: 在将中文文本传递给faiss之前,我们需要进行文本处理。这包括分词、去除停用词、词干提取等。常用的中文分词工具有jieba、pkuseg等。你可以选择适合你项目需求的分词工具,并根据自己的需求进行预处理。 3. 特征提取: 接下来,我们需要将文本转化成特征向量。在中文语义搜索中,常用的方法是使用词嵌入技术,如Word2Vec、FastText、BERT等。这些词嵌入模型可以将文本转化为稠密向量表示,捕捉到词语之间的语义关系。 4. 索引构建: 使用faiss中提供的索引方法(如Flat、IVF等),将特征向量构建成索引结构。这样可以加速相似性搜索过程。 5. 相似性搜索: 一旦索引构建完成,我们可以使用faiss提供的查询方法在中文语义空间中进行搜索。我们可以将查询文本的特征向量传递给faiss,它将返回与查询文本最相似的文本。 总之,faiss在中文语义搜索中提供了一种高效的解决方案。通过合理的数据准备、文本处理、特征提取和索引构建,我们可以利用faiss快速找到与查询文本相关的中文文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值