【AI知识点】近似最近邻搜索(ANN, Approximate Nearest Neighbor Search)
近似最近邻搜索(ANN, Approximate Nearest Neighbor Search) 是一种用于高维数据检索的技术,目标是在给定查询的情况下,快速找到距离查询点最近的数据点,尽管结果可能并不完全精确。这种方法特别适用于高维数据(如图像、文本嵌入、用户行为特征等)的快速相似性搜索。
1. 最近邻搜索(NNS)
最近邻搜索(Nearest Neighbor Search, NNS) 是指在一个数据集中,给定一个查询点,找到与该点最接近的一个或多个点。对于低维数据,如二维或三维空间,可以通过简单的几何方法(如欧几里得距离)快速完成这种搜索。然而,当数据的维度非常高时(如深度学习中的嵌入向量通常有数百或上千维),标准的最近邻搜索方法变得非常耗时和计算复杂,因为搜索空间呈指数级增长。这种现象被称为维度灾难(curse of dimensionality)。
在这种高维数据场景中,近似最近邻搜索 提供了一种权衡方案,即通过舍弃一些精度,来显著提高搜索速度。
2. 为什么选择近似最近邻搜索(ANN)
在许多应用中,找到近似的最近邻已经足够,例如推荐系统、图像检索、文本相似性搜索等。这些场景更注重响应速度,而不一定要求找到完全最接近的点。通过允许近似的结果,ANN 方法在精度和速度之间取得平衡,适合大规模高维数据场景。
例子:
-
图像检索:给定一张图像,用户希望找到与之相似的图像。尽管用户并不要求找到精确的最相似图像,但要求结果在几毫秒内返回,近似相似的图像检索结果已经可以满足用户需求。
-
文本相似性搜索:对于一段输入文本,ANN可以快速找到语义上相似的其他文本,即使找到的文本并不是与输入完全相同。
3. 近似最近邻搜索的工作原理
ANN 的主要目标是通过优化算法结构,减少高维数据中查找最近邻的时间复杂度。典型的算法有以下几类:
a. 分区树方法
这些方法通过将数据集划分为不同的子区域,减少搜索空间。例如:
-
KD树(k-dimensional tree):将空间递归地划分为一系列超平面。KD树适合低维度数据,但在高维数据上效率较低。
-
球树(Ball tree):用球体代替超平面来划分空间,适合处理高维数据。
尽管这些方法能加速查询,它们在维度非常高的情况下仍然不够高效,因此更多高维情况下使用的ANN方法会采用其他策略。
b. 局部敏感哈希(LSH, Locality Sensitive Hashing)
LSH 是一种非常流行的ANN方法,通过将相似的数据点散列到相同的桶(bucket)中,从而减少需要检查的点的数量。
工作原理:
- 哈希函数设计:LSH的核心是设计一组哈希函数,使得相似的数据点有较高概率被映射到相同的桶中,而不相似的点被映射到不同的桶。
- 哈希映射:将数据点通过这些哈希函数映射到多个桶中。
- 快速搜索:对于给定的查询点,只需要检查与查询点映射到同一桶的数据点,从而大幅减少比较的次数。
LSH特别适用于欧几里得距离和余弦相似度度量的高维数据。
c. 矢量量化(Vector Quantization, VQ)
矢量量化方法将数据集划分为有限数量的码字(centroids),然后仅在这些码字中进行最近邻搜索。常用的技术有产品量化(Product Quantization, PQ),它通过将高维空间分割成低维子空间并对每个子空间量化,从而大大减少搜索空间。
d. 图嵌入法(Graph-based Methods)
图嵌入法使用基于图的结构来加速ANN。通过构建数据点之间的邻居图,查询点可以通过遍历图找到接近的数据点。这类方法通常会用到近邻图(k-nearest neighbor graph, k-NN graph)或小世界图,通过邻居节点的连接进行高效搜索。
常见的图嵌入法有:
- HNSW(Hierarchical Navigable Small World):是一种基于小世界网络的高效算法,在现实中被广泛应用,如Facebook的FAISS库中。
4. 近似最近邻搜索的实际应用
a. 推荐系统
推荐系统中,经常需要快速找到与用户过去行为或喜好相似的其他产品、电影、音乐等。ANN算法能帮助系统在大规模用户数据中快速找到相似的用户或物品,从而提供个性化推荐。
b. 图像搜索
在图像搜索系统中,用户上传图片后,系统需要找到数据库中与之相似的图片。通过ANN,系统可以在海量图片数据中快速找到类似的图像,即使这些图像只是近似相似而不是完全相同。
c. 文本相似性搜索
在NLP任务中,ANN可以用于快速找到与输入文本相似的其他文本。例如,在一个FAQ系统中,用户输入问题时,系统通过ANN找到与该问题语义最接近的其他问题,从而提供匹配的答案。
d. 嵌入向量的快速检索
深度学习中的许多模型(如BERT、GPT等)将文本、图像等数据转化为高维嵌入向量。这些向量可以被用于表示数据的语义特征。在各种检索系统中,ANN算法可以高效地处理这些高维向量的相似性搜索,帮助系统快速找到最相关的数据。
5. 比喻解释
可以把ANN比作一个大图书馆的“快速查找系统”。假设图书馆里有百万本书,当你想找到与某本书内容相似的几本书时,如果你逐一阅读每本书来进行比较,会非常耗时。ANN的作用就像是图书馆里的一种快速分类系统,它把书本按照某些关键特征快速归类,然后通过这些特征的近似匹配,迅速帮你找到几本可能最接近的书。这种方法虽然不保证找到的书是100%最接近的,但可以在非常短的时间内给出足够好的结果。
6. 总结
近似最近邻搜索(ANN) 是一种为了提升高维数据相似性搜索效率的技术,它在牺牲一定精度的前提下,大大提升了搜索速度。它被广泛应用于推荐系统、图像检索、文本相似性搜索等实际场景。常见的ANN算法包括局部敏感哈希(LSH)、图嵌入法(如HNSW)、矢量量化(VQ)等,它们通过不同的方式优化搜索过程,解决了高维数据中的“维度灾难”问题。
相关文章:
【AI知识点】近似最近邻搜索(ANN, Approximate Nearest Neighbor Search)
近似最近邻搜索(ANN, Approximate Nearest Neighbor Search) 是一种用于高维数据检索的技术,目标是在给定查询的情况下,快速找到距离查询点最近的数据点,尽管结果可能并不完全精确。这种方法特别适用于高维数据&#x…...
编程工具简介
在编程工作中,选择合适的工具确实能够显著提升工作效率。以下是一些被广泛推荐的工具: 1. Visual Studio Code (VS Code):这是一款轻量级但功能强大的代码编辑器,支持多种编程语言,拥有丰富的插件生态系统࿰…...

汽车信息安全 -- 存到HSM中的密钥还需包裹吗?
目录 1.车规芯片的ROM_KEY 2.密钥加密与包裹 3.瑞萨RZ\T2M的密钥导入 4.小结 在车控类ECU中,我们通常把主控芯片MCU中的HSM以及HSM固件统一看做整个系统安全架构的信任根。 所以大家默认在HSM内部存储的数据等都是可信的,例如CycurHSM方案中使用HSM…...
【PostgreSQL】入门篇——SELECT、INSERT、UPDATE 和 DELETE 语句,SQL 中最常用的四种操作用法
1. SELECT 语句 描述 SELECT 语句用于从数据库中查询数据。可以选择特定的列或所有列,并可以通过条件过滤结果。 语法 SELECT column1, column2, ... FROM table_name WHERE condition;示例 假设我们有一个名为 employees 的表,结构如下:…...

【Ubuntu】安装常用软件包-mysql
我的几个服务是部署在docker的同一个网络里,这样相互访问就可以通过docker容器的名字访问,比如容器A访问容器B,就可以http://B:8080/xxx 这样访问,不用关心ip是多少。 所以mysql前面文章给安装到主机里,感觉有点坑自己…...
幂等性及技术解决方案
文章目录 定义幂等性 为什么需要幂等性幂等性设计注意事项幂等性的范围分布式锁解决幂等性 设计 延伸阅读 定义幂等性 简单地说,我们可以多次执行幂等运算而不改变结果或者使用相同的输入参数中被调用多次,则不具有额外效果的操作,也就是多…...
正向代理 反向代理
正向代理 正向代理是一种网络服务,它作为客户端和目标服务器之间的中间人,代表客户端向目标服务器发送请求并接收响应。以下是关于正向代理的详细解释: 工作原理 客户端配置: 客户端(如浏览器)配置为使用…...
【分布式微服务云原生】如何在ActiveMQ中优雅处理提前支付的延时订单
摘要 本文将深入探讨在ActiveMQ中如何处理用户提前支付的延时订单问题。我们将介绍如何通过更新订单状态、检查延迟任务、取消延迟消息、使用死信队列、消息选择性消费、设置合理的超时时间以及及时反馈和日志记录等策略,来确保系统的一致性和及时响应用户操作。文…...

Easy Excel从入门到精通!!!
目录 1.文件导入 1.1基本方式读取excel文件内容 1.2注解模型映射器读取excel 1.3多行表头读取 1.4文件上传读取 2.文件导出 2.1基本方式导出 2.2模型映射导出 2.3设置行高、列宽等内容 2.4合并单元格 2.5导出设置超链接、批注、公式 2.6模板填充对象导出 2.7模板填…...

简易CPU设计入门:取指令(三),ip_buf与rd_en的非阻塞赋值
在开篇,还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&…...

【算法】---归并排序(递归非递归实现)
参考 左程云算法 算法导论 前言 本篇介绍 归并排序分治法 前置知识 了解递归, 了解数组。 引入 归并排序 归并排序最早是由公认的现代计算机之父John von Neumann发明的, 这是一种典型的分治思想应用。 我们先介绍分治思想 分治思想 分治思想的…...
UniVue大版本更新:UniVue2.0.0-preview
大版本发布说明 距离上次更新好像已经过去很久了,最近太忙了没时间维护新版本,也是自己在使用的过程中发现了很多问题也有了更多的灵感,由于和之前的版本区别太大,决定重新开一个大版本。这个UniVue2之后的版本追求是性能…...

RabbbitMQ篇(环境搭建 - 下载 安装)(持续更新迭代)
目录 一、Windows 1. 下载安装程序 2. 安装配置erlang 3. 安装rabbitMQ 4. 验证 二、Linux 1. 下载rpm包 1.1. 下载Erlang的rpm包 1.2. 下载socat的rpm包 1.3. 下载RabbitMQ的rpm包 2. 安装 2.1. 安装Erlang 2.2. 安装socat 2.3. 安装RabbitMQ 3. 启动RabbitMQ服…...

C++基础补充(02)C++其他控制语句break continue goto等
文章目录 1. break2. continue 语句3. goto 语句goto的存在 4. 跳出多重循环4.1 goto 直接跳转4.2 C11及其后版本的 return 语句4.3 使用标志变量 在C中,控制语句用于管理程序的执行流程。常见有 break、continue 和 goto。 1. break break语句主要用于在循环或者s…...
决策树中联合概率分布公式解释说明
学习决策树时书本中有一公式 7-3 是: P ( X x i , Y y j ) p i j ( i 1 , 2 , … , m , j 1 , 2 , … , n ) P(X x_i, Y y_j) p_{ij} \quad (i 1, 2, \dots, m, \ j 1, 2, \dots, n) P(Xxi,Yyj)pij(i1,2,…,m, j1,2,…,n) 这个公式表示的是随机变…...

计算机毕业设计 农场投入品运营管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

php email功能实现:详细步骤与配置技巧?
php email发送功能详细教程?如何使用php email服务? 无论是用户注册、密码重置,还是订单确认,电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现php email功能,并提供一些配置技巧,帮助你更好…...

MapBox Android版开发 6 关于Logo
MapBox Android版开发 6 关于Logo Logo的显示查看源码及思路(Logo)第一步第二步 隐藏Logo示例查看源码及思路(Info)第一步第二步 隐藏Logo和Info示例 看到有网友留言问如何移除Logo,今天看了下V9源码,发现M…...

2024年房市
24年8月15日,国家统计局公布,“7月末,商品房待售面积73926万平方米”。(原文链接:https://www.stats.gov.cn/sj/zxfb/202408/t20240815_1955982.html) 7.39亿平方存量商品房,估价均价1万每平,总价约&am…...
index索引
index索引: create index 【1】on 【2】(【3】) 1为索引名,通常为id_表名_列名。2为表名。3为列名。 CREATE INDEX id_account_id ON account(id); -- 根据id创建索引 CREATE INDEX id_account_idname on account(id,name); -- 创建组合索引 索…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
使用 uv 工具快速部署并管理 vLLM 推理环境
uv:现代 Python 项目管理的高效助手 uv:Rust 驱动的 Python 包管理新时代 在部署大语言模型(LLM)推理服务时,vLLM 是一个备受关注的方案,具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...

Linux【5】-----编译和烧写Linux系统镜像(RK3568)
参考:讯为 1、文件系统 不同的文件系统组成了:debian、ubuntu、buildroot、qt等系统 每个文件系统的uboot和kernel是一样的 2、源码目录介绍 目录 3、正式编译 编译脚本build.sh 帮助内容如下: Available options: uboot …...

【Redis】Redis 的持久化策略
目录 一、RDB 定期备份 1.2 触发方式 1.2.1 手动触发 1.2.2.1 自动触发 RDB 持久化机制的场景 1.2.2.2 检查是否触发 1.2.2.3 线上运维配置 1.3 检索工具 1.4 RDB 备份实现原理 1.5 禁用 RDB 快照 1.6 RDB 优缺点分析 二、AOF 实时备份 2.1 配置文件解析 2.2 开启…...