向量检索-用最简单的语言

       看之前首先要懂两个基本条件:

        1. 什么是向量

        2. 会使用向量的检索

        3. 知道至少一种向量的索引

这里我们拿比较的流行的HNSW算法来进行分析:

       最直接的做法是根据向量在给定数据集中采用KNN来找到K个最近的向量。但在实际应用中,待检索的数据往往是千万甚至亿级,KNN的计算量过大。因此,通常采用ANN(Approximate Nearest Neighbor,相似近邻)来快速相似检索

                ​​​​​​​        

相似性检索:        

在NSW中,构建图的阶段通过节点的随机插入来引入随机性,构建出一个small world graph,从而实现快速检索。但NSW构造的图并不稳定,节点之间的差异较大:

  • 先插入的顶点,其连接的邻居节点,基本都比较远(弱连接属性强)

  • 后插入的顶点,其连接的邻居节点,基本都比较近(弱连接属性弱)

  • 对于具有聚类效应的点,由于后续插入的点可能都和其建立连接,对应节点的度可能会比较高

如何构造具有更稳定的small world graph呢?HNSW算法就在NSW基础之上引入了分层图的思想,通过对图进行分层,实现由粗到细的检索。

1、图构造

HNSW在构造图时如下图所示:

核心如下:

  • layer=0层包含了数据集中的所有点

  • layer=l层是以50%的概率随机从layer=l-1层中选择的点构成的。因此,最大层数为

  • 插入构图时,先计算新顶点可以深入到第几层(),在每层的NSW图中查找m个近邻,然后连接它们

2、图检索

对HNSW进行查询时,从最高层开始检索,逐层往下,从而实现快速搜索

 

总结:想要更高性能的相似性检索需要需要依赖索引,比如HNSW,当我们使用索引检索时它和暴力检索不同的的是:

        1. 暴力检索会遍历所有节点,然后进行一 一返回

        2. 使用索引检索时,它返回的是ANN 所有的近邻节点,返回近邻节点的时候它并不会按照从最相似的开始返回,而是将所有近邻结果全部返回,返回之后在进行排序。

        3. 要返回多少近邻节点是算法中的参数,可以进行调节。当然,也可以返回之后在进行过滤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14.kubernetes部署Dashboard

Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,D…

k8s的存储卷之静态

存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消…

Python自动化测试框架:Unittest 断言详解

断言是编程中常用的一种验证方法,也是测试代码中最重要的部分,用于验证某个条件是否为真,验证测试结果与预期结果是否一致。 unittest 提供了方便的断言方法,用于验证测试结果是否符合预期,若验证失败,则会…

JavaScript不常见但好用的运算符

前言 如果我问在JavaScript中&#xff0c;你用到的最常见的运算符是什么&#xff0c;你可能会回答以下几种&#xff1a; 、 -、 *、/、 %、 、 ?、 !、 &&、 ||、 >、 < 如果我问你知道但是不常用、不会用的运算符&#xff0c;你可能会回答以下几种&#xff…

leetcode 动态规划(最后一块石头的重量II、目标和、一和零)

1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度&#xff1a;中等 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < …

FlinkOnYarn 监控 flink任务

Flink任务一般为实时不断运行的任务&#xff0c;如果没有任务监控, 任务异常时无法第一时间处理会比较麻烦。 这里通过调用API接口方式来获取参数&#xff0c;实现任务监控。 Flink任务监控&#xff08;基于API接口编写shell脚本&#xff09; 一 flink-on-yarn 模式 二 编写she…

用友移动管理系统 upload任意文件上传漏洞

产品介绍 用友移动系统管理系统是用友公司推出的一款移动办公解决方案&#xff0c;旨在帮助企业实现移动办公、提高管理效率和员工工作灵活性。 漏洞描述 用友移动系统管理系统/mobsm/common/upload等接口存在任意文件上传漏洞&#xff0c;未经授权攻击者通过漏洞上传任意文…

Python---爬虫学习(详细注释/优化)

from bs4 import BeautifulSoup import re # 正则表表达式文字匹配 import urllib.request, urllib.error # 指定url&#xff0c;获取网页数据 import xlwt findlink re.compile(ra href"(.*?)">) # 电影链接 findImageSrc re.compile(r<img.*src"(…

Flutter组件GridView使用介绍

介绍 GridView 是 Flutter 中用于创建网格布局的滚动小部件。它可以创建多列布局&#xff0c;并且每个网格单元可以包含一个小部件。 GridView 提供了几种构造函数来创建不同类型的网格布局&#xff1a; GridView&#xff1a;最通用的构造函数&#xff0c;完全自定义网格布局…

C++系列十六:类与对象

一、引言 在C编程中&#xff0c;类&#xff08;Class&#xff09;和对象&#xff08;Object&#xff09;是核心概念&#xff0c;它们为程序员提供了一种组织和封装数据及操作的方法。类作为对象的模板或蓝图&#xff0c;定义了对象的属性和行为。对象则是类的实例&#xff0c;…

怎么在unity3D工程中导入Newtonsoft.Json

打开 Unity 编辑器。 转到菜单栏的 “Window”&#xff08;窗口&#xff09;选项&#xff0c;然后选择 “Package Manager”&#xff08;包管理器&#xff09; 在搜索框中输入 “Newtonsoft Json” 进行搜索。 注意&#xff1a;要选择Unity Registry 在搜索结果中&#xf…

triton教程1:前言、安装、跑官方例子与推荐视频

一、为啥用triton&#xff1f; 之前部署使用过tensorrt视频流硬解码前后处理硬件&#xff08;cuda&#xff09;加速&#xff0c;已经是工业化、商业化的一套标准流程了&#xff0c;现在面临的挑战是&#xff1a; 多模型管理&#xff08;一个小公司所有算法工程师的模型推理都…

GC6109——双通道5V低电压步进电机驱动芯片,低噪声、低振动,应用摄像机,机器人等产品中

GC6109是双通道5V低电压步进电机驱动器&#xff0c;具有低噪声、低振动的特点&#xff0c;特别适用于相机的变焦和对焦系统&#xff0c;万向节和其他精密、低噪声的STM控制系统。该芯片为每个通道集成了256微步驱动器。带SPl接口&#xff0c;用户可以方便地调整驱动器的参数。内…

SpringCloudAlibaba微服务架构实战派上下册技术交流!

另外我的新书RocketMQ消息中间件实战派上下册&#xff0c;在京东已经上架啦&#xff0c;目前都是5折&#xff0c;非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

Nginx介绍与安装

目录 nginx服务 1、Nginx 介绍 2、为什么选择 nginx 3、IO多路复用 1、I/O multiplexing【多并发】 2、一个请求到来了&#xff0c;nginx使用epoll接收请求的过程是怎样的? 3、异步&#xff0c;非阻塞 4、nginx 的内部技术架构 5、yum安装部署nginx和配置管理 1.获取…

【Leetcode】242. 有效的字母异位词

【Leetcode】242. 有效的字母异位词 题目链接代码 题目链接 【Leetcode】242. 有效的字母异位词 代码 func isAnagram(s string, t string) bool {// 如果s串跟t串的长度不等&#xff0c;则一定为falseif len(s) ! len(t) {return false}// 创建map统计s串每个字符出现的个数…

spark相关

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

MySQL运维实战(3.3) 管理数据库(database)

作者&#xff1a;俊达 引言 数据库的创建和管理是构建可靠数据的关键&#xff0c;关系到所存储数据的安全与稳定。在 MySQL 这个强大的关系型数据库系统中&#xff0c;数据库的创建与管理需要精准的步骤和妥善的配置。下面&#xff0c;将深入探讨如何使用MySQL 来管理数据库&…

PHP企业物资管理系统源码带文字安装教程

PHP企业物资管理系统源码带文字安装教程 技术架构 主要框架 : PHP7.0 laravel5.4  mysql5.5.36 composer1.3.2(依赖管理) 前端 : jquery bootstrap jstree&#xff08;树形结构&#xff09; echart&#xff08;图表&#xff09; layer&#xff08;弹出层&#xff09; 企…

JavaScript递归技巧的前世今生:深入解析递归及其与堆栈的关系

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 递归作为一种能够用简洁的方式定义复杂对象的编程技巧,在计算机科学中被广泛应用。它借助系…