向量检索的索引构建算法综述
目录
- VectorRetrieval
- github
- 落地场景
- 背景
- 框架
- 检索模型——暴力搜索、倒排索引
- 检索模型——kd-Tree、Annoy
- KD-Tree:
- Annoy:
- 检索模型——LSH
- 检索模型——PQ
- 检索模型——NSW、HNSW
- NSW:
- HNSW:
- result:
- 检索框架
- Elastic Search
- Faiss
- Milvus
- 业界的落地情况
- Milvus
- Faiss
- Milvus
- Faiss
VectorRetrieval
github
仿真代码:https://github.com/KATEhuang920909/VectorRetrieval
落地场景
落地场景:获取相似实体的需求都可以使用到
- 图片搜索:以图搜图,通过图片检索图片。具体应用如:车辆检索和商品图片检索等。
- 视频搜索:针对视频信息的实时轨迹跟踪。
- 文本搜索:基于语义的文本检索和推荐,通过文本检索近似文本。
- 语音搜索:声纹匹配,音频检索。
- 文件去重:通过文件指纹去除重复文件。
背景
- 高维及海量数据的存储:在常用的图片或视频处理场景中,向量数据通常在亿级别。
- 高召回:为保证检索效果,精度召回率通常要求 95% 以上。
- 高性能:为保证用户体验,向量检索的响应要求毫秒级。
框架
检索模型——暴力搜索、倒排索引
- BM25+semantic
- 倒排索引+BM25/semantic
特点:维护成本低
缺陷:耗时,占用内存大,准确率有待提升
检索模型——kd-Tree、Annoy
KD-Tree:
- 构造:超平面去划分维度空间,方差最大的维度取中值
- 检索:递归访问KD-Tree,回溯计算距离
- 参数:返回个数K
Annoy:
构造:聚类数为2的Kmeans
检索:递归访问Annoy-Tree,回溯计算距离
参数:返回个数K、树的深度
检索模型——LSH
局部敏感哈希
通过hash映射,将向量集映射到不同的hash桶中。高维空间的两点若距离很近,那么设计一种哈希函数对这两点进行哈希值计算,使得他们哈希值有很大的概率是一样的,若两点之间的距离较远,他们哈希值相同的概率会很小。
- 构造:通过hash函数映射,将向量集映射到不同的hash桶中
- 检索:hash函数映射到相应hash桶,对桶内样本求距离
- 余弦距离:H(V) = sign(V·R)
- 参数:hash函数个数、向量片段个数
- 特点:1.将高维数据降维到低维数据,内存耗用少;一定程度上保持原始数据的相似度不变。
- 缺陷:对于非均匀分布的向量空间效率和准确率较差。
- 改进:
向量切片
检索模型——PQ
针对N个训练样本,假设样本维度为128维,我们将其切分为4个子空间,则每一个子空间的维度为32维,然后我们在每一个子空间中,对子向量采用K-Means对其进行聚类(图中示意聚成256类),这样每一个子空间都能得到编码N*4。这样训练样本的每个子段,都可以用子空间的聚类中心来近似,对应的编码即为类中心的ID
搜索过程:比对目标向量与各个聚类中心的距离,选择出与目标向量最为接近的若干个聚类中心。接下来获取这些聚类中心所对应聚类中的所有向量及其子段,分别计算每个子段各向量与目标向量的距离,将这些子段的距离求和相加
- 构造:通过 聚类方法将向量集合划分为多个聚类,并记录各个聚类的中心点的坐标
- 检索:比对聚类中心向量,选择对应簇的样本计算距离
- 参数:聚类簇个数、向量片段个数
- 特点:1.内存耗用更小;2.数据动态增删更灵活
- 缺陷:对于高维向量搜索效果一般。
- 优化:降维或者在PQ乘积量化之前,增加了一个粗量化,采用K-Means进行聚类
检索模型——NSW、HNSW
跳表
HNSW
NSW:
- 构造:向图中逐个插入点,查找到与这个全新点最近的m个点,连接全新点到m个点的连线。
- 检索:贪婪算法
- 参数:连线个数m
HNSW:
- 构造:基于跳表构建多层图网络
- 检索:从上往下依次查询,每一层达到局部最大值后跳转
- 参数:连线个数m、跳转概率
- 特点:较高的搜索效率;较高准确度;
- 缺陷:构建索引慢;占用内存大;
result:
检索框架
Elastic Search
- API
- 可扩展
- 7.2+: match all 查询类似于向量检索,暴力搜索
- 向量检索插件
Faiss
- 开源库
- 提供多种检索方法
- 可存在内存和磁盘中
- C++实现,提供Python封装调用。
- 大部分算法支持GPU实现
Milvus
- API
- 基于 Faiss等索引库之上
- 多模态检索
- 动态数据管理
业界的落地情况
Milvus
- 贝壳找房:智能客服、户型检索
- 爱奇艺:视频检索
- 搜狗:新闻检索、文本辅助标注
- 丁香园:文章检索、社区讨论检索、商品检索
Faiss
- 58同城:职位检索
Milvus
- 贝壳找房:智能客服、户型检索
- 爱奇艺:视频检索
- 搜狗:新闻检索、文本辅助标注
- 丁香园:文章检索、社区讨论检索、商品检索
Faiss
- 58同城:职位检索
向量检索的索引构建算法综述相关推荐
- 13 种高维向量检索算法全解析!数据库顶会 VLDB 2021 论文作者干货分享
编者按: 以图搜图.商品推荐.社交推荐等社会场景中潜藏了大量非结构化数据,这些数据被工程师们表达为具有隐式语义的高维向量.为了更好应对高维向量检索这一关键问题,杭州电子科技大学计算机专业硕士王梦召等人 ...
- [python] 向量检索库Faiss使用指北
Faiss是一个由facebook开发以用于高效相似性搜索和密集向量聚类的库.它能够在任意大小的向量集中进行搜索.它还包含用于评估和参数调整的支持代码.Faiss是用C++编写的,带有Python的完 ...
- 蚂蚁金服 ZSearch 在向量检索上的探索
图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享 引言 ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索, ...
- 算法工程 # 深度学习算法落地最后一公里:工业界中的大规模向量检索
前言:现代深度学习实践中很多场景其实都是对输入数据进行处理.嵌入,最终获得一个 embedding,然后对 embedding 进行相似度检索,而工业界中的被检索数据往往是海量的,因此深度学习模型落地 ...
- 推荐系统[九]项目技术细节讲解z4:向量检索技术工程上实践,曝光去重实践以及检索引擎该如何选择:支撑亿级索引、5毫秒级的检索[elasticsearch、milvus]
搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排).系统架构.常见问题.算法项目实战总结.技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排 ...
- 向量检索(一)Faiss 在工业界的应用和常见问题解决
一.向量检索的场景 传统的搜索,使用关键做精确的查找,利用倒排索引在索引库中搜索.日常在用的百度,Google都属于关键词搜索. 在 AI 时代,我们需要查找一张相似的图片,一个问题的答案,或者根据一 ...
- 图像物体分类与检测算法综述
图像物体分类与检测算法综述 转自<计算机学报> 目录 图像物体分类与检测算法综述 目录 图像物体分类与检测概述 物体分类与检测的难点与挑战 物体分类与检测数据库 物体分类与检测发展历程 图 ...
- 「技术手册」淘宝推荐、视频搜索背后的检索技术竟是它!深度揭秘达摩院向量检索引擎Proxima
淘宝搜索推荐.视频搜索的背后使用了什么样的检索技术?非结构化数据检索,向量检索,以及多模态检索,它们到底解决了什么问题?今天由阿里巴巴达摩院的科学家从业务问题出发,抽丝剥茧,深度揭秘达摩院内部技术-- ...
- 基于磁盘量身定制,十亿规模高效向量检索方案
✏️ 编者按: "SPANN: Highly-efficient Billion-scale Approximate Nearest Neighbor Search"[1]是发表于 ...
最新文章
- vbs脚本在服务器上虚拟按键,iisvdir.vbs iis虚拟目录管理脚本使用介绍
- PHP的转义函数 htmlspecialchars、strip_tags、addslashes解释
- excel图片变成代码_没错, Python杀死了Excel
- java代码杨辉三角_用java实现杨辉三角的示例代码
- K. Easy Sigma(类欧几里得)
- intellij idea 好用的快捷键(mac版)
- 使用Fastjson提示No serializer found for class
- 两空间异面直线公垂线及交点坐标的求解过程
- python使用datetime获取两个时间的时间差,与时间的加减运算
- 科学技术究竟有没有国界?独家专访 IEEE 高级会员张海霞教授
- 前端如何播放m3u8格式的视频
- 图像转PDF的问题、方法及题外话
- 优化概率神经网络_贝叶斯神经网络最新综述
- 用计算机如何判断闰年,php判断/计算闰年的方法小结【三种方法】
- 腾讯开源|TAT Agent-助力轻松完成云服务器运维管理任务
- 1467 Radio Transmission
- untiy游戏接入之uc_sdk(九游)
- 惠普暗影精灵命令中心linux,暗影精灵2成功装上Sierra 12.5正式版
- 电脑每天第一次开机很慢很卡,4k对齐,西部数据
- java实现微信公众号内容推送系统
热门文章
- RealtekAudioControl声卡控制面板下载
- 全国计算机试题选登答案,2012年宁波市中小学生计算机程序设计初赛试题选登...
- 南京信息工程大学第十届程序设计大赛试题
- php早午晚问候语_微信午安问候语
- sanf()、kbhit()、getch()获取键盘信息与peekMessage()获取鼠标信息
- Eharts在Android 9.0 webview中 不显示 空白 问题解决方案
- 微信小程序-view(视图容器)
- DevCon 命令行实用工具可替代设备管理器
- 【软件设计模式】常用的设计模式的介绍
- mac终端查看php版本_Mac切换php版本方法