相似向量检索库-Faiss-简介及原理

5 篇文章 4 订阅
订阅专栏

前言

由于项目需要,需要对某些种子用户进行look-alike,找到相似用户,所以近期对相似向量检索库Faiss进行一定的了解,接下来,结合相关资料,把我对这个库的了解记录在这里,也希望对你有所帮助!

一:Faiss简介

Faiss全称(Facebook AI Similarity Search)是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前较成熟的近似近邻搜索库。
它包含多种搜索任意大小向量集(备注:向量集大小由RAM内存决定)的算法,以及用于算法评估和参数调整的支持代码。
Faiss用C++编写,并提供与Numpy完美衔接的Python接口。除此以外,对一些核心算法提供了GPU实现。

二:Faiss 原理

2.1 整体流程图

在这里插入图片描述
Faiss核心原理就两个,倒排索引 IVF乘积量化 PQ,这两个方法是Faiss实现高速,少内存以及精确检索的主要手段。

2.2 倒排索引 IVF(Inverted File System)

IVF其实很好理解,假如我们想要在全国范围内找到一个给定年龄,性别,身高体重等信息的人,那么其中的一个办法是,拿这些信息和全国的人都一一对比,然后找到和这个条件最相近的一类人。但是如果我们先把全国的人按照省份进行划分,先看这个人是哪个省份的,接着从这个省份里去全量搜,那么计算了一下子降了一个数量级,如果是按城市划分,则计算量可以降低好几个量级,这就是IVF的基本原理。
暴力搜索的方式是在全空间进行搜索,为了加快查找速度,几乎所有的ANN方法都是通过对全空间进行分割(聚类),将其分割成很多小的子空间,在搜索时,通过某种方式快速锁定在某一(几)个子空间,然后在这几个子空间中进行遍历。
IVF流程图:
在这里插入图片描述
确定子空间: 通过计算query向量和所有子空间中心(如子空间内所有向量的均值)的距离,选出距离最近的K个子空间,表示和该query最相近的向量,最有可能在这几个子空间里。
缺点:

  1. 可能会损失精度,找到的是局部解,不是全局最优
    很可能更相近的向量不在遍历的这几个空间内,因此找到的相似向量不是全局最优的,在faiss中有两个参数,分别是nlist 和 nprobe ,其中前者决定了对全量用户聚类的个数,一般来说聚类个数越大,训练过程越慢,检索速度越快(每个子空间需要遍历的向量变少),后者nprobe决定了每次检索几个子空间,一般来说,检索的子空间越多,检索越精确,但是检索速度越慢。两者需要做一定的权衡。特别地,当两者相等时,等价于暴力检索。
  2. 检索速度可能不太稳定
    一般来说,在进行聚类后,检索的速度应该是暴力检索的 1/nlist ,但是由于聚类算法不可能保证每个类包含的向量数量都是一样的,实际直觉上各个类的大小也不应该一样(如每个省份的人有多有少),因此在需要对较大的子空间进行遍历时,需要消耗较多的时间,反之则速度更快。一般有个常量C来表示,整体的查询效率为 C/nlist 。
  3. 内存消耗较大
    无论是训练还是最后的检索,为了提升速度,都需要把全量数据加载到内存中,这种方法没有对向量进行压缩,内存消耗较大。

2.3 乘积量化

乘积量化的核心思想还是聚类。其主要分为两个步骤,Cluster 和 Assign,也即聚类和量化。
乘积量化示意图:

在这里插入图片描述
乘积量化有个重要的参数m_split ,这个参数控制着向量被切分的段数,如图所示,假设每个向量的维度为128,每个向量被切分为4段,这样就得到了4个小的向量,对每段小向量分别进行聚类,聚类个数为256个,这就完成了Cluster。然后做Assign操作,先每个聚类进行编码,然后分别对每个向量来说,先切分成四段小的向量,对每一段小向量,分别计算其对应的最近的簇心,然后使用这个簇心的ID当做该向量的第一个量化编码,依次类推,每个向量都可以由4个ID进行编码。
每个ID可以由一个字节保存,每个向量只需要用4个字节就可以编码,这样就完成的向量的压缩,节省了大量的内存,压缩比率2000+。
这一步其实就是Faiss训练的部分,目的是为了获取索引Index。在完成向量压缩,获取索引之后,就要考虑如何进行向量查询,下图表示了某个查询向量Query进行查询时的操作流程:
向量查询示意图:
在这里插入图片描述
由上图可以看出,当来到一个查询向量后,和训练时一样,首先需要对这个向量进行切分,这样就可以得到四小段的向量,然后计算每个小向量和对应的256个类中心的距离,存在一个距离矩阵或者数组中,接着就可以通过查表,来计算查询向量Query和每个向量之间的距离。计算方式就是累加每个小向量之间的距离之和。

三:优化效率计算

由上可以看出,在原来的暴力算法下,进行一次查询需要的计算量是 N128次计算,但是使用PQ后,只需要 425632次计算,加上4N次查表计算,因此计算量之比为: 128 ∗ N 4 ∗ N + 4 ∗ 256 ∗ 32 \frac{128*N}{4*N+4*256*32} 4N+425632128N
当N特别大时,425632 可以忽略,计算量减少32倍。(注:分母的查表操作耗时远小于分子的浮点乘法计算,因此计算效率会远大于32)
但是,考虑到3.2小节提到的IVF方法,先进行聚类,再进行PQ,那么计算量再次减少,变成 : 128 ∗ N 4 ∗ N + 4 ∗ 256 ∗ 32 ∗ n l i s t C \frac{128*N}{4*N+4*256*32} * \frac{n_list}{C} 4N+425632128NCnlist 假设nlist设置为2000,常数c为5,则优化效率至少为1200,提升了3个数量级,计算量再次减少,最终可以实现快速,高效的相似向量查询。

四:总结

本文只着重讲解Faiss比较核心的原理,还有基于局部哈希敏感,基于图检索的分层小世界导航等方法,有兴趣的同学可以看它的github以及相关的博客等。另外具体使用方法也可自行查找相关资料。

Reference

[1] https://github.com/facebookresearch/faiss
[2] https://zhuanlan.zhihu.com/p/164888905

faiss使用之最终部署
NLP与推荐算法
04-06 2858
嗨各位大佬好,faiss向量召回中速度快、效率高,因而广泛使用,其原理是啥子,大多数估计都不知道,是树?聚类?都不太对。但对于技术人员我觉得能熟练使用即可,知道其中原理还能造轮子还是咋滴???无非是能吹牛逼而已。参考博文:安装,基础,GPU使用,参数调整,鬼事。 For Video Recommendation in Deep learning QQ Group 277356808 视频推荐深度学习加这个群 For Visual in deep learning QQ Group629530787.
向量训练实战-相对位置编码原作
12-19
向量训练实战-相对位置编码原作
10分钟入门faiss相似向量检索
Python_Ai_Road的博客
08-11 1768
一,faiss简介faiss全称 Facebook AI Similarity Search,是FaceBook的AI团队针对大规模向量 进行 TopK 相似向量 检索 的一个工具,使用C++编写,有python接口,对10亿量级的索引可以做到毫秒级检索的性能。使用faiss 搭配合适的model和embedding函数,可以帮助我们 构建 人脸识别,相似图片检索,LLM知识问答,推荐系统召回...
cpp-FAISS是FacebookAI研究团队开源的针对聚类相似性搜索
08-16
FAISS 是 Facebook AI 研究团队开源的针对聚类相似性搜索,它包含一种在任意大小的向量集合中搜索直到可能不适合在 RAM 中的新算法。它还包含用于评估和参数调整的支持代码。
Faiss原理与使用总结
zevjay的博客
04-21 1228
另一种方法是构建多个模态的独立索引,查询时分别计算查询向量与各模态数据的相似度,通过加权融合或其他策略综合决策。假设我们拥有一个包含数万张图像的数据,目标是构建一个图像检索系统,用户上传一张图片,系统返回与之最相似的若干张图片。本案例将利用Faiss强大的向量相似度搜索能力,结合深度学习模型进行图像特征提取,实现高效准确的图像检索。查询时,将查询向量广播到各服务器,分别搜索子索引,然后汇总结果。查询时,输入视觉和文本特征,混合索引将分别在两个子索引中搜索,返回综合结果。首先,确保已安装Faiss
Faiss流程与原理分析
weixin_30751947的博客
03-20 1378
1、Faiss简介   Faiss是Facebook AI团队开源的针对聚类相似性搜索,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索。它包含多种搜索任意大小向量集(备注:向量集大小由RAM内存决定)的算法,以及用于算法评估和参数调整的支持代码。Faiss用C++编写,并提供与Numpy完美衔接的Python接口。除此以外,对一些核心算法提供了G...
Faiss原理和使用总结
最新发布
GZM888888的博客
04-28 1045
引言在处理大规模数据集时,高效的相似性搜索是至关重要的。Facebook AI Research(FAIR)开发的Faiss(Faces in Similar Sets)是一个用于高效相似性搜索和聚类。它被设计用来处理大规模的数据集,并且能够以极快的速度执行相似性搜索和聚类任务。本文将深入探讨Faiss的基本原理、使用方法以及如何在实际项目中应用它。目录Faiss原理和使用总结一、Faiss简介二、Faiss的核心概念三、Faiss的使用流程四、高级特性与最佳实践五、代码示例六、性能调优与案例分析。
算法工程-Faiss原理和使用总结
weixin_40375871的博客
07-26 1万+
1.Faiss的概念 faiss是一个Facebook AI团队开源的,全称为Facebook AI Similarity Search,该开源针对高维空间中的海量数据(稠密向量),提供了高效且可靠的相似聚类检索方法,可支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索。 官方资源地址https://github.com/facebookresearch/faiss 2.Faiss基础依赖 1)矩阵计算框架:Faiss与计算资源之间需要一个外部依赖框架,这个框架是一个矩阵计算框架,官方默
faiss简介及示例
热门推荐
JC的博客
06-22 5万+
简介 faiss是为稠密向量提供高效相似度搜索和聚类的框架。由Facebook AI Research研发。 具有以下特性。 1、提供多种检索方法 2、速度快 3、可存在内存和磁盘中 4、C++实现,提供Python封装调用。 5、大部分算法支持GPU实现 下面给出一些快速链接方便查找更多内容。 github 官方文档 c++类信息 Troubleshooting 官方安装文档...
【原创】 FAISS安装与使用
杨树的博客
11-27 8878
目录 通过Makefile安装 安装命令 通过cmake安装 安装命令: 遇到问题 1、安装时报错,提示找不到gtest 2、安装时报错,提示找不到openBlas 3、提示找不到头文件 4、函数引用未定义 FAISS 是 Facebook AI 研究团队开源的针对聚类相似性搜索,它包含一种在任意大小的向量集合中搜索直到可能不适合在 RAM 中的新算法。它还包含用于评估和参...
10分钟了解向量数据
zxm2015的博客
05-29 3万+
向量数据(Vector Database),也叫矢量数据,主要用来存储和处理向量数据。在数学中,向量是有大小和方向的量,可以使用带箭头的线段表示,箭头指向即为向量的方向,线段的长度表示向量的大小。两个向量的距离或者相似性可以通过汉明距离、欧式距离或者余弦距离得到。图像、文本和音视频这种非结构化数据都可以通过某种变换或者嵌入学习转化为向量数据存储到向量数据中,从而实现对图像、文本和音视频的相似性搜索和检索
人工智能-项目实践-向量搜索-基于faiss向量搜索与管理.zip
12-23
faiss 是一个性能强大的向量相似性搜索,提供了各种算法来加速向量的搜索。但在面对一些场景的时候有时候会显得力不从心,比如,index存储的是压缩量化后的向量数据,用户无法获取元数据;向量数据持久化方式是...
人工智能-项目实践-faiss-一个基于 faiss检索服务.zip
12-23
人工智能-项目实践-faiss-一个基于 faiss检索服 基于faiss检索服务 基于faiss检索服务 1 概述 2 使用 2.1 安装依赖 2.2 编译运行 2.3 版本发布 3 文档 3.1 项目文档 4 依赖项目 1 概述 一个基于 faiss 的...
人工智能-项目实践-向量-自动创建Faiss已知索引与最优的相似度搜索参数.zip
12-23
人工智能-项目实践-向量-自动创建Faiss已知索引与最优的相似度搜索参数 文档、帖子和笔记本 Autofaiss 使用 faiss 高效索引、二进制搜索和启发式方法,可以在 3 小时内在低内存量 (200 GB) 中自动构建一个大型(1...
faiss相似性搜索
厉力文武
01-09 304
1、安装组件2、索引类型:a、IndexFlatL2(精确索引):b、IndexIVFFlat(倒排索引):c、IndexIVFPQ(乘积量化索引):3、索引样例:(图片丢失)
faiss学习(二)另外两种基础索引,保存索引
qq_24127447的博客
02-21 1万+
在上一篇文章里面的官方demo建立索引方式使用的是最基本的索引,这里在介绍两种基础索引 更多索引类别1--更快的检索IndexIVFFlat 官方介绍: 为了加快搜索速度,可以将数据集分割成几部分。我们在d维空间中定义Voronoi单元格,并且每个数据矢量都落入其中一个单元格中。在搜索时,只有查询x所在单元中包含的数据向量y与少数几个相邻查询向量进行比较。(划分搜索空间) 这是通过Inde...
深度学习之以图搜图实战(PyTorch + Faiss)
10-26
 《深度学习之以图搜图实战(PyTorch + Faiss) 》课程从实战的角度出发,方案来源于工业界实际业务应用(例如:京东、淘宝、拍照搜题、搜索引擎搜索业务等)。通过深度学习工具PyTorch 完成图片特征抽取,结合Facebook AI团队开源的针对聚类相似性搜索,完成图片特征索引构建和在线图片检索。    从0到1完成以图搜图的功能实现,针对课程业务分析、数据处理,图片特征索引构建和优化,在线图片检索功能全程实战操作,以最接地气的方式详解每一步流程、解决方案和代码实现。   老师的授课风格: 以实战为主,结合理论,提供免费技术答疑和交流。让大家彻底掌握基于深度学习的图像搜索方案和功能实现。
鱼鹰算法优化支持向量机OOA-SVR原理
02-21
鱼鹰算法优化支持向量机(OOA-SVR)是一种基于鱼鹰算法的支持向量机优化方法。支持向量机(Support Vector Machine,SVM)是一种常用的机器学习算法,用于分类和回归问题。 鱼鹰算法是一种基于自然界中鱼鹰捕食行为的优化算法。它模拟了鱼鹰在捕食过程中的搜索和追踪策略,通过不断调整搜索空间中的候选解来寻找最优解。 OOA-SVR方法将鱼鹰算法应用于支持向量机的优化过程中,以提高支持向量机的性能和精度。其原理如下: 1. 初始化种群:根据问题的特点和要求,初始化一定数量的鱼鹰个体作为初始种群。 2. 评估适应度:根据支持向量机的目标函数,计算每个个体的适应度值,评估其性能。 3. 更新位置:根据鱼鹰算法的搜索策略,通过调整个体的位置来更新种群。这里的位置表示支持向量机模型中的参数,如权重和偏置。 4. 更新速度:根据个体之间的位置差异和适应度值,更新个体的速度。速度的更新可以帮助个体更好地搜索最优解。 5. 选择操作:根据适应度值,选择一部分个体作为下一代的父代,用于产生新的个体。 6. 交叉和变异:通过交叉和变异操作,生成新的个体,并加入到下一代种群中。 7. 终止条件:根据预设的终止条件,判断是否满足停止迭代的条件。如果满足,则输出最优解;否则,返回第3步继续迭代。 通过以上步骤,OOA-SVR方法能够通过鱼鹰算法的优化策略,不断调整支持向量机模型的参数,以找到更优的分类或回归模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 相似向量检索库-Faiss-简介及原理 29645
  • Python 获取当前路径并列出当前路径下的所有文件 16826
  • QT5:出现 error: ‘class QString‘ has no member named ‘toAscii‘ 错误 11088
  • VScode突然无法连接远程服务器(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED) 9523
  • Win10+python3.6+git运行出现问题 6618

分类专栏

  • 学习笔记 5篇
  • Mac相关 1篇
  • Python 6篇
  • 疑难杂症 13篇
  • 对话系统论文阅读 2篇
  • NLP模型卡集册 5篇
  • LeetCode 9篇
  • 杂想录

最新评论

  • VScode突然无法连接远程服务器(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)

    不牌不改: 但是经常出现这个问题,没有彻底解决

  • VScode突然无法连接远程服务器(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)

    不牌不改: 可以了 但是还是执行了一遍“无用的方法”才成功的

  • 相似向量检索库-Faiss-简介及原理

    #苦行僧: 这是两向量的内积,衡量相似度

  • VScode突然无法连接远程服务器(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)

    aisuperdoger: 确实谜底就在谜面上,我的是提示.ssh/config出错了。谢谢作者

  • 相似向量检索库-Faiss-简介及原理

    真·skysys: 感谢你的回复,不过我搞明白这个问题了,Faiss在计算L2距离的时候没有开根号,因此subvector的距离之间是可以相加求和的。其他的度量方式也类似。这样算的目的就是为了支持PQ这样的加速方案。毕竟我们只关注相似排序,不关注具体的数值。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • MacBook21-m1 pro芯片安装Anaconda及TensorFlow的GPU版本(提供全部所需文件)
  • VScode突然无法连接远程服务器(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)
  • NLP相关知识点问答总结(三)
2022年2篇
2021年6篇
2020年13篇
2019年18篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

聚圣源起重机厂商排名梦见屋顶漏水湖南娱乐频道属龙的起名字禁忌南京宝宝起名网宋起名字大全男孩牛年市政工程公司起名ultraedit琴鸟大师起名列表女娃起名logo欣赏女性的胸名典起名网免费取名网起名软件孩子台版原来是美男演员表寓意好的诗句起什么名字好姓魏起名女孩名字大全广告装饰公司起名简单好记摘抄美文店铺取名起名大全评分忘离歌斯里兰卡猛虎组织城下町的蒲公英龙宝宝起名的属龙的今年多大什么水果减肥寒假生活答案宁的女孩起名字葛姓女孩起名四个字淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化