目录

  • 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同城:职位检索

向量检索的索引构建算法综述相关推荐

  1. 13 种高维向量检索算法全解析!数据库顶会 VLDB 2021 论文作者干货分享

    编者按: 以图搜图.商品推荐.社交推荐等社会场景中潜藏了大量非结构化数据,这些数据被工程师们表达为具有隐式语义的高维向量.为了更好应对高维向量检索这一关键问题,杭州电子科技大学计算机专业硕士王梦召等人 ...

  2. [python] 向量检索库Faiss使用指北

    Faiss是一个由facebook开发以用于高效相似性搜索和密集向量聚类的库.它能够在任意大小的向量集中进行搜索.它还包含用于评估和参数调整的支持代码.Faiss是用C++编写的,带有Python的完 ...

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

    图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享 引言 ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索, ...

  4. 算法工程 # 深度学习算法落地最后一公里:工业界中的大规模向量检索

    前言:现代深度学习实践中很多场景其实都是对输入数据进行处理.嵌入,最终获得一个 embedding,然后对 embedding 进行相似度检索,而工业界中的被检索数据往往是海量的,因此深度学习模型落地 ...

  5. 推荐系统[九]项目技术细节讲解z4:向量检索技术工程上实践,曝光去重实践以及检索引擎该如何选择:支撑亿级索引、5毫秒级的检索[elasticsearch、milvus]

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排).系统架构.常见问题.算法项目实战总结.技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排 ...

  6. 向量检索(一)Faiss 在工业界的应用和常见问题解决

    一.向量检索的场景 传统的搜索,使用关键做精确的查找,利用倒排索引在索引库中搜索.日常在用的百度,Google都属于关键词搜索. 在 AI 时代,我们需要查找一张相似的图片,一个问题的答案,或者根据一 ...

  7. 图像物体分类与检测算法综述

    图像物体分类与检测算法综述 转自<计算机学报> 目录 图像物体分类与检测算法综述 目录 图像物体分类与检测概述 物体分类与检测的难点与挑战 物体分类与检测数据库 物体分类与检测发展历程 图 ...

  8. 「技术手册」淘宝推荐、视频搜索背后的检索技术竟是它!深度揭秘达摩院向量检索引擎Proxima

    淘宝搜索推荐.视频搜索的背后使用了什么样的检索技术?非结构化数据检索,向量检索,以及多模态检索,它们到底解决了什么问题?今天由阿里巴巴达摩院的科学家从业务问题出发,抽丝剥茧,深度揭秘达摩院内部技术-- ...

  9. 基于磁盘量身定制,十亿规模高效向量检索方案

    ✏️ 编者按: "SPANN: Highly-efficient Billion-scale Approximate Nearest Neighbor Search"[1]是发表于 ...

最新文章

  1. vbs脚本在服务器上虚拟按键,iisvdir.vbs iis虚拟目录管理脚本使用介绍
  2. PHP的转义函数 htmlspecialchars、strip_tags、addslashes解释
  3. excel图片变成代码_没错, Python杀死了Excel
  4. java代码杨辉三角_用java实现杨辉三角的示例代码
  5. K. Easy Sigma(类欧几里得)
  6. intellij idea 好用的快捷键(mac版)
  7. 使用Fastjson提示No serializer found for class
  8. 两空间异面直线公垂线及交点坐标的求解过程
  9. python使用datetime获取两个时间的时间差,与时间的加减运算
  10. 科学技术究竟有没有国界?独家专访 IEEE 高级会员张海霞教授
  11. 前端如何播放m3u8格式的视频
  12. 图像转PDF的问题、方法及题外话
  13. 优化概率神经网络_贝叶斯神经网络最新综述
  14. 用计算机如何判断闰年,php判断/计算闰年的方法小结【三种方法】
  15. 腾讯开源|TAT Agent-助力轻松完成云服务器运维管理任务
  16. 1467 Radio Transmission
  17. untiy游戏接入之uc_sdk(九游)
  18. 惠普暗影精灵命令中心linux,暗影精灵2成功装上Sierra 12.5正式版
  19. 电脑每天第一次开机很慢很卡,4k对齐,西部数据
  20. java实现微信公众号内容推送系统

热门文章

  1. RealtekAudioControl声卡控制面板下载
  2. 全国计算机试题选登答案,2012年宁波市中小学生计算机程序设计初赛试题选登...
  3. 南京信息工程大学第十届程序设计大赛试题
  4. php早午晚问候语_微信午安问候语
  5. sanf()、kbhit()、getch()获取键盘信息与peekMessage()获取鼠标信息
  6. Eharts在Android 9.0 webview中 不显示 空白 问题解决方案
  7. 微信小程序-view(视图容器)
  8. DevCon 命令行实用工具可替代设备管理器
  9. 【软件设计模式】常用的设计模式的介绍
  10. mac终端查看php版本_Mac切换php版本方法