FAISS

Faiss in python and GPU报错:NotImplementedError: Wrong number or type of arguments for overloaded f...

末鹿安然 提交于 2020-05-07 18:37:59
最近在玩faiss,运行这段代码的时候报错了: res = faiss.StandardGpuResources() flat_config = 0 index = faiss.GpuIndexFlatL2(res,d,flat_config) 报错内容见上: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "swigfaiss_gpu.py", line 2958, in __init__ this = _swigfaiss_gpu.new_GpuIndexFlatL2(*args) NotImplementedError: Wrong number or type of arguments for overloaded function 'new_GpuIndexFlatL2'. Possible C/C++ prototypes are: faiss::gpu::GpuIndexFlatL2::GpuIndexFlatL2(faiss::gpu::GpuResources *,faiss::IndexFlatL2 *,faiss::gpu::GpuIndexFlatConfig) faiss::gpu::GpuIndexFlatL2::GpuIndexFlatL2

IndexFlatL2、IndexIVFFlat、IndexIVFPQ三种索引方式示例

谁说我不能喝 提交于 2020-05-07 18:35:54
  上文针对Faiss安装和一些原理做了简单说明,本文针对标题所列三种索引方式进行编码验证。   首先生成数据集,这里采用100万条数据,每条50维,生成数据做本地化保存,代码如下: import numpy as np # 构造数据 import time d = 50 # dimension nb = 1000000 # database size # nq = 1000000 # nb of queries np.random.seed(1234) # make reproducible xb = np.random.random((nb, d)).astype( ' float32 ' ) xb[:, 0] += np.arange(nb) / 1000 . # xq = np.random.random((nq, d)).astype('float32') # xq[:, 0] += np.arange(nq) / 1000. print (xb[:1 ]) # 写入文件中 # file = open('data.txt', 'w') np.savetxt( ' data.txt ' , xb)   在上述训练集的基础上,做自身查询,即本身即是Faiss的训练集也是查寻集,三个索引的查询方式在一个文件内,如下示例代码: import numpy as np import

浅析Faiss在推荐系统中的应用及原理

。_饼干妹妹 提交于 2020-05-06 14:28:39
之前在业务中应用了许多Faiss,也看了几篇关于Faiss的论文,简单记录下Faiss的一些属性和应用。Faiss是Facebook的AI团队开源的一套用于做聚类或者相似性搜索的软件库,底层是用C++实现。Faiss因为超级优越的性能,被广泛应用于推荐相关的业务当中。接下来分Faiss在推荐业务应用和Faiss的基本原理两部分进行介绍。 1 Faiss在推荐业务中的应用 在我的认知里,基本上50%以上的手机APP的推荐业务会应用到Faiss服务,可见应用之广。那Faiss究竟是在哪个模块使用呢,通过下方这个图给大家介绍: 大家都知道推荐业务包含排序和召回两个模块,Faiss比较多的应用在召回模块。召回业务中有很多是向量生成类的算法,比如Graph Embedding、ALS Embedding、FM Embedding等。ALS就是经典的矩阵分解算法,它可以将User和Item的行为数据利用矩阵分解的方式生成User向量和Item向量,这些向量分别代表User和Item的属性(工科研究生矩阵论课程学过矩阵分解,不懂的同学要补课了)。 当我们拿到了User和Item的向量,只要计算出哪些Item和User的向量距离较短(最简单的解法是算欧式距离),就可以得出User偏爱的Item。但是当User和Item的数量巨大的时候,设想下某短视频平台,每天有上百万User登录

相似图像搜索从训练到服务全过程

给你一囗甜甜゛ 提交于 2020-04-27 18:19:26
最近完成了一个以图搜图的项目,项目总共用时三个多月。记录一下项目中用到机器学习的地方,以及各种踩过的坑。总的来说,项目分为一下几个部分: 一、训练目标函数 1、 设定基础模型 2、 添加新层 3、 冻结 base 层 4、 编译模型 5、 训练 6、 保存模型 二、特征提取 三、创建索引 四、构建服务 1、flask 开发 2、Gunicorn 异步,增加服务稳健性 3、Supervisor 部署监控服务 五、总结 一、训练目标函数 项目是在预训练模型 vgg16 的基础上进行微调( fine_tune) ,并将特征的维度从原先的 2048 维降为 1024 维度。 模型的微调又分为以下几个步骤: 1、设定基础模型 本次采用预训练的 VGG16基础模型,利用其 bottleneck 特征 # 设定基础模型 base_model = VGG16 ( weights = './model/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5' , include_top = False ) #指定权重路径 # include_top= False 不加载三层全连接层 2、添加新层 将自己要目标图片,简单分类,统计类别(在训练模型时需要指定类别) # 添加新层 def add_new_last_layer(base_model, nb

faiss 没有提供余弦距离怎么办

偶尔善良 提交于 2019-12-31 12:57:54
参考: https://zhuanlan.zhihu.com/p/40236865 ,但最后观点不同 faiss是Facebook开源的用于快速计算海量向量距离的库,但是没有提供余弦距离,而余弦距离的使用率还是很高的,那怎么解决呢 import faiss from faiss import normalize_L2 import numpy as np from sklearn.metrics.pairwise import cosine_similarity def faiss_cos_similar_search(x, k=None): # 这个不是真的用faiss计算cos,而是找邻居的结果跟用cos得到的邻居结果是很接近,但是距离还是不同的哦 assert len(x.shape) == 2, "仅支持2维向量的距离计算" nb, d = x.shape x = x.astype('float32') k_search = k if k else nb normalize_L2(x) index=faiss.IndexFlatIP(d) index.train(x) # index=faiss.IndexFlatL2(d) index.add(x) D, I =index.search(x, k=k_search) return I def sklearn_cos

蚂蚁金服 ZSearch 在向量检索上的探索

不羁的心 提交于 2019-12-19 11:26:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享 引言 ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索,多维过滤等场景。蚂蚁金服从2017年开始向内部业务方提供 ElasticSearch 服务,我们在蚂蚁金服的金融级场景下,总结了不少经验,此次主要给大家分享我们在向量检索上的探索。 ElasticSearch 的痛点 ElasticSearch 广泛应用于蚂蚁金服内部的日志分析、多维分析、搜索等场景。当我们的 ElasticSearch 集群越来越多,用户场景越来越丰富,我们会面临越来越多的痛点: 如何管理集群; 如何方便用户接入和管理用户; 如何支持用户不同的个性化需求; ... 为了解决这些痛点,我们开发了 ZSearch 通用搜索平台: 基于 K8s 底座,快速创建 ZSearch 组件,快捷运维,故障机自动替换; 跨机房复制,重要业务方高保; 插件平台,用户自定义插件热加载; SmartSearch 简化用户搜索,开箱即用; Router 配合 ES 内部多租户插件,提高资源利用率; 向量检索需求 基于 ElasticSearch 的通用搜索平台 ZSearch 日趋完善,用户越来越多,场景更加丰富。