当前位置: 首页 > news >正文

ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


ANN(Approximate Nearest Neighbor)搜索:最近邻搜索是一种在大规模数据集中快速找到与给定查询数据点距离最近的点的算法。与传统的精确最近邻搜索算法相比,ANN 通过牺牲一定的精度来换取更高的查询效率,适用于对实时性和性能要求较高的场景。ANN 算法通常可以分为基于树的方法、基于哈希的方法和基于图形的方法等多种类型,它们通过构建数据结构的树形表示、哈希表或图结构来实现对数据的快速划分和搜索。

索引库:

  • 索引库是一种专门设计的数据结构,旨在加速数据检索过程。在信息检索领域,它通过预先计算和存储数据的特定属性,使得在执行搜索查询时能迅速定位到相关数据,避免了扫描整个数据集的耗时操作。这一特性显著提升了数据库的查询性能,尤其是在处理大规模数据集时更为显著。
  • 在实际应用中,ANN(近似最近邻)搜索常与索引库结合使用,以实现更高效的数据检索。例如,Elasticsearch 8.0 版本引入了近似最近邻搜索功能,该功能通过 Dense Vector 字段类型实现,让用户能够迅速找到与给定查询向量最为接近的文档。此外,百度开源的高性能 ANN 检索引擎也集成了多种索引与查询优化技术,灵活应对各种应用场景的需求。

ANN 搜索在信息检索系统中通常如何平衡速度和准确性之间的关系?

在信息检索系统中,近似最近邻(ANN)搜索算法被用来在大数据集中快速找到与给定查询点最相似的数据点。为了平衡搜索速度和准确性,ANN 算法通常采取以下策略:

  1. 大数据集处理:当处理大规模数据集时,精确最近邻搜索可能变得缓慢。ANN 通过提供足够接近的结果来加快搜索速度,尤其是在数据量达到百万甚至十亿级别时。

  2. 高维数据处理:在高维空间中,精确最近邻搜索的计算成本显著增加。ANN 通过降维技术缩小搜索空间,提高处理复杂数据(如图像或文本)的效率。

  3. 实时应用支持:ANN 算法的快速响应特性使其适用于需要即时结果的场景,如推荐系统、欺诈检测和异常检测。

  4. 可接受的近似误差:在某些应用中,如图像搜索,用户可能更关心找到视觉上相似的图像而非绝对最近的一个,因此 ANN 可以容忍一定程度的近似误差以换取速度优势。

  5. 算法优化:ANN 检索引擎通过创新的检索算法,如分层可导航小世界(HNSW)算法,实现了在多种数据规模和场景下的高效检索,同时保持了较高的召回率和准确性。

  6. 技术迭代:随着业务的发展,检索引擎会不断进行优化和迭代,以确保技术的可靠性和成熟度,满足实际业务场景中的性能要求。

通过上述策略,ANN 搜索算法能够在信息检索系统中提供既快速又相对准确的搜索服务。

ANN 搜索在哪些具体应用场景下比精确最近邻搜索有优势?

ANN(近似最近邻)搜索相比精确最近邻搜索在以下应用场景中具有优势:

  1. 处理大规模数据集:当数据集中包含大量向量时,精确最近邻搜索的计算成本非常高,而 ANN 通过牺牲一定的精确度来显著减少搜索时间,适用于实时或近实时的搜索任务。

  2. 高维数据搜索:在高维空间中,精确最近邻搜索的性能急剧下降,因为几乎所有点之间的距离都趋于相同。ANN 算法能够有效地处理这种 “维数灾难”,通过近似方法快速找到足够接近的点。

  3. 资源受限环境:在计算资源有限的环境中,精确搜索可能不可行。ANN 算法由于其较低的计算和存储要求,更适合部署在移动设备或边缘计算场景。

  4. 近似匹配查询:在某些应用中,用户可能只需要找到 “足够好” 的结果,而不一定是绝对最接近的。ANN 可以在保持合理准确度的同时提供快速响应,满足这些应用的需求。

  5. 机器学习和数据挖掘:在语义检索、图像识别、推荐系统等领域,ANN 算法可以帮助快速找到具有相似特征的样本,用于模型训练或数据分析,提高整个过程的效率。

综上所述,ANN 搜索在需要快速处理大量或高维数据、资源受限或对精确度要求不是极端严格的场景中,相较于精确最近邻搜索具有明显优势。

Elasticsearch 8.0 中的 Dense Vector 字段类型是如何支持近似最近邻搜索的?

Dense Vector 字段类型的工作原理:Dense Vector 字段类型在 Elasticsearch 8.0 中得以引入,专门用于存储高维向量数据。这些数据常源自自然语言处理(NLP)模型生成的词嵌入或文档嵌入。此字段类型支持浮点类型的密集向量,最大维度可达 2048。对于执行向量相似性搜索,尤其是近似最近邻(ANN)搜索,Dense Vector 字段类型显得尤为有用。

近似最近邻搜索的支持:Elasticsearch 8.0 引入了分层导航小世界图(HNSW)算法,以支持高效的近似最近邻搜索。HNSW 通过构建一个图形结构,依据向量间的相似性来组织数据,从而有效应对高维向量的搜索挑战。相较于传统的精确搜索算法,如 KD 树,HNSW 在维持良好性能的同时,能够扩展至处理大型数据集,展现出显著优势。

索引和查询过程:在索引过程中,用户应将 Dense Vector 字段的 index 属性设置为 true,并明确指定一个相似性度量,例如 L2 距离。这样,Elasticsearch 便能在索引阶段自动计算向量间的相似性,并将相关信息存储于内存中,以支持快速检索。查询时,用户可利用近似最近邻搜索 API,迅速定位与查询向量最相近的 k 个向量。此过程无需遍历整个数据集,而是借助 HNSW 算法的图形结构高效筛选出最接近的候选向量,显著提升搜索效率。Elasticsearch 8.0 通过这一机制,为用户提供了一种既高效又可扩展的向量搜索方案,广泛适用于推荐系统、图像搜索、语义搜索等多种应用场景。


相关文章:

ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ ANN(Approximate Nearest Neighbor)搜索:最近邻搜索是一种在大规模数据集中快速找到与给定查询数据点距离最近的点的算法。与传统的精确最近邻搜索算法相比&#xff…...

勒索软件、供应链攻击等带来的思考!

2023年勒索软件、供应链攻击、地缘政治冲突与黑客活动主义、国家黑客间谍与APT组织活动成为网络安全的热点话题,生成式人工智能技术的武器化更是给动荡的全球网络安全威胁态势增加了不确定性、不对称性和复杂性。 即将到来的2024年,随着网络犯罪的规模化…...

【Nuxt】自定义插件和生命周期

自定义插件 方式一: app.vue // 创建插件(在app.vue中创建全局可以使用 而在某个页面中创建只有该页面可以使用) // 方式一: const nuxtApp useNuxtApp(); nuxtApp.provide("formDate", () > {return "2023-12-12"; }) nuxtAp…...

MySQL的简单介绍

文章目录 数据库关系型数据库非关系型数据”数据库的概念和用途MySQL数据库服务器、数据库和表的关系数据库的创建和删除表创建表修改常见的数据类型和约束字符串类型日期和时间类型PRIMARY KEY使用AUTO_INCREMENT使用UNIQUE使用FOREIGN KEY使用 SQL语言基础SQL语言简介SQL分类…...

leetcode 116.填充每个节点的下一个右侧结点指针

1.题目要求: 给定一个二叉树:struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。初始状态下,所有 ne…...

『 Linux 』网络基础

文章目录 协议分层OSI 七层模型TCP/IP 四层(五层)模型网络协议栈与操作系统的联系报文TCP/IP 通讯过程以太网通信的过程以太网的数据碰撞 协议分层 协议分层是计算机网络中奖网络协议进行组织和管理的方法; 通过将网络通信过程分成多个层次,每个层次负责特定的功能从而简化网络…...

Python酷库之旅-第三方库Pandas(070)

目录 一、用法精讲 281、pandas.Series.dt.daysinmonth属性 281-1、语法 281-2、参数 281-3、功能 281-4、返回值 281-5、说明 281-6、用法 281-6-1、数据准备 281-6-2、代码示例 281-6-3、结果输出 282、pandas.Series.dt.tz属性 282-1、语法 282-2、参数 282-…...

第一篇Linux介绍

目录 1、操作系统 2、Windows和Linux操作系统的区别 3、 Linux 的发行版本 4、 linux 分支 5、 Linux 的含义 6、Linux 特点 1、操作系统 常见操作系统有:Windows、MacOS、Unix/Linux。 类 UNIX Windows:其是微软公司研发的收费操作系统&#xff…...

在Windows编程中,MFC\C++中OnCopyData如何传递基础类型数据?

在C中,OnCopyData 并不是一个标准的C库或框架中的成员函数,它更常见于Windows编程中,特别是使用Win32 API或MFC(Microsoft Foundation Classes)时。OnCopyData 是一个在MFC应用程序中常用于处理来自其他应用程序的WM_C…...

10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享

在现代企业中,设计图纸和敏感数据的安全性至关重要。一旦图纸泄露,可能会对企业造成不可估量的损失。因此,选择一款高效、可靠的图纸加密软件显得尤为重要。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为保护工程图纸和设计文件安全的软…...

BUUCTF [安洵杯 2019]easy_serialize_php 1

打开题目,看到一串php代码,试着代码审计一下,看一下有用信息 可以看出是通过$_SESSION[img]来读取文件 extract可以将数组中的变量导入当前变量表 也就是说我们可以伪造$_SESSION 数组中的所有数据 这里传递一个参数fphpinfo 先用hackbar进…...

前端面试宝典【CSS篇】【5】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…...

stem32江科大自学笔记

江科大B站教程连接:【STM32入门教程-2023版 细致讲解 中文字幕】 系列文章目录 提示:收集stem32江科大自学笔记,方便自己和他人查看 视频对应目录STM32入门教程P1-3 [1-2]&[2-1]1.STM32简介、系统介绍、软件安装P4 [2-2]2.基于标准库(库…...

C++-类与对象基础

一,类的定义 1.1类定义格式 class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为mian类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者…...

嵌入式day20

feof: 检测文件是否到达结尾 ferroe: 检测文件是否发生错误 标准IO之文件定位 fseek() SEEK_END 指向最后一个字节的后一个,继续加,写文件,会将文件扩大 ftell() 获取…...

UE4 SLUA IOS打包报错解决办法

IOS打包报错:Fatal error "lua.h" file not found : SLua Unreal 在IOS远程打包编译的时候 Exteral没有copy过去,导致lua.h文件报错找不到,看了网上也没有写解决办法 错误信息截图: github上也有很多遇到改…...

SpringDI(依赖注入) 以及SpringIOC容器对Bean管理

一、SpringDI(依赖注入) 1.DI依赖注入 1.1 Spring DI的理解 关键字:名词解释 DI( Dependecy Inject,中文释义:依赖注入)是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器…...

伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)

Linux系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 第二章(上) Vim课堂与实验 文章目录 Linux系列文章目录一、前言二、学习内容:2.1 上课内容2.1.1 为什么要学习脚本编写?2.1.2 Bash编程语言2.1.3 SheBang2.…...

探索腾讯云AI代码助手的效能与实用性

前言开发环境配置项目实例应用一:功能介绍二:项目测试FFmpeg二次开发SDL应用加密播放器 帮助提升建议结语 ​ 前言 腾讯云的AI代码助手是一款强大的编码辅助工具,利用混元代码大模型技术,提供技术对话、代码补全、代码诊断和优化…...

清华大学终于把Python整理成了《漫画书》

前言 随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?小编这里整理了一套python编程零基础自学教程,清华大佬196小时讲完的,全程干货无废…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...