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

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

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

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

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数组来存储嵌入吗?——当然,如果你没有很多嵌入,或者你只是在做一个有趣的爱好项目,你可以这样做。但正如你已经猜到的,当你有很多嵌入时,向量数据库会明显更快,而且你不必把所有东西都保存在内存中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

使用Android Studio开发天气预报APP 今天我来分享一下如何使用Android Studio开发一个天气预报APP。在文中,我们将使用第三方接口获取实时天气数据,并显示在APP界面上。 步骤一:创建新项目 首先,打开Android Studio并创建一个新…

elementui el-table折叠表格,点击主表数据展开从表明细

用element-ui 的el-table实现&#xff1a;主表table可实现展开行显示关联的明细表table的列表数据&#xff0c;效果图如下 <el-tableref"tableData"v-loading"listLoading":data"tableData"row-key"id"borderstripehighlight-curr…

【lesson6】Linux make和makefile

文章目录 make和Makefile的介绍make和Makefile的使用make和Makefile的项目测试 make和Makefile的介绍 make是一个命令 Makefile是一个文件 make和Makefile是Linux自动化构建项目的工具。 makefile带来的好处就是——“自动化编译”&#xff0c;一旦写好&#xff0c;只需要一个…

点击加号添加新的输入框

实现如上图的效果 html部分&#xff1a; <el-form-item class"forminput" v-for"(item,index) in formdata.description" :key"index" :label"描述(index1)" prop"description"><el-input v-model"formdata…

RAD-NeRF模型

问题1&#xff1a; 添加在以下的参数里添加bin_size0 问题2&#xff1a; 更行GLIBC_2.29_glibc_2_29.so_xihuanyuye的博客-CSDN博客

【C++】日期类的实现

1、Date.h #pragma once #include <iostream> using namespace std;class Date { public:Date(int year 1, int month 1, int day 1);void Print();//Date& operator(const Date& d); //赋值重载int GetMonthDay(int year, int month);bool operator<(con…

广德上汽通用汽车平行试车场

技术栈&#xff1a;使用vue2JavaScriptElement UIvuexaxioscesium 项目描述&#xff1a;广德上汽通用汽车平行试车场是依托千寻孪界开发的一套展示实时车辆位置同步展示光照&#xff0c;时间&#xff0c;阴影等特效&#xff0c;完成平行时空效果的一款软件。 工作内容&#xff…

浅析嵌入式GUI框架-LVGL

LVGL是什么&#xff1f; LVGL (Light and Versatile Graphics Library) 是最流行的免费开源嵌入式图形库&#xff0c;可为任何 MCU、MPU 和显示类型创建漂亮的 UI。 嵌入式GUI框架对比 Features/框架LVGLFlutter-elinuxArkUI(鸿蒙OS)AWTKQTMIniGUIemWinuC/GUI柿饼UI跨平台…

docker安装MySQL集群(一主一从)

目录 docker安装MySQL集群&#xff08;一主一从&#xff09;前菜测试MySQL 集群安装master容器slave容器master容器配置主从赋值测试 docker安装MySQL集群&#xff08;一主一从&#xff09; 前菜测试 1、拉取mysql5.7的镜像到本地 [rootaliyun ~]# docker pull mysql:5.72、…

idea 关闭页面右侧预览框/预览条

idea 关闭页面右侧预览框 如图&#xff0c;预览框存在想去除 找了好多方法&#xff0c;什么去掉“setting->appearance里的show editor preview tooltips”的对钩&#xff1b;又或者在该预览区的滚动条上右键&#xff0c;“取消勾选show code lens on scrollbar hover”。都…

ICASSP 2023 | MCROOD: MULTI-CLASS RADAR OUT-OF-DISTRIBUTION DETECTION

原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486484&idx1&snd43f92ca0230753e77f54557054653d6&chksmcf51beedf82637fb27d4cbb9279f273298779dabe25f7775cb93469787bcc12c1b6b2caec979#rd ICASSP 2023 | MCROOD: MULTI-CLASS…

QUiLoader:彻底分离你的Ui设计工作

QUiLoader:彻底分离你的Ui设计工作 1. QUiLoader:彻底分离你的Ui设计工作widget.hwidget.cpp 2. Qt、C动态UI3. QT 使用QLibrary加载动态库 1. QUiLoader:彻底分离你的Ui设计工作 原文链接&#xff1a;https://blog.csdn.net/adonis1620/article/details/5794797 Trolltech提…

新一代网络安全防护体系的五个关键特征

目前&#xff0c;网络安全技术正面临着一个转折点&#xff0c;基于边界的安全防护理论存在缺陷&#xff0c;基于规则的威胁判别机制不再有效&#xff0c;围绕传统技术构建的安全工程也不再适用。新一代安全建设不能再像修“城墙”一样&#xff0c;专注于外部网络攻击和已知威胁…

测试常见前端bug

目录 协作 测试方法 标签&#xff1a;标签 内容/ref/ 判断 arr&&arr.length 交互 样式不生效&#xff1a;devtools查找&#xff0c;编译前的标签&#xff0c;运行时不一定存在 可交互的需要提示 hover样式 没有交互逻辑&#xff0c;就不要设置交互 无法交互…

《MySQL》第十一篇 SQL_MODEL模式简述

目录 一. 介绍与使用二. 模式类型三. 常用模式演示ANSI 模式TRADITIONAL 模式STRICT_TRANS_TABLES 模式 一. 介绍与使用 SQL Mode定义了MySQL应支持的SQL语法、数据校验等&#xff0c;这样可以更容易地在不同的环境中使用MySQL 常用来解决下面几类问题&#xff1a; 通过设置S…

Opencv Win10+Qt+Cmake 开发环境搭建

文章目录 一.Opencv安装二.Qt搭建opencv开发环境 一.Opencv安装 官网下载Opencv安装包 双击下载的软件进行解压 3. 系统环境变量添加 二.Qt搭建opencv开发环境 创建一个新的Qt项目(Non-Qt Project) 打开创建好的项目中的CMakeLists.txt&#xff0c;添加如下代码 # openc…

【实践篇】推荐算法PaaS化探索与实践 | 京东云技术团队

作者&#xff1a;京东零售 崔宁 1. 背景说明 目前&#xff0c;推荐算法部支持了主站、企业业务、全渠道等20业务线的900推荐场景&#xff0c;通过梳理大促运营、各垂直业务线推荐场景的共性需求&#xff0c;对现有推荐算法能力进行沉淀和积累&#xff0c;并通过算法PaaS化打造…

【数据结构】--189.轮转数组

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【LLM】浅析chatglm的sft+p-tuning v2

note GLM将针对不同类型下游任务的预训练目标统一为了自回归填空&#xff0c;结合了混合的注意力机制和新的二维位置编码。本文浅析sft&#xff0c;并基于GLM在广告描述数据集上进行sftp-tuning代码的数据流讲解 文章目录 note零、ChatGLM2模型一、Supervised fine-tuning1. 数…

如何解决使用Elsivier默认latex模板,显示多位作者名字而不是et.al形式

问题描述&#xff1a; 使用Elsivier默认模板&#xff0c;编辑论文的时候,使用\citep{论文缩写}命令&#xff0c;发现在编译之后的.pdf文件中&#xff0c;会显示出该论文所有作者的姓&#xff08;红色部分&#xff09;&#xff0c;而不是使用et.al的形式&#xff08;绿色部分&a…