facebook大数据搜索库faiss使用——选择Index
选择Index并不明显,有几个问题可以帮助选择Index。
是否需要精确结果
使用Flat。
IndexFlat2
是唯一能保证精确结果的Index。它为其他Index提供了对比标准。它不会压缩向量,不支持带标签添加,只能顺序添加。所以,如果你需要add_with_ids
,使用IDMap,Flat
。
内存是否有限制
请注意Faiss所有的Index都是存储在RAM里的,如果不需要精确结果,而同时RAM是有限的,在该限制下,我们在精度-速度中间进行衡量选择。可以考虑下面的问题:
内存充足无限制:使用HNSWx
如果你有很多RAM或者搜索库很小,HNSW是最好的选择。它很快、很精确。4<=x<=64是每个向量的链接数,这个值越高越精确,但是使用的RAM越多。而速度-精度衡量则通过efSearch参数调节实现,每个向量占用内存数为(d4+x2*4)字节。
HNSW不支持序列添加(not add_with_ids
),同样的,如果需要,则使用IDMap
。HNSW不需要训练,也不支持从index中删除向量。
内存不关注,使用"...,Flat"
"..."指的是需要进行的数据集聚类操作。聚类之后,“Flat”就把这些向量归于桶中,所以并没有亚索,所占的存储空间大小等于原数据集。速度-精度衡量通过nprobe
参数控制。
内存比较有限,使用“PCARx,...,SQ8”
如果存储整个向量非常占内存资源,可以通过两种方法降低占用量:
- PCA降维;
- 每个向量元素进行可计量量化至1字节;
所以,存储总量是每个向量的x字节。
内存非常有限,使用“OPQx_y, ..., PQx”
PQx使用PQ算法将每个向量进行压缩输出x字节的编码,x一般来说小于等于64,对于大的编码,SQ通常更精确、快速。OPQ是将向量进行线性转换,使得其更容易压缩。y表示的是一个维度,需满足:
- y是x的因子;
- y<=d,d是输入向量的维度;
- y <= 4*x
数据集有多大
这个问题就是对上文"..."部分的回答。数据集被聚成多个桶,在搜索时只有一部分桶被遍历(nprobe个桶)。这个聚类操作只作用于数据集向量的具有代表性的样例之上,通常是数据集的一个样本集。我们针对样本集给出其最优尺寸选择:
如果低于1M向量:"...,IVFx,..."
其中x是4sqrt(N)16sqrt(N),N是数据集的大小。这只是使用kmeans将向量聚起来,你需要30x256x向量训练(更多越好)。
如果1M-10M:"...,IMI2x10,..."
其中x是符号,不是数字。
IMI也对训练集进行k-means聚类,聚成210中心点,但是在向量的前半部分和后半部分是独立的。增加聚类数到2*(210)。你需要大约64*(2^10)向量训练。
如果10M-100M:"...,IMI2x12,..."<千万级-亿级>
同上面的,10用12替换。
如果100M-1B:"...,IMI2X14,..."<亿级-十亿级>
同上面的,10用14替换。
https://www.cnblogs.com/imagezy/p/8329229.html
facebook大数据搜索库faiss使用——选择Index相关推荐
- 大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk
2019独角兽企业重金招聘Python工程师标准>>> 本文就架构,功能,产品线,概念等方面就ElasticSearch和Splunk做了一下全方位的对比,希望能够大家在制定大数据搜 ...
- Paper Pal:一个中英文论文及其代码大数据搜索平台
点击上方蓝字关注我们 Paper Pal:一个中英文论文及其代码大数据搜索平台 余万, 付聿炜, 熊贇, 朱扬勇 1 引言 在开展科研工作的过程中,科研人员需要从大量实时更新的论文中持续地跟踪学术界前 ...
- 【ElasticSearch】大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk
1.概述 转载:大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk述 本文就架构,功能,产品线,概念等方面就ElasticSearch和Splunk做了一下全方位的对比,希望 ...
- Facebook大数据技术架构的演进路线
Facebook一直是大数据技术最积极的应用者,因为它拥有的数据量极其巨大,一份资料显示2011年它拥有的压缩数据已经有25PB,未压缩数据150PB,每天产生的未压缩的新数据有400TB.在F ...
- 视频教程-大数据搜索技术-大数据
大数据搜索技术 软通动力教育集团简称软通大学,依托软通动力在技术服务领域的多方位解决方案能力,采用先进的教学理念和模式,直通高校和城市,开展干部培养,文化落地,初级资源培训,培训需求对接,专业项目课程 ...
- 博弈论 ai 大数据开源库_需要进化:博弈论与人工智能
博弈论 ai 大数据开源库 by Elena Nisioti 由Elena Nisioti 需要进化:博弈论与人工智能 (In need of evolution: game theory and A ...
- 微博掘金旅游大数据,商业化的好选择?
文章讲的是 微博掘金旅游大数据,商业化的好选择, 当年微博接受阿里巴巴战略投资后,"微博要卖广告了"的论断不胫而走,随后信息流广告的成功的确证明微博在"卖广告" ...
- 大数据搜索不只开源Elastic,星环科技自研New Search青出于蓝
大数据产业创新服务媒体 --聚焦数据 · 改变商业 1月15日,全球著名的大数据搜索与实时处理公司Elastic公司CEO Shay Banon突然发文宣布,Elasticsearch和Kibana的 ...
- python大数据搜索_python语言-用 Python 实现一个大数据搜索引擎
搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器 ...
最新文章
- mysql 5.5 主从双向同步,请教mysql 定时 双向 主从同步問題
- spring全局异常抓取validation校验信息
- OC-变量和数据类型
- Amazon Elasticsearch Service 入门实践
- ChannelInitializer 的添加
- 设备树和pinctrl粗解
- 在字符串中使用引号()等字符 需要用转义字符\ 例如
- java解析pom.xml_从pom.xml java获取变量
- win10电脑黑屏只有鼠标箭头_电脑开机就黑屏,只显示鼠标怎么办?别急,简单几步,轻松解决!...
- git pull push 项目的时候总是提示要输入用户名密码的解决方案
- 编译原理完整学习笔记(七):优化代码
- java jquery时间问候语,js实现实时问候,不同时间显示不同问候语
- 程序员计算器HEX、EDC、OCT的意思
- 202202 喜马拉雅 下载 下架产品为mp3 m4a格式
- 如何将iPhone投屏到Mac电脑上?
- 为什么python代码运行不了_Python | 为什么优化代码?
- web前端新手入门:中国互联网的发展史
- 苏炫杰全国计算机等级考试,高中主题班会教案模板
- 字节跳动2020春招后端开发工程师笔试复盘
- java 合并和拆分单元格_如何在Microsoft Word中合并和拆分表和单元格