Elasticsearch:什么是向量数据库?

向量数据库定义

向量数据库是将信息存储为向量的数据库,向量是数据对象的数值表示,也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据(例如图像、文本或传感器数据)的海量数据集进行索引和搜索。 向量数据库是为了管理向量嵌入而构建的,因此为非结构化和半结构化数据的管理提供了完整的解决方案。

向量数据库与向量搜索库或向量索引不同:它是一种数据管理解决方案,支持元数据存储和过滤、可扩展、允许动态数据更改、执行备份并提供安全功能。

向量数据库通过高维向量来组织数据。 高维向量包含数百个维度,每个维度对应于它所表示的数据对象的特定特征或属性。

什么是向量嵌入?

向量嵌入是主题、单词、图像或任何其他数据的数字表示。 向量嵌入(也称为嵌入)由大型语言模型和其他人工智能模型生成。

每个向量嵌入之间的距离使向量数据库或向量搜索引擎能够确定向量之间的相似性。 距离可以代表数据对象的多个维度,从而使机器学习和人工智能能够理解模式、关系和底层结构。

了解如何部署文本嵌入

更多关于向量嵌入的知识,请阅读文章 “Elasticsearch:什么是向量嵌入?”。

向量数据库如何工作?

向量数据库通过使用算法来索引和查询向量嵌入来工作。 该算法通过哈希、量化或基于图的搜索来实现近似最近邻 (ANN) 搜索。

为了检索信息,人工神经网络搜索会找到查询的最近向量邻居。 与 kNN 搜索(已知最近邻,或真正的 k 最近邻算法)相比,计算强度较小,近似最近邻搜索的准确度也较低。 然而,它对于高维向量的大型数据集可以高效且大规模地工作。

向量数据库管道如下所示:

1)索引:通过哈希、量化或基于图的技术,向量数据库通过将向量映射到给定的数据结构来对向量进行索引。这使得搜索速度更快。

  • 哈希:哈希算法,比如局部敏感哈希(LSH)算法,最适合进行近似最近邻搜索,因为它能够提供快速而近似的结果。LSH 使用哈希表(类似数独谜题)来映射最近邻。查询将被哈希到一个表中,然后与同一表中的一组向量进行比较,以确定相似性。
  • 量化:量化技术,比如产品量化(PQ),将向量分解为较小的部分,并用代码表示这些部分,然后将部分重新组合。结果是向量及其组件的代码表示。这些代码的集合被称为码书(codebook)。在查询时,使用量化的向量数据库将查询分解为代码,然后与码书进行匹配,以找到最相似的代码生成结果。
  • 基于图:图算法,比如分层可导航小世界(HNSW)算法,使用节点表示向量。它对节点进行聚类,并在相似节点之间绘制线条或边缘,创建层次图。当发起查询时,算法将导航图层次结构,以找到包含与查询向量最相似的向量的节点。

向量数据库还将索引数据对象的元数据。 因此,向量数据库将包含两个索引:向量索引和元数据索引。

2)查询:当向量数据库收到查询时,它将索引向量与查询向量进行比较,以确定最近的向量邻居。 为了建立最近邻,向量数据库依赖于称为相似性度量的数学方法。 存在不同类型的相似性方法:

  • 余弦相似度在 -1 到 1 的范围内建立相似度。通过测量向量空间中两个向量之间的角度的余弦,它可以确定向量是完全相反的(用 -1 表示)、正交的(用 0 表示)或 相同(用 1 表示)。
  • 欧氏距离通过测量向量之间的直线距离来确定 0 到无穷大范围内的相似度。 相同的向量用0表示,而较大的值表示向量之间的差异较大。
  • 点积相似性方法确定负无穷大到无穷大范围内的向量相似性。 通过测量两个向量的大小和它们之间角度的余弦的乘积,点积将负值分配给彼此远离的向量,将 0 分配给正交向量,将正值分配给指向相同方向的向量。


3)后处理:向量数据库管道中的最后一步有时是后处理或后过滤,在此期间向量数据库将使用不同的相似性度量来重新排列最近的邻居。 在此阶段,数据库将根据元数据过滤搜索中识别的查询最近邻居。

某些向量数据库可能会在运行向量搜索之前应用过滤器。 在这种情况下,它被称为预处理或预过滤。

为什么向量数据库很重要?

向量数据库很重要,因为它们保存向量嵌入并支持一系列功能,包括索引、距离度量和相似性搜索。 换句话说,向量数据库专门用于非结构化数据和半结构化数据的管理。 因此,向量数据库是机器学习和人工智能数字领域的重要工具。

向量数据库核心组件

向量数据库可能具有以下核心组件:

  • 性能和容错:分片和复制过程确保向量数据库的高性能和容错性。 分片涉及跨多个节点对数据进行分区,而复制涉及跨不同节点制作数据的多个副本。 如果节点发生故障,这可以实现容错和持续的性能。
  • 监控能力:为了确保性能和容错能力,向量数据库需要监控资源使用情况、查询性能和整体系统运行状况。
  • 访问控制能力:向量数据库也需要数据安全管理。 访问控制监管可确保合规性、责任性以及审核数据库使用情况的能力。 这也意味着数据受到保护:拥有权限的人可以访问数据,并且保留用户活动的记录。
  • 可扩展性和可调性:良好的访问控制功能会影响向量数据库的可扩展性和可调性。 随着存储数据量的增加,水平扩展的能力变得必不可少。 不同的插入和查询速率以及底层硬件的差异都会影响应用程序的需求。
  • 多用户和数据隔离:在具备可扩展性和访问控制功能的同时,向量数据库应该能够容纳多用户或多租户。 与此相一致,向量数据库应该启用数据隔离,以便任何用户活动(例如插入、删除或查询)对其他用户保持私有 —— 除非另有要求。
  • 备份:向量数据库创建定期数据备份。 这是向量数据库在系统发生故障时的关键组件 —— 在数据丢失或数据损坏的情况下,备份可以帮助将数据库恢复到以前的状态。 这可以最大限度地减少停机时间。
  • API 和 SDK:向量数据库使用 API 来实现用户友好的界面。 API 是一种应用程序编程接口或一种软件,它使应用程序能够通过请求和响应相互 “对话”。 API 层简化了向量搜索体验。 SDK(即软件开发工具包)通常包含 API。 它们是数据库用于通信和管理的编程语言。 SDK 有助于开发人员友好地使用向量数据库,因为它们在开发特定用例(语义搜索、推荐系统等)时不必担心底层结构。

向量数据库和传统数据库有什么区别?

传统数据库以表格形式存储信息,并通过为数据点分配值来索引数据。 当查询时,传统数据库将返回与查询完全匹配的结果。

向量数据库以嵌入的形式存储向量并启用向量搜索,向量搜索根据相似性指标(而不是精确匹配)返回查询结果。 向量数据库在传统数据库无法做到的地方“提升”了:它被有意设计为与向量嵌入一起操作。

向量数据库也比传统数据库更适合某些应用,例如相似性搜索、人工智能和机器学习应用,因为它支持高维搜索和定制索引,并且具有可扩展性、灵活且高效。

向量数据库的应用

向量数据库用于人工智能、机器学习 (ML)、自然语言处理 (NLP) 和图像识别应用。

  • AI/ML应用:向量数据库可以通过语义信息检索和长期记忆来提高 AI 能力。
  • NLP 应用:向量相似性搜索是向量数据库的关键组成部分,对于自然语言处理应用非常有用。 向量数据库可以处理文本嵌入,这使计算机能够 “理解” 人类或自然语言。
  • 图像识别和检索应用:向量数据库将图像转换为图像嵌入。 通过相似性搜索,他们能够检索相似的图像或识别匹配的图像。

向量数据库还可以服务于异常检测和人脸检测应用。

向量数据库的未来趋势

向量数据库的未来与人工智能和机器学习的发展以及与使用深度学习为结构化和非结构化数据生成更强大的嵌入相关的研究密切相关。

随着创建更好嵌入的能力的提高,向量数据库更好地处理和管理这些嵌入的能力需要新的技术和算法。 事实上,此类新方法一直在开发中。

其他研究致力于混合数据库的开发。 这些旨在结合传统关系数据库和矢量数据库的强大功能,以满足对高效和可扩展数据库日益增长的需求。

Elasticsearch 的向量数据库

Elasticsearch 包含一个用于向量搜索的向量数据库。 Elastic 使开发人员能够使用 Elasticsearch 相关性引擎 (ESRE) 构建自己的向量搜索引擎。

借助 Elasticsearch 工具,你可以构建一个向量搜索引擎,该引擎可以搜索非结构化和结构化数据、应用过滤器和分面、对文本和矢量数据应用混合搜索,并利用文档和字段级安全性,同时在本地运行 云或混合环境中。

探索 Elasticsearch 向量数据库

向量数据库资源

  • Elasticsearch 向量数据库
  • Elastic 的向量搜索原理
  • 阅读有关 ANN 算法的更多信息
  • 了解如何实现图像相似度搜索

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

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

相关文章

Linux 性能压测

目录 1、内存 (1) 查看内存指令 (2) 清理缓存 (3) swap分区的作用 2、cpu (1) 查看cpu核心数 (2) 查看cpu使用率 (3) 查看cpu使用百分比 (5) 查看cpu温度 (6) cpu压力测试 3、磁盘 (1) 查看磁盘信息 (2) 数据恢复相关 (3) 查看磁盘io (4) 磁盘压测 1、内存 (1) …

MATLAB Simulink +STM32硬件在环 (HIL)实现例程测试

MATLAB Simulink STM32硬件在环 (HIL)实现例程测试 📍相关篇《STM32CubeMxMATLAB Simulink点灯程序》✨本例程没有使用到STM32CubeMX来创建工程(在Simulink 中不是选择的STM32xxxbased类型的)。 🔖STM32xxx…

基于SSM的网上手机销售系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

llama.cpp部署通义千问Qwen-14B

llama.cpp是当前最火热的大模型开源推理框架之一,支持了非常多的LLM的量化推理,生态比较完善,是个人学习和使用的首选。最近阿里开源了通义千问大语言模型,在众多榜单上刷榜了,是当前最炙手可热的开源中文大语言模型。…

go语言学习-并发编程(并发并行、线程协程、通道channel)

1、 概念 1.1 并发和并行 并发:具有处理多个任务的能力 (是一个处理器在处理任务),cpu处理不同的任务会有时间错位,比如有A B 两个任务,某一时间段内在处理A任务,这时A任务需要停止运行一段时间,那么会切换到处理B任…

微服务的应用架构

架构描述的是在更高层次将应用拆分为子系统或模块的方法,以及这些子系统之间的交互关系。在一个基于微服务架构构建的应用中,每个服务都需要有自己的架构。 事实上,单体应用在复杂度较低时,它的生产效率是要高于微服务的。只有在…

算法 | 每日一题 | 可获得的最大点数 | 滑动窗口

1423. 可获得的最大点数 原题地址: 力扣每日一题:可获得的最大点数 几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿…

LoRaWAN协议栈LoRaMac-Node版本变迁历史(最新4.7.0)

V4.7.0 2022年12月9日发布 简介 基于“ LoRaWAN 规范1.0.4”和“ LoR aWan 规范1.1.0 FCntDwn 勘误表”的版本,“ LoRA WAN 区域参数2-1.0.3” GitHub报告了问题更正 已知的限制 SAMR34平台不实现NVM存储功能。这是大于或等于1.0.4的LoRaWAN版本的要求。 维护者…

JsonDeserialize序列化和反序列化(JSON转Java对象,反之)

我是直接用默认的&#xff0c;省事省事省事 JsonSerialize // 序列化JsonDeserialize // 反序列化private List<List<LinkedHashMap<String, Object>>> s; 一、JsonDeserialize注解介绍 JsonDeserialize注解是Jackson库提供的一种注解&#xff0c;用于指定反…

React18 入门与进阶

React18 入门与进阶 前言一、核心概念与类组件使用1、虚拟DOM与新的渲染写法2、JSX 与 JSX 的使用3、类组件和函数组件4、类组件与类组件通信5、props详解与注意事项6、类组件中事件的使用7、类组件响应式数据实现与原理8、PureComponent 与 shouldComponentUpdate9、immutable…

Java数据结构之《构造哈夫曼树》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等(偏难理解)的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题…

Difference between getc(), getchar(), and gets()

getc(): 从输入中只能读单个字符 getchar()&#xff1a;从标准输入流中输入都单个字符。 两者基本等同&#xff0c;唯一不一样的是getc()是任何输入流&#xff0c;而getchar()是标准输入流。 gets:可以读入含有空格的字符串 // Example for getc() in C #include <stdio.h…

Vue使用@import 引入样式文件全局污染、使用scoped失效问题

scoped 在组件中的style使用import方式引入外部css&#xff0c;发现引入的css会污染到其他地方。即所谓的样式全局污染。不管加不加scoped都一样。 <style lang"scss" scoped>import url("/style/index.scss") <style> 上面这种情况即时加入…

perl脚本批量处理代码中的中文注释乱码的问题

代码中统一使用utf-8编码是最好的&#xff0c;但是有一些多人合作的项目或者一些历史遗留代码&#xff0c;常见一些中文注释乱码的问题。这里以一个开源项目evpp为例子 evpp。以项目中的一个commit id为例&#xff1a; 477033f938fd47dfecde43c82257cd286d9fa38e &#xff0c; …

算法设计与实现--动态规划篇

什么是动态规划算法 动态规划算法是一种求解复杂问题的方法&#xff0c;通过将原问题分解为相对简单的子问题来求解。其基本思想是将待求解的问题分解为若干个子问题&#xff08;阶段&#xff09;&#xff0c;按顺序求解子阶段&#xff0c;前一子问题的解&#xff0c;为后一子…

YOLOV8改进:在C2f模块不同位置添加SegNext_Attention

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:SegNext_Attention注意力机制,实现…

市面上的AR眼镜:优缺点分析

AR眼镜是近年来备受关注的科技产品之一。它通过将虚拟信息叠加到现实世界中&#xff0c;为用户提供全新的视觉体验。目前&#xff0c;市面上的AR眼镜主要分为两类&#xff1a;消费级AR眼镜和企业级AR眼镜。 消费级AR眼镜 消费级AR眼镜的特点是轻便、时尚、易于佩戴&#xff0…

面部动作在情绪识别中的作用(nature reviews psychology2023)

文章目录 摘要静态情绪识别动态情感识别时空信息独特的时间信息 动态表情识别的机制动态信息为什么重要什么时候动态信息起作用为什么动态信息很重要 多模态表情识别启发 摘要 过去大多数关于情绪识别的研究都使用了摆拍的表情照片&#xff0c;旨在描绘情绪表现的峰值。虽然这…

正则表达式从放弃到入门(2):grep命令详解

正则表达式从放弃到入门&#xff08;2&#xff09;&#xff1a;grep命令详解 总结 本博文转载自 这是一篇”正则表达式”扫盲贴&#xff0c;如果你还不理解什么是正则表达式&#xff0c;看这篇文章就对了。 如果你是一个新手&#xff0c;请从头阅读这篇文章&#xff0c;如果你…

Mysql窗口函数

1 什么是窗口函数 MySQL从8.0开始支持窗口函数&#xff0c;有的也叫分析函数&#xff08;处理相对复杂的报表统计分析场景&#xff09;&#xff0c;这个功能在大多商业数据库和部分开源数据库中早已支持。 窗口函数&#xff1a;窗口、函数&#xff08;应用在窗口内的函数&…