在一个给定向量数据集中,按照某种度量方式,检索出与查询向量相近的K个向量(K-Nearest Neighbor,KNN),但由于KNN计算量过大,我们通常只关注近似近邻(Approximate Nearest Neighbor,ANN)问题。

NSW

NSW在构图时,每次随机选择点,加入图中。每次加入点都查找与其最近邻的m点以添加边。最终形成如下图所示的结构:

在搜索 NSW 图时,我们从预定义的入口点开始。这个入口点连接到附近的几个顶点。我们确定这些顶点中的哪一个最接近我们的查询向量并移动到那里。

       如从A开始,A的临近点C离P的距离更近更新。然后C的临近点D距离P更近,然后D的临近点B和F没有更近,程序停止,即为D点。

HNSW

图的构建从顶层开始。进入图表后,算法贪婪地遍历边,找到与我们插入的向量q最接近的ef邻居——此时ef = 1。
       找到局部最小值后,它会向下移动到下一层(就像在搜索期间所做的那样)。重复这个过程,直到到达我们选择的插入层。这里开始第二阶段的建设。
       ef值增加到我们设置的efConstruction参数,这意味着将返回更多最近的邻居。在第二阶段,这些最近的邻居是新插入元素q的链接的候选者, 并作为下一层的入口点。
       经过多次迭代后,添加链接时还要考虑两个参数。M_max,它定义了一个顶点可以拥有的最大链接数,同样的M_max0,它定义了针对第 0 层中的顶点的最大连接数。

HNSW 代表 Hierarchical Navigable Small World,一个多层图。数据库中的每个对象都在最低层(图片中的第 0 层)中捕获。这些数据对象连接得很好。在最低层之上的每一层上,表示的数据点较少。这些数据点与较低层匹配,但每个较高层中的点呈指数级减少。如果有搜索查询,将在最高层找到最近的数据点。在下面的示例中,这只是多了一个数据点。然后它更深一层,从最高层中第一个找到的数据点中找到最近的数据点,并从那里搜索最近的邻居。在最深层,将找到最接近搜索查询的实际数据对象。
       HNSW 是一种非常快速且内存高效的相似性搜索方法,因为只有最高层(顶层)保存在缓存中,而不是最低层中的所有数据点。只有最接近搜索查询的数据点在被更高层请求后才会被加载,这意味着只需要保留少量内存。

距离度量

目前实现的 HNSW 假设角距离,也称为余弦距离。这在技术上实现为导入时的向量归一化步骤(使数据具有相同的量级),然后进行点积计算,这相当于余弦。

References:

Paper—Approximate nearest neighbor algorithm based on navigable
small world graphs
Paper—Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs
VID—HNSW for Vector Search Explained and Implemented with Faiss (Python)
https://www.pinecone.io/learn/hnsw/
一文看懂HNSW算法理论的来龙去脉
CODE—nsw.html
VID—王炜教授分享 Approximate Nearest Neighbor Queries for High Dimensional Data

Video Google: A Text Retrieval Approach to Object Matching in Videos

Scalable Recognition with a Vocabulary Tree(基于词汇树的可伸缩识别)

检索 : Approximate Nearest Neighbor NSW + HNSW相关推荐

  1. ANN(Approximate Nearest Neighbor)简介

    简介(Introduction): ANN(Approximate Nearest Neighbor)是一种用于在大规模数据集中寻找最近邻居的算法.它的目标是在尽可能短的时间内找到与给定查询点最近的数 ...

  2. Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval

    Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval 密集检索 (DR) 的有效性通常 ...

  3. 机器学习算法系列(二十二)-近似k近邻算法-Annoy(Approximate Nearest Neighbor / ANN)

    阅读本文需要的背景知识点:k近邻算法.一丢丢编程知识 一.引言   前面一节我们学习了机器学习算法系列(二十一)-k近邻算法(k-Nearest Neighbor / kNN Algorithm),其 ...

  4. 近似最近邻搜索ANN(Approximate Nearest Neighbor)

    目前ANN近似近邻搜索有两种比较流行的方法:树方法和哈希方法. 特点概括 基于树的方法的一些特点概括: 递归了划分数据:分而治之.Recursively partition the data: Div ...

  5. 向量快速检索方法总结——KDtree/Balltree/Annoy/NSW/HNSW

    文章目录 导语 线性扫描 KDTree 构造 检索 特点 BallTree 构造 检索 特点 Annoy 构造 检索 特点 NSW 构造 检索 HNSW 构造 查找 导语 为什么要用向量快速检索呢?因 ...

  6. 最近邻搜索|Nearest neighbor search

    维基百科:https://en.wikipedia.org/wiki/Nearest_neighbor_search 觉得整理的挺好,翻译 最近邻搜索( NNS ) 作为**邻近搜索(proximit ...

  7. Product Quantization for Nearest Neighbor Search论文实验

    最近邻搜索之乘积量化(Product Quantizer)实验 记得大学三时有个老师跟我们说,检验是否深刻理解一篇论文的做法之一就是给你一篇论文,看你能否将论文中的结果重复实验出来,当时觉得老师的说法 ...

  8. Approximate Nearest Neighbors.接近最近邻搜索

    (一):次优最近邻:http://en.wikipedia.org/wiki/Nearest_neighbor_search 有少量修改:如有疑问,请看链接原文..... 1.Survey: Near ...

  9. 最近邻分类器(Nearest Neighbor Classifier)

    先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和深度学习中的卷积神经网/Convolutional Neural Networks ...

最新文章

  1. 浅谈WPF的VisualBrush
  2. 预告|第四届工业大数据创新竞赛决赛答辩倒计时
  3. 机器学习 | 图像检索开源项目合集
  4. explode php 报错,PHP函数explode和split的区别
  5. CentOS下安装JDK1.7
  6. 单(liu_runda学长的神题)
  7. 如何使用Rebase以及bind来重定位和绑定dll
  8. 数据结构 python的书推荐-为什么程序员一定要学数据结构?数据结构书单推荐~...
  9. java十进制输出_JAVA输入一个十进制数N,输出r进制的数
  10. scrapy爬虫,爬取图片
  11. 第十二届蓝桥杯大赛软件赛省赛第二场【C++B组】
  12. windows的php如何安装目录结构,禅道的目录结构
  13. Restful风格,PUT修改功能请求,表单中存在文件报错-HTTP Status 405 - Request method 'POST' not supported...
  14. hexo+githup搭建属于自己的博客
  15. 如何做好一场技术演讲?
  16. ffmpeg系列-解决ffmpeg获取aac音频文件duration不准
  17. Hibernate 的配置文件
  18. 计算机组装diy,电脑diy,详细教您如何组装电脑
  19. c语言看门狗的作用,看门狗定时器工作原理及作用
  20. wmp 所有的事件和属性(转)

热门文章

  1. java less函数_AWS Serverless部署java api(LAMBDA篇)
  2. 2015年蓝桥杯C/C++组B组第三题:三羊献瑞
  3. 巴比特 | 元宇宙每日必读:老字号企业纷纷搭车元宇宙卖“月饼”,今年中秋“空气月饼”最吃香?...
  4. python灰度图像变彩色_如何在cv2python中实现灰度图像到彩色图像的转换
  5. 值传递和引用传递,看这篇就够了!!!
  6. Command line is too long. Shorten command line for className
  7. linux基础(十二~iso光盘镜像文件的安装)
  8. 高德JS AP,可供黑莓html 5应用使用
  9. 让CPU告诉你硬盘和网络到底有多慢
  10. C# 中的DataGridView 如何设置固定列宽