一、向量检索图解总结

原文:
大规模特征向量检索算法总结 (LSH PQ HNSW):https://www.6aiq.com/article/1587522027341
「向量召回」相似检索算法——HNSW:https://mp.weixin.qq.com/s/dfdNj9CZ3Kj2UwDr9PQcVg

二、原始内容

2.1 基础概念

2.1.1 度量方式:欧式距离,cos距离,汉明距离,jaccard相似度
2.1.2 分类
  • ● 基于空间划分

    • ○ 举例:乘积向量化,哈希等
    • ○ 优点:内存占用小,动态数据增删,召回较高
  • ● 基于图
    • ○ 举例:NSW,HNSW
    • ○ 优点:召回高
    • ○ 缺点:内存占用打,数据动态删减不易

2.2 检索方法1-基于空间划分

2.2.1 基于树的方法

举例:KDTree算法

  • ● 树的构建

    • ○ 选择方差最大的维度分裂,每次拆分成2个子树
  • ● 查询
    • ○ 从根节点出发,执行深度优先遍历,以查找的点为圆心,单前遇到的树的节点的距离为半径画圆,过滤没有橡胶的圆,直到半径不再更新。
  • ● 特点
    • ○ 复杂度:O(kn**((k-1)/k)),与k成线性关系,不适合高纬度向量召回
2.2.2 基于hash的方法

举例:LSH,local sensitive hashing,局部敏感哈希

  • ● 树的构建

    • ○ 方法:每个平面分隔,左边为0,右边为1,得到该平面的哈希值,多个平面来分隔,就可以得到完整的hash值了,有个特点,hash值相近的,在原始向量空间靠的也近,感觉也是一种降维的方法来求相似度。
  • ● 查询
  • ○ 从根节点开始往下找
  • ● 特点
    • ○ 局部敏感:相似样本的点对比远的点更容易发生碰撞
    • ○ 为啥可以加速:显然
    • ○ 为啥要用多表哈希:哈希函数数目K如果太大,相近的点可能不在同一个桶中,通过将这个过程重复L次来增加召回率
    • ○ K,L的选取
      • ■ K

        • ● 太小:很多点都在一个桶里面
        • ● 太大:每个桶数据太小,需要增加L来增加召回
      • ■ L
        • ● 太小:召回不够
        • ● 太大:计算量增加
    • ○ Multiprobe LSH作用:T,在桶里面找邻近点可能不够,还在改桶的邻居里面也找找,可以减少L的数量,增加找到邻居的机会,T为邻居桶查找的数量
2.2.3 乘积量化
  • ● 乘积量化

    • ○ 定义:
    • ■ 乘积向量化(product quantization),核心思想是分段和聚类,kmeans是pq乘积量化子空间数目为1的特例
    • ○ 构建
      • ■ 以128维的样本维度为例
      • ■ 1. 将其切分为4个子空间,每个子空间的维度为32维
      • ■ 2. 对子向量采用kmeans对其进行聚类,例如聚类成256类,这样每个子空间有32维的维度,256个中心
      • ■ 3. 训练样本的每个子段,都用子空间的聚类中心来近似,对应的编码为中心的id
    • ○ 查询
      • ■ 输入:128的查询向量
      • ■ 1. 还是分词4个子段
      • ■ 2. 计算每个子段到子空间所有聚类中心的距离,可以得到4*256个距离,存到cache里面,后续遇到具体样例的距离计算,可以通过查表得到
    • ○ 特点分析
      • ■ 时间

        • ● 相对于brute-force search,只需要计算4*256词,几乎可以忽略此时间
      • ■ 内存
        • ● 用一个相对比较短的编码来表示样本,内存消耗大大小于brute-force search
2.2.4 倒排乘积量化 IVFPQ
  • ● 倒排乘积量化,IVFPQ

    • ○ 背景:PQ乘积量化,还是需要计算4*256次,对每个样本,还是要挨个求和相加计算距离-> 有没有方法
    • ○ 方法:先聚类,以聚类为中心构建索引,然后后面的步骤和PQ一致,先划分成子空间,然后子空间聚类,然后再编码…
    • ○ 查询:先粗量化,快速定位属于哪个c_i,然后再在该兴趣区域按PQ乘积向量化距离计算方式计算距离

2.2 检索方法2-基于图

  • ● 基于空间划分的缺点:

    • ○ 为了提高召回率,每个向量只会属于某个子区域,需要搜索较大的空间,导致计算量增加。
  • ● 基于图的方法概述
  • ○ 基础想法:邻居的邻居也可能是邻居
  • ○ 方法有:KGraph,NSG,HNSW,NGT
2.2.1 NSW(Navigable Small World)可导航的小世界
  • ● NSW总结

    • ○ 可导航的小世界?
    • ○ 一些定义
      • ■ Regular graph:每个顶点邻居数目相同
      • ■ Random graph:每个顶点的邻居数目是随机的
      • ■ small world graph:介于上面两者之间
        • ● 特点:

          • ○ 同质性:相似的顶点聚集在一起,相互连接具有相邻边
          • ○ 若链接:每个顶点上会有一些随机的边连接到网络中的顶点上
    • ○ 原理:构建small world graph->随机选择一个其实顶点->遍历邻居节点->选择与目标最近的顶点继续遍历->直到找到最近的顶点
    • ○ 图的构造
      • ■ 随机
      • ■ 向图中逐个插入顶点:找到与新顶点最近的m个顶点,将新顶点与他们连起来形成边
      • ■ 刚开始构造的边大概率是高速公路->可以加速查找
    • ○ 查找:
      • ■ 从enter pointer顶点开始查找->查找绿色的邻居顶点,可以通过高速公路机制快速找到结果
    • ○ 缺点:
      • ■ 通过节点的随机插入引入随机性->构建出small world graph,但是图的构造不稳定,节点之间的差异大
      • ■ 先插入的顶点,链接的邻居节点,基本都比较远(弱连接属性强)
      • ■ 后插入的顶点,其连接的邻居节点,基本都比较近(弱连接属性弱)
      • ■ 聚类效应的点,后续插入的点可能都和其建立连接,对应节点的度可能比较高
2.2.2 HNSW(Hierarchical Navigable Small World),分层导航小世界
  • ● HNSW总结

    • ○ HSW缺点:

      • ■ 通过节点的随机插入引入随机性->构建出small world graph,但是图的构造不稳定,节点之间的差异大
      • ■ 先插入的顶点,链接的邻居节点,基本都比较远(弱连接属性强)
      • ■ 后插入的顶点,其连接的邻居节点,基本都比较近(弱连接属性弱)
      • ■ 聚类效应的点,后续插入的点可能都和其建立连接,对应节点的度可能比较高
    • ○ 如何构造更稳定的small world graph->NSW->对图进行分层->由粗到细的检索->HNSW
    • ○ 构建步骤
      • ■ layer=0,包含数据集所有点
      • ■ layer=1,以50%的概率随机从layer0选择点构成
      • ■ layer=l,以50%的概率随机从layer l-1选择点构成
      • ■ 插入图时,先计算新顶点可以深入到第几层,在每层的NSW图中,找到m个邻居,并链接他们
    • ○ 查询:
      • ■ 从最高层开始检索,逐层往下,从而实现快速搜多
    • ○ 特点:
      • ■ 度量效果
      • ● cos距离效果很好,内积不佳
      • ● 内积距离不满足三角不等式,dx+dy!>不一定大于dz,因距离没有传递性
  • ● 工具:
    • ○ hnswlib

      • ■ C++版:https://github.com/nmslib/hnswlib.gitPython版:pip install hnswlibJava版:https://github.com/jelmerk/hnswlib.git
    • ○ faiss
      • ■ https://github.com/facebookresearch/faiss.git
    • ○ annoy
      • ■ C++版:https://github.com/spotify/annoy.gitPython版:pip install annoy==1.0.3

三、向量检索使用入门

一文入门Facebook开源向量检索框架Faiss:https://zhuanlan.zhihu.com/p/266589272

向量检索基础方法总结相关推荐

  1. 【NLP】向量检索模型落地:瓶颈及解法!

    作者 | Maple小七 整理 | NewBeeNLP 稠密向量检索巨大的内存占用一直是限制其落地的一大瓶颈.实际上,DPR生成的768维稠密向量存在大量冗余信息,我们可以通过某种压缩方法以少量的精度 ...

  2. 向量检索模型落地:瓶颈及解法!

    作者 | Maple小七 整理 | NewBeeNLP 稠密向量检索巨大的内存占用一直是限制其落地的一大瓶颈.实际上,DPR生成的768维稠密向量存在大量冗余信息,我们可以通过某种压缩方法以少量的精度 ...

  3. 啥?!BM25 比语义向量检索效果好?

    NewBeeNLP公众号原创出品 公众号专栏作者 @Maple小七 北京邮电大学·模式识别与智能系统 TL;DR 虽然以SentenceBERT为代表的语义向量检索展现出了超越传统的以BM25为代表的 ...

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

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

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

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

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

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

  7. AnalyticDB向量检索+AI 实战: 声纹识别

    简介: 分析型数据库(AnalyticDB)是阿里云上的一种高并发低延时的PB级实时数据仓库,可以毫秒级针对万亿级数据进行即时的多维分析透视和业务探索,向量检索和非结构化数据分析是AnalyticDB ...

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

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

  9. 【推搜】embedding评估 | faiss的top-k向量检索

    note 在双塔模型召回中,正样本即用户点击过的物品,负样本:全体物品中负采样(简单做法).被排序淘汰的物品(物品). faiss库使用三部曲:构建向量库:构建index,并将向量添加到index中: ...

  10. 常见的k临近向量检索算法

    今天要讲博客博客都围绕一个问题主题展开:有一个包含了N个元素的集合,在向量化的参数空间里,给出任何一个节点i,如何在最短的时间复杂度的前提下找到该节点 i i i的 k k k临近向量子集. 当然第一 ...

最新文章

  1. html5判断text文本是数字,JavaScript常用判断写法大全
  2. 如何在React Native和Firebase中设置Google登录
  3. Python爬虫淘宝商品详情页价格、类似数据
  4. 【SICP归纳】6 副作用与环境模型
  5. embedding.assign(embedding_input)的解读
  6. GlideDemo【Glide3.7.0版本的简单使用以及圆角功能】
  7. 遥感学习教学课件分享
  8. tomcat中运行PHP项目
  9. Firefox OS开发指南
  10. 暗影精灵7安装Ubuntu双系统、RTX3060 Nvidia 驱动及搭建深度学习环境
  11. 07.rpx布局与样式导入
  12. 怎么安装LINUX系统
  13. hadoop暂时/永久关闭安全模式
  14. python分支结构if详解
  15. linux FTP云盘
  16. 错误:The ‘pycocotools>=2.0‘ distribution was not found and is required by the application
  17. IB中文课程介绍:语文的另一种可能
  18. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(标准灯光分类及简介—目标聚光灯、泛光灯、台灯+射灯+壁灯+筒灯+电视灯+平行光,灯带+天光灯)图文教程之详细攻略
  19. 通知:2020年CPA机考系统已开放!
  20. 工作实战之xss攻击防范

热门文章

  1. 学习web前端能做游戏开发吗?
  2. ps 中左边的工具栏消失了,解决方法
  3. A*算法在Unity中的实现
  4. cannot open shared object file
  5. 利用PIL将图像处理为黑白和灰色图片
  6. 计算机大三学生怎么找实习工作?学了计算机很迷茫怎么办?
  7. 《SRE:Google运维解密》读后有感
  8. snmp No Such Instance currently exists at this OID
  9. 域名型通配符ssl证书_通配符SSL证书是否支持三级子域名?
  10. 个人博客成长分析(一)