一文带你全面理解向量数据库

近些年来,向量数据库引起业界的广泛关注,一个相关事实是许多向量数据库初创公司在短期内就筹集到数百万美元的资金。

你很可能已经听说过向量数据库,但也许直到现在才真正关心向量数据库——至少,我想这就是你现在阅读本文的原因……

如果你阅读本文只是为了简单回答上面的问题,那就让我们直接进入话题吧。

1、定义:什么是向量数据库?

向量数据库是一种以向量嵌入(高维向量)方式存储和管理非结构化数据(如文本、图像或音频)的数据库,以便于快速查找和检索类似对象。

如果这个定义只会引起人们更多的理解上的混乱,那么就让我们一步一步来进行解释。本文的灵感来自WIRED的5级视频系列(https://www.wired.com/video/series/5-levels),本文将揭示向量数据库在以下三个难度级别中的内容:

  • 最浅显的解释
  • 向数字原住民和技术爱好者解释向量数据库
  • 向工程师和数据专业人员解释向量数据库

2、向量数据库:最浅面的解释

这有点离题,但你知道我不明白的是什么吗?当人们按颜色排列书架时,哎哟!当他们不知道书的封面是什么颜色时,他们是如何找到书的?

图片

1)向量数据库背后的直觉

如果你想快速找到一本特定的书,那么,按类型和作者排列书架比按颜色排列更有意义。这就是为什么大多数图书馆都是这样组织的原因,以便帮助你快速找到你想要的东西。

但是,你如何根据一个查询而不是一个流派或作者来找到可以阅读的书籍呢?如果你想读一本书,例如:类似于《饥饿的毛毛虫》或关于一个和你一样喜欢吃美食的主角?

如果你没有时间浏览书架,最快的方法是向图书管理员征求他们的推荐,因为他们读过很多书,会确切地知道哪本书最适合你的查询。

在组织书籍的例子中,你可以将图书管理员视为向量数据库,因为向量数据库旨在存储关于对象(例如书籍)的复杂信息(例如书籍的情节)。因此,向量数据库可以帮助你根据特定的查询(例如,一本关于…的书)而不是一些预定义的属性(例如,作者)来查找对象,就像图书管理员一样。

3、向数字原住民和技术爱好者解释向量数据库

现在,让我们继续探讨图书馆的例子,并获得更多的技术知识:当然,现在,在图书馆中搜索书籍的技术比只按类型或作者搜索更先进了一些。

如果你去图书馆,通常角落里会有一台电脑,可以帮助你找到一本具有更具体属性的书,比如书名、国际标准图书编号、出版年份或一些关键词。根据输入的值,就可以查询存储可用书籍信息的数据库。不过,这个数据库通常是一个传统的关系数据库。

图片

1)关系数据库和向量数据库之间的区别是什么?

关系数据库和向量数据库之间的主要区别在于它们存储的数据类型。虽然关系数据库是为适合表的结构化数据而设计的,但是,向量数据库即是为非结构化数据(如文本或图像)而设计的。

存储的数据类型也会影响数据的检索方式:在关系数据库中,查询结果基于特定关键字的匹配。在向量数据库中,查询结果是基于相似性进行的。

你可以把传统的关系数据库想象成电子表格。它们非常适合存储结构数据,例如关于一本书的基本信息(例如,标题、作者、ISBN等),因为这类信息可以存储在列中,非常适合过滤和排序。

使用关系数据库,你可以快速获取所有书籍,例如儿童书籍,并且标题中有“毛虫”。

但是,如果你喜欢《饥饿的毛毛虫》是关于食物的呢?你可以试着搜索关键词“食物”,但除非在书的摘要中提到关键词“食品”,否则你甚至找不到“非常饥饿的毛毛虫”。相反,你可能会以一堆烹饪书和失望告终。

这是关系数据库的一个限制:你必须添加你认为某人可能需要的所有信息才能找到该特定项目。但是,你怎么知道该添加哪些信息以及添加多少信息呢?添加所有这些信息往往非常耗时,并且不能保证完整性。

然而,这正是向量数据库发挥作用的地方!

不过,你首先需要先来了解一下一个叫做向量嵌入(vector embeddings)的概念。

今天的机器学习(ML)算法可以将给定的对象(例如,单词或文本)转换为保留该对象信息的数字表示。想象一下,你给一个ML模型一个词(例如,“食物”),然后这个ML模型发挥了它的魔力,给你返回了一长串数字。这个长长的数字列表是单词的数字表示,即称为向量嵌入。

因为这些嵌入是一长串数字,所以我们称之为高维。让我们假设这些嵌入只是三维的,以便将它们可视化,如下所示。

图片

你可以看到,类似的单词,如“饥饿”(hungry)、“口渴”(thirsty)、“食物”(food)和“饮料”(drink),都被分组在一个相似的角落里,而其他单词如“自行车”(bicycle)和“汽车”(car),则在这个向量空间中靠近在一起,但在不同的角落里。

数字表示使我们能够将数学计算应用于通常不适合计算的对象,如单词。例如,除非将单词替换为其嵌入;否则,以下计算将不起作用:

drink - food + hungry = thirsty

因为我们可以使用嵌入进行计算,所以我们也可以计算一对嵌入对象之间的距离。两个嵌入对象之间的距离越近,它们就越相似。

正如你所看到的,向量嵌入非常酷。

让我们回到前面的例子,假设我们将每本书的内容嵌入到图书馆中,并将这些嵌入存储在向量数据库中。现在,当你想找到一本“主角喜欢食物的童书”时,你的查询也会被嵌入,并返回与你的查询最相似的书籍,例如《饥饿的毛毛虫》或《金发姑娘与三只熊》。

2)向量数据库的使用情况是什么?

事实上,向量数据库在大型语言模型(LLM)的宣传开始之前就已经存在了。最初,它们被应用于推荐系统中,因为它们可以快速找到给定查询的相似对象。但是,由于它们可以为大型语言模型提供长期记忆,因此最近也被应用于问答应用程序中。

4、向工程师和数据专业人员解释向量数据库

如果在打开本文之前,你已经猜到向量数据库可能是存储向量嵌入的一种方式,并且只想知道向量嵌入的背后是什么,那么,现在让我们来深入了解并讨论一下相关的算法。

1)向量数据库是如何工作的?

向量数据库能够快速检索查询中的类似对象,因为它们已经预先计算过了。其基本概念被称为近似最近邻(Approximate Nearest Neighbor:ANN)搜索,它使用不同的算法来索引和计算相似性。

正如你所能想象的,当你有数百万个嵌入时,用简单的k近邻(kNN)算法计算查询和每个嵌入对象之间的相似性可能会变得相当耗时。而使用ANN搜索算法,你可以以一定的准确性换取速度,并检索与查询近似最相似的对象。

索引:为此,向量数据库对向量嵌入进行索引。此步骤将向量映射到数据结构,从而实现更快的搜索。

你可以把索引看作是把图书馆里的书分成不同的类别,比如作者或流派。但由于嵌入可以包含更复杂的信息,进一步的分类可能是“主角的性别”或“情节的主要位置”。因此,索引可以帮助您检索所有可用向量的较小部分,从而加快检索速度。

我们不会讨论索引算法的技术细节;但是,如果你有兴趣进一步阅读,你可能想从查找分层导航小世界(Hierarchical Navigable Small World:HNSW)开始。

相似性度量:为了从索引向量中找到查询的最近邻居,向量数据库应用相似性度量。常见的相似性度量包括余弦相似性、点积、欧几里得距离、曼哈顿距离和汉明距离(Hamming distance)。

2)向量数据库相对于将向量嵌入存储在NumPy数组中的优势是什么?

我经常(已经)遇到的一个问题是:我们不能只使用NumPy数组来存储嵌入吗?——当然,如果你没有很多嵌入,或者你只是在做一个有趣的爱好项目,你可以这样做。但正如你已经猜到的,当你有很多嵌入时,向量数据库会明显更快,而且你不必把所有东西都保存在内存中。

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

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

相关文章

cvat 安装部署

官网地址: https://github.com/opencv/cvat/tree/masterhttps://github.com/opencv/cvat/tree/master 1.从官网上下载源码地址。 2.配置环境变量 vim /etc/profile source /etc/profile 或者执行: export CVAT_HOSTyour-ip-address 3.执行命令 …

基于Spring Boot 的 Ext JS 应用框架之coworkee

Ext JS 官方提供了一个人员管理的完整应用框架 - coworkee。该框架的显示如下: 该框架的布局特点如下: 布局方式: 左右布局, 左侧导航栏默认收合特点:左侧导航区占用空间小, 工作区较大, 适合没有二级导航栏,工作区需要显示的内容较多的系统。如果导航栏是横向底部,就…

ssm毕业生就业状况管理系统源码和论文

ssm毕业生就业状况管理系统源码和论文093 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储&#xff…

无涯教程-Android - Grid View函数

Android GridView在二维滚动网格(行和列)中显示项目,并且网格项目不一定是预定的,但它们会使用ListAdapter自动插入到布局中 Grid View - Grid view ListView 和 GridView 是 AdapterView 的子类,可以通过将它们绑定到 Adapter 来填充&#x…

MongoDB实验——在MongoDB集合中查找文档

在MongoDB集合中查找文档 一、实验目的二、实验原理三、实验步骤1.启动MongoDB数据库、启动MongoDB Shell客户端2.数据准备-->person.json3.指定返回的键4 .包含或不包含 i n 或 in 或 in或nin、$elemMatch(匹配数组)5.OR 查询 $or6.Null、$exists7.…

简易虚拟培训系统-UI控件的应用1

目录 前言 UI结构总体介绍 建立初步的系统UI结构 Image控件 前言 前面的文章介绍了关于Oculus设备与UI控件的关联,从本文开始采用小示例的方式介绍基本的UI控件在系统中的基本作用(仅介绍“基本作用”,详细的API教程可参考官方文档&#x…

用wireshark流量分析的四个案例

目录 第一题 1 2 3 4 第二题 1 2 3. 第三题 1 2 第四题 1 2 3 第一题 题目: 1.黑客攻击的第一个受害主机的网卡IP地址 2.黑客对URL的哪一个参数实施了SQL注入 3.第一个受害主机网站数据库的表前缀(加上下划线例如abc) 4.…

2024毕业设计选题指南【附选题大全】

title: 毕业设计选题指南 - 如何选择合适的毕业设计题目 date: 2023-08-29 categories: 毕业设计 tags: 选题指南, 毕业设计, 毕业论文, 毕业项目 - 如何选择合适的毕业设计题目 当我们站在大学生活的十字路口,毕业设计便成了我们面临的一项重要使命。这不仅是对我们…

文本编辑器Vim常用操作和技巧

文章目录 1. Vim常用操作1.1 Vim简介1.2 Vim工作模式1.3 插入命令1.4 定位命令1.5 删除命令1.6 复制和剪切命令1.7 替换和取消命令1.8 搜索和搜索替换命令1.9 保存和退出命令 2. Vim使用技巧 1. Vim常用操作 1.1 Vim简介 Vim是一个功能强大的全屏幕文本编辑器,是L…

计算机竞赛 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…

今天学了二叉树的前序,中序和后序遍历oier

同时了解一些趣图笑死我了 所以想入门先入坟,这是最好的礼物。 废话说多了,谈谈正事,我们了解到二叉树有节点和边权;分为有向和无向图;这里如果我们需要搜索一下每一个节点的情况,所以就需要这个遍历了 1…

前端vue2、vue3去掉url路由“ # ”号——nginx配置

文章目录 ⭐前言⭐vue2中router默认出现#号💖在vue2项目中去掉💖在vue3项目中去掉 ⭐vue打包 assetsPublicPath base 为绝对路径 /💖vue2 配置 assetsPublicPath💖vue3 配置 base💖验证 ⭐nginx 配置💖 使用…

Leetcode Top 100 Liked Questions(序号105~139)

105. Construct Binary Tree from Preorder and Inorder Traversal105. Construct Binary Tree from Preorder and Inorder Traversal 题意:根据前序遍历和中序遍历来构造二叉树 我的思路 要用递归造树,要同时递归左子树和右子树,造树需要…

C语言每日一练-----Day(4)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:记负均正    旋转数组的最小数字    二分查找 💓博主…

剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,…

element Collapse 折叠面板 绑定事件

1. 点击面板触发事件 change <el-collapse accordion v-model"activeNames" change"handleChange"><el-collapse-item title"一致性 Consistency"><div>与现实生活一致&#xff1a;与现实生活的流程、逻辑保持一致&#xff0c…

使用Python构建网络爬虫:提取网页内容和图片资源

网络爬虫是一种自动获取网页内容的程序&#xff0c;它可以帮助我们高效地收集网络上的有价值信息。本文将介绍如何使用Python构建网络爬虫&#xff0c;提取网页内容和图片资源。   一、环境准备   1.安装Python环境   首先&#xff0c;确保您已经安装了Python环境。访问P…

2021年06月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;数字变换 给定一个包含5个数字&#xff08;0-9&#xff09;的字符串&#xff0c;例如 “02943”&#xff0c;请将“12345”变换到它。 你可以采取3种操作进行变换 &#xff08;1&#xff09;交换相邻的两个数字 &#xff08;2&#xff09;将一个数字加1。如果…

Qt应用开发(基础篇)——进度条 QProgressBar

一、前言 QProgressBar类继承于QWidget&#xff0c;是一个提供了横向或者纵向进度条的小部件。 QProgressBar进度条一般用来显示用户某操作的进度&#xff0c;比如烧录、导入、导出、下发、上传、加载等这些需要耗时和分包的概念&#xff0c;让用户知道程序还在正常的执行中。 …

Git操作

Git 操作方法 Git 是一个分布式版本控制系统&#xff0c;用于管理项目的源代码。 gitee新建仓库提示如下 具体介绍看下面 1. 创建仓库 初始化本地仓库 使用以下命令在本地目录中初始化一个新的 Git 仓库&#xff1a; git init克隆远程仓库 使用以下命令克隆一个远程仓库…