【3】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将向量聚起来,你需要30x~256x向量训练(更多越好)。

如果1M-10M:"...,IMI2x10,..."

其中x是符号,不是数字。

IMI也对训练集进行k-means聚类,聚成2^10中心点,但是在向量的前半部分和后半部分是独立的。增加聚类数到2(2^10)。你需要大约64(2^10)向量训练。

如果10M-100M:"...,IMI2x12,..."<千万级-亿级>

同上面的,10用12替换。

如果100M-1B:"...,IMI2X14,..."<亿级-十亿级>

同上面的,10用14替换。

原文地址:https://www.cnblogs.com/imagezy/p/8329229.html

时间: 2024-07-31 19:28:44

【3】facebook大数据搜索库faiss使用——选择Index的相关文章

用Python实现一个大数据搜索及源代码

在日常生活中,大家了解搜索引擎如百度.360.搜狗.谷歌等,搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器(BloomFilter) 第一步我们先要实现一个布隆过滤器. 布隆过滤器是大数据领域的一个常见算法,它的目的是过滤掉那些不是目标的元素.也就是说如果一个要搜索的词并不存在与我的数据中,那么它可以以很快的速度返回目标不存在. 让我们看看以下

实战大数据可视化库:D3.js

实战大数据可视化库:D3.js网盘地址:https://pan.baidu.com/s/1Sir6qnU7Hdz5l3IHNjdNEQ 提取码:vmdi D3.js 是一个 JavaScript 库,它主要用于对数据的动态图表展示.通过 HTML.SVG 以及 CSS,D3 可以让数据展现得更加鲜活.D3 使得数字的图形化展示变得异常单,可以说,它是当下最强大的基于网络的数据可视化技术. 本教程理论与实践结合,力图向读者全方位地展示 D3 大数据可视化技术,帮助读者快速利用 D3 创建可视化程序

facebook 相似性搜索库 faiss

faiss 个人理解: https://github.com/facebookresearch/faiss 上把代码clone下来,make编译 我们将CNN中经过若干个卷积/激励/池化层后得到的激活映射(向量形式)存储到硬盘上, Faiss是一个高效的相似性搜索和密集向量聚类的库.它包含了搜索任意大小的向量集合的算法,这些算法可能不适合RAM.它还包含用于评估和参数优化的支持代码.Faiss是用c++编写的,带有Python/numpy的完整包装.一些最有用的算法是在GPU上实现的.它是由Fa

[大数据搜索数据库YDB]YDB新功能介绍-视图表

YDB视图表 全库资源汇聚搜索高效解决方案 业务有成百上千张表,每张表有上百个列.想要根据关键字搜索含有该关键字的记录怎么办? 每张表都写一个sql么?每个列都要拼到where条件里去搜索么?no 其实对于资源汇聚类型的搜索可以一条sql就搞定,又兼容原先的表结构,业务其他部分依然可以单表查询.是不是有这样一种场景,每张表的数据量都不多 ,但是你的表特别多,几十张甚至几百张表. 如果每个表都创建一个物理表,那么是比较浪费资源的 每张表都要维护自己的BUFFER,弄不好就OOM,导入性能实在太差.

预见未来—— 互联网大数据应用 商业计划书

内容说明: 本商业计划书是我去年时写的,比较粗浅. 但一文一图都是自己花了时间整理出来的,也是份劳动成果,现分享给大家. 粗陋简文,不当之处,请多指教! 互联网大数据应用商业计划书_v1.3.pdf   pdf版下载地址: http://ebigdata.net/bigdata.pdf 注:未经本人同意,禁止转载:联系作者:程序猿小伍 [email protected] 第1章 背景介绍 1.1. 大数据标签 一分钟内,微博推特上新发的数据量超过10万. 截至2015年6月,我国网民规模达6.6

Hadoop和大数据:60款顶级大数据开源工具

一.Hadoop相关工具 1. Hadoop Apache的Hadoop项目已几乎与大数据划上了等号.它不断壮大起来,已成为一个完整的生态系统,众多开源工具面向高度扩展的分布式计算. 支持的操作系统:Windows.Linux和OS X. 相关链接: http://hadoop.apache.org 2. Ambari 作为Hadoop生态系统的一部分,这个Apache项目提供了基于Web的直观界面,可用于配置.管理和监控Hadoop集群.有些开发人员想把Ambari的功能整合到自己的应用程序当

Hadoop和大数据:60款顶级开源工具

虽然此文尽力做到全面,但难免遗漏,欢迎大家补充,点击文末右下角"写评论",分享你的观点. 说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱.弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,"100%的大公司"会采用Hadoop.Market Research的一份报告预测,到2011年,Hadoop市场会以58%的年复合增长率(CAGR)高速增长:到2020年,市场产值会超过10亿美元.IBM更是非

未来Java、大数据、Python哪个前景更好,薪资更高?

都知道现在最火爆的是人工智能.大数据.而人工智能和大数据主要用的语言就是Java和Python.今天我们就来分析一下,当前java,python和大数据,哪个就业前景更好?自己该学哪一个? Java和Python是编程语言,而大数据则是一系列技术的整合,所以应该分开来看,三者并不能直接进行对比. 三者实际的关系是目标和实现的包含关系.所以这个问题应该分别为 Java和Python哪个发展前景好?大数据的发展前景如何? Java发展前景 Java语言是一门面向对象编程语言,不仅吸收了C++语言的各

10个最热门的大数据技术

大数据已经融入到各行各业,哪些大数据技术是最受欢迎?哪些大数据技术潜力巨大?请听大讲台老师对10个最热门的大数据技术的介绍. 互联网科技发展蓬勃兴起,人工智能时代来临,抓住下一个风口.为帮助那些往想互联网方向转行想学习,却因为时间不够,资源不足而放弃的人.我自己整理的一份最新的大数据进阶资料和高级开发教程,大数据学习群:868847735 欢迎进阶中和进想深入大数据的小伙伴加入. (一)预测分析 预测分析是一种统计或数据挖掘解决方案,包含可在结构化和非结构化数据中使用以确定未来结果的算法和技术.