从新手到专家:揭秘跨不同背景的向量数据库

近来,向量数据库引起了很多关注,许多向量数据库初创公司筹集了数百万美元的资金。
你很可能已经听说过它们,但直到现在都不太关心它们——至少我猜你现在在这里的原因就是这样…
如果你只是想要简短的答案,我们就直接开始吧:
定义:什么是向量数据库?
向量数据库是一种存储和管理非结构化数据(如文本、图像或音频)的数据库类型,它使用向量嵌入(高维向量)来快速查找和检索相似对象。
如果这个定义只让你更加困惑,那么我们一步一步来。本文受到WIRED的“5 Levels”视频系列的启发,按以下三个难度级别解释了向量数据库:
- 5岁的儿童也能理解
- 向数字原生和技术爱好者解释向量数据库
- 向工程师和数据专业人员解释向量数据库
向量数据库:5岁的儿童也能理解(ELI5)
这有点离题,但你知道我不明白的是什么吗?
当人们按颜色排列书架时。——天啊!
当他们不知道书的封面是什么颜色时,他们如何找到一本书呢?
向量数据库的直觉
如果你想要快速找到一本特定的书,按类型和作者进行书架整理比按颜色更有意义。这就是为什么大多数图书馆都以这种方式组织,以帮助你快速找到你需要的东西。
但是,如何根据查询而不是类型或作者来查找阅读材料呢?例如,如果你想要阅读一本:
- 类似于《饥饿的毛毛虫》的书,或者
- 关于一个和你一样喜欢吃东西的主人公的书?
如果你没有时间浏览书架,最快的方法是向图书管理员询问他们的推荐,因为他们读过很多书,会准确地知道哪一本最符合你的查询。
在组织书籍的例子中,你可以将图书管理员看作是向量数据库,因为向量数据库旨在存储关于对象(例如书籍)的复杂信息(例如书的情节)。因此,向量数据库可以帮助你根据特定查询(例如关于…的书)而不是几个预定义的属性(例如作者)来找到对象,就像图书管理员一样。
向数字原生和技术爱好者解释向量数据库
现在,我们继续以图书馆的例子并稍微深入一些:当然,现在有更先进的技术可以在图书馆中搜索一本书,而不仅仅是按类型或作者进行搜索。
如果你去图书馆,通常会有一台电脑在角落里帮助你找到一本具有更多特定属性的书,如标题、ISBN、出版年份或一些关键词。根据你输入的值,然后查询可用书籍的数据库。这个数据库通常是传统的关系数据库。

关系型数据库和向量数据库之间的区别是什么?
关系型数据库和向量数据库的主要区别在于它们存储的数据类型。关系型数据库被设计用于适应表格形式的结构化数据,而向量数据库则适用于非结构化数据,比如文本或图像。
存储的数据类型也影响了数据检索的方式:在关系型数据库中,查询结果是基于特定关键词的匹配。而在向量数据库中,查询结果是基于相似性。
你可以将传统的关系型数据库看作是电子表格。它们非常适合存储结构化数据,比如关于一本书的基本信息(例如标题、作者、ISBN等),因为这种类型的信息可以存储在列中,非常适合过滤和排序。
通过关系型数据库,你可以快速获取所有儿童图书中标题中包含“caterpillar”关键词的书。
但是,如果你喜欢《饥饿的毛毛虫》是关于食物的呢?你可以尝试搜索关键词“food”,但是除非书的摘要中提到了关键词“food”,否则你甚至都找不到《饥饿的毛毛虫》。相反,你可能只会得到一堆烹饪书籍和失望。
这就是关系型数据库的一个限制:你必须添加所有你认为某人可能需要找到特定项目的信息。但是你怎么知道要添加哪些信息和多少信息呢?添加所有这些信息是耗时的,并且不能保证完整性。
现在,向量数据库就派上用场了!
但是首先,让我们稍微偏离一下,介绍一个叫做向量嵌入的概念。
现今的机器学习(ML)算法可以将给定的对象(例如单词或文本)转换为保留该对象信息的数值表示。想象一下,你给一个ML模型一个单词(例如“food”),然后该ML模型进行魔法般的计算,给你返回一长串数字。这一长串数字就是你的单词的数值表示,被称为向量嵌入。
由于这些嵌入是一长串数字,我们称它们为高维的。让我们假设这些嵌入只有三维,以便在下面的示例中进行可视化。

你可以看到,“hungry”、“thirsty”、“food”和“drink”等相似的单词都聚集在一起,而“bicycle”和“car”等其他单词则靠近但在不同的角落。
这些数值表示使我们能够对通常不适合进行计算的对象(例如单词)应用数学计算。例如,以下计算将无法进行,除非你用它们的嵌入替换这些单词:
drink - food + hungry = thirsty
由于我们能够使用嵌入进行计算,我们还可以计算嵌入对象之间的距离。两个嵌入对象越接近,它们越相似。
正如你所见,向量嵌入非常酷。
让我们回到我们的例子,假设我们将图书馆中每本书的内容进行嵌入,并将这些嵌入存储在向量数据库中。现在,当你想要找到一本“儿童图书中的主角喜欢食物”的书时,你的查询也会被嵌入,与查询最相似的书籍将被返回,例如《饥饿的毛毛虫》或者《金发姑娘和三只熊》。
向量数据库的使用场景是什么?
在大规模语言模型(LLM)引起轰动之前,向量数据库已经存在了。最初,它们被用于推荐系统,因为它们可以快速找到与给定查询相似的对象。但是由于它们可以为LLM提供长期记忆,最近它们也被用于问答应用中。
向工程师和数据专业人士解释向量数据库
如果在打开这篇文章之前您已经能猜到向量数据库可能是一种在幕后存储向量嵌入的方法,并且只是想知道向量嵌入的底层原理,那么让我们深入了解算法的细节。
向量数据库是如何工作的?
向量数据库能够快速检索与查询相似的对象,因为它们已经预先计算好了。其基本概念称为近似最近邻(Approximate Nearest Neighbor,ANN)搜索,它使用不同的算法进行索引和计算相似度。
您可以想象一下,当您拥有数百万个嵌入对象时,使用简单的k最近邻(kNN)算法计算查询与每个嵌入对象之间的相似度可能会变得耗时。使用ANN,您可以在某种精度的损失下,以更快的速度检索到与查询最相似的对象。
索引 — 在此过程中,向量数据库会对向量嵌入进行索引。这一步将向量映射到一种数据结构中,以实现更快的搜索。
您可以将索引视为将图书馆中的书籍分组到不同的类别中,例如作者或流派。但由于嵌入可以包含更复杂的信息,进一步的类别可能包括“主角的性别”或“故事情节的主要地点”。索引可以帮助您检索到所有可用向量的较小部分,从而加快检索速度。
我们不会详细介绍索引算法的技术细节,但如果您对进一步阅读感兴趣,可以开始了解“Hierarchical Navigable Small World(HNSW)”。
相似度度量 — 为了从索引向量中找到与查询最近的邻居,向量数据库会应用相似度度量。常见的相似度度量方法包括余弦相似度、点积、欧氏距离、曼哈顿距离和汉明距离。
向量数据库相对于将向量嵌入存储在NumPy数组中的优势是什么?
我经常遇到的一个问题是:我们不能只使用NumPy数组来存储嵌入吗?当然,如果您没有很多嵌入或者只是在进行有趣的业余项目,您可以使用NumPy数组。但正如您可能已经猜到的,当您拥有大量嵌入时,向量数据库的速度明显更快,并且您不必将所有内容保存在内存中。
我会简短地介绍一下,因为Ethan Rosenthal已经在解释使用向量数据库与使用NumPy数组之间的区别方面做得比我好得多。
您是否真的需要一个向量数据库?| Ethan Rosenthal
剧透:答案或许是也许!尽管我的“真的”一词可能暴露了我的偏见。向量数据库是…
www.ethanrosenthal.com
喜欢这个故事吗?
免费订阅,以便在我发布新故事时收到通知。
想要阅读超过3个免费故事?— 成为小猪AI会员,每月5美元。您可以通过使用我的推荐链接来支持我注册。我将获得佣金,您不需要支付额外费用。
使用我的推荐链接加入小猪AI — Leonie Monigatti
阅读Leonie Monigatti(以及小猪AI上成千上万其他作者的)的每个故事。您的会员费用直接…
小猪AI.com
在 LinkedIn、Twitter 和 Kaggle 上找到我!