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

news2024/11/16 9:32:39

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

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

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

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.coloradmin.cn/o/804913.html

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

相关文章

美国过境签证的办理流程和注意事项

美国过境签证是一种临时签证,允许你在前往其他国家的途中经过美国。这对于很多旅行者来说是一个便捷的选择,但在申请和办理过程中也需要注意一些要点。 首先,申请美国过境签证需要前往美国驻中国大使馆或领事馆递交申请。以下是办理美国过境签…

四磺酸酞菁锌,61586-86-5,Zn(II) Phthalocyanine tetrasulfonic acid,广泛用于染色

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 四磺酸酞菁锌试剂 | 基础知识概述(部分): 中文名称:四磺酸酞菁锌 英文名称:Zn(II) Phthalocyanine tetrasulfonic acid CAS号:61586-86-5 分子式:C32H…

图数据库实践 - 如何将图数据库应用于网络安全

网络化办公为企业创造便捷的同时,也带来了数据泄露的威胁。根据IBM Security最新发布的年度《数据泄露成本报告》显示,2023全球数据泄露的平均成本达到445万美元,创该报告有史以来以来最高记录,也较过去3年均值增长了15%。同一时期…

2.3 HLSL常用函数

一、函数介绍 函数图像参考网站:Graphtoy 1.基本数学运算 函数 含义 示例图 min(a,b) 返回a、b中较小的数值 mul(a,b) 两数相乘用于矩阵计算 max(a,b) 返回a、b中较大的数值 abs(a) 返回a的绝对值 round(x) 返回与x最近的整数 sqrt(x) 返回x的…

QT【day4】

chat_QT服务器端&#xff1a; //.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList> //链表容器 #inc…

美团/华为/字节/滴滴等大厂真实面试面经

一、美团测试开发面经 一面&#xff0c;1小时 自我介绍 自已觉得最好的项目&#xff1f;主要做了什么&#xff1f;遇到的最大困难&#xff1f; 浏览器输入网址后发生了什么&#xff1f; 三次握手和四次挥手 http和https的区别 https的加密过程 知道哪些排序算法 快排的…

现在入行软测=49年入国军?三句话,让面试官再掏2K

还有一个月就步入金九银十&#xff0c;很多软测人吐槽因为疫情&#xff0c;公司都在裁员&#xff0c;别说跳槽涨薪&#xff0c;能保住现在的工作就不错了。 但也有那么一批人&#xff0c;凭借自己口才与实力拿到年薪近50W的offer。面试是初见1小时就要相互了解优缺点的过程&am…

工作10年的老码农手把手教你如何3分钟看懂IT技术管理!速收藏!

老陈是谁&#xff1f; 一个码龄十年的老码农&#xff0c;从刚毕业开始被代码折磨的死去活来&#xff0c;到公司里“被迫”成为多线技术栈的“工程师”&#xff0c;这几年又从IT技术转向做IT管理。 基本可以说从一个坑跳到了另一个坑&#xff0c;虽然坑多水深&#xff0c;但是…

【Golang】Golang进阶系列教程--Golang中文件目录操作的实现

文章目录 一、文件二、文件目录三、文件目录操作3.1、读取文件3.1.1、方法一 (file.Read())3.1.2、方法二 (bufio读取文件)3.1.3、方法三 (ioutil 读取方法) 3.2、写入文件3.2.1、方法一3.2.2、方法二3.2.3、方法三 (ioutil写入文件) 3.3、复制文件3.3.1、方法一3.3.2、方法二 …

AI人工智能未来在哪里?2023年新兴产业人工智能有哪些就业前景?

AI人工智能未来在哪里&#xff1f;2023年新兴产业人工智能有哪些就业前景&#xff1f; 随着科技的不断发展&#xff0c;人工智能技术也在不断地进步。在数字化时代&#xff0c;人工智能技术已经渗透到了我们生活的各个方面。2023年为止中国产业80%已经实现半自动化&#xff0c;…

element 级联 父传子

html代码例子 父组件 <el-cascaderstyle"width: 100%"change"unitIdChange":options"unitOptions"filterablev-model"formInline.unitId":props"unitProps"/></el-form-item>//改变级联传值到这个组件里面<r…

自动化测试如何做?搭建接口自动化框架从0到1实战(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 传统软件测试行业…

C#时间轴曲线图形编辑器开发1-基本功能

目录 一、前言 1、简介 2、开发过程 3、工程下载链接 二、基本功能实现 1、绘图面板创建 &#xff08;1&#xff09;界面布置 &#xff08;2&#xff09;显示面板代码 &#xff08;3&#xff09; 面板水平方向、竖直方向移动功能实现 &#xff08;4&#xff09;面板放…

kotlin 编写一个简单的天气预报app(三)

使用eventbus替换broadcast 将从Broadcast切换到EventBus有以下几个好处&#xff1a; 解耦性&#xff1a;通过使用EventBus&#xff0c;您可以实现组件之间的解耦。传统的Broadcast机制需要发送方和接收方明确知道对方的存在&#xff0c;并且需要在代码中设置Intent过滤器和广…

Mnist分类与气温预测任务

目录 传统机器学习与深度学习的特征工程特征向量pytorch实现minist代码解析归一化损失函数计算图Mnist分类获取Mnist数据集&#xff0c;预处理&#xff0c;输出一张图像面向工具包编程使用TensorDataset和DataLoader来简化数据预处理计算验证集准确率 气温预测回归构建神经网络…

网页版五子棋项目演示

项目源码&#xff1a;五子棋游戏 演示使用的用户名&#xff1a;zyz 密码:123 注册页面&#xff1a; 登录页面&#xff1a; 游戏大厅页面&#xff1a; 未匹配&#xff1a; 匹配中&#xff1a; 游戏房间页面&#xff1a; 对方落子&#xff1a; 己方落子&#xff1a; 对…

5.6 Java递归讲解

5.6 Java递归讲解 A方法调用B方法&#xff0c;我们很容易理解递归就是&#xff1a;A方法调用A方法&#xff01;就是自己调用自己利用递归可以实现通过简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#xff0…

Redis的五大数据类型介绍

、简介 Redis的五大数据类型也称五大数据对象&#xff1b;前面介绍过6大数据结构&#xff0c;Redis并没有直接使用这些结构来实现键值对数据库&#xff0c;而是使用这些结构构建了一个对象系统redisObject&#xff1b;这个对象系统包含了五大数据对象&#xff0c;字符串对象&am…

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)

文章目录 GDI对象画笔和画刷来开发控件梯形边框的按钮控件CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp: 实现文件 矩形边框的三态按钮控件 CToolTipCtrl开发动…

linux服务器安装redis

一、安装下载 下载安装参考文章 下载安装包地址&#xff1a;https://download.redis.io/releases/ 亲测有效&#xff0c;但是启动的步骤有一些问题 安装完成&#xff01;&#xff01;&#xff01; 二、启动 有三种启动方式 默认启动指定配置启动开机自启 说明&#xff1a…