数据库 频道

用3个难度级别解释向量数据库 从新手到专家:揭开不同背景下的向量数据库之谜

  

  最近,向量数据库备受关注,许多向量数据库初创公司筹集了数百万美元的资金。

  你可能已经听说过它们,但直到现在才真正关心它们 — 至少,我猜你现在在这里是因为这个原因…

  如果你只是想要简短的答案,那就直入主题:

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

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

  如果这个定义让你更加困惑,那么让我们一步步来。本文受到WIRED的“5 Levels”视频系列的启发,分别从以下三个难度级别解释了向量数据库:

  •   向5岁小孩解释

  •   向数字原住民和科技爱好者解释向量数据库

  •   向工程师和数据专业人士解释向量数据库

  向5岁小孩解释向量数据库

  这可能有点跑题,但你知道我不明白的是什么吗?

  当人们按颜色排列他们的书架时。— 天哪!

  当他们不知道书的封面颜色时,他们如何找到一本书呢?

  向量数据库背后的直觉

  如果你想快速找到一本特定的书,按照流派和作者来整理书架比按颜色更有意义。这就是为什么大多数图书馆都是按照这种方式组织的,以帮助你快速找到你想要的东西。

  但是,如果你想根据查询而不是流派或作者来找到阅读材料怎么办?例如,如果你想读一本:

  •   类似于《饥饿的毛毛虫》或

  •   关于一个主角和你一样喜欢吃东西的故事?

  如果你没有时间浏览书架,最快的方法就是询问图书管理员推荐,因为他们已经读过很多书,会准确知道哪本最符合你的查询。

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

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

  现在,让我们继续使用图书馆的例子,稍微深入一点:当然,如今有更先进的技术来搜索图书馆中的书籍,不仅仅是按流派或作者。

  如果你去图书馆,通常会看到角落里有一台电脑,它可以帮助你按照一些更具体的属性查找书籍,比如标题、ISBN、出版年份或一些关键词。根据你输入的值,会查询可用书籍的数据库。这个数据库通常是传统的关系型数据库。

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

  关系型数据库和向量数据库之间的主要区别在于它们存储的数据类型。关系型数据库设计用于适合表格的结构化数据,而向量数据库则用于非结构化数据,例如文本或图像。

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

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

  使用关系型数据库,你可以快速找到所有儿童图书中标题中包含“毛毛虫”的书籍。

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

  这就是关系型数据库的一个局限性:你必须添加所有你认为某人可能需要找到特定物品的信息。但你如何知道添加哪些信息以及添加多少信息?添加所有这些信息是耗时的,也不能保证完整性。

  这就是向量数据库发挥作用的地方!

  但首先,让我们稍微偏离一下,介绍一个叫做向量嵌入的概念。

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

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

  你可以看到类似的单词如“饥饿”、“口渴”、“食物”和“饮料”都被分组在一起,而其他单词如“自行车”和“汽车”则紧挨在一起但在向量空间的不同角落。

  这些数值表示使我们能够对通常不适合计算的对象(例如单词)应用数学计算。例如,以下计算将无法进行,除非你用它们的嵌入替换单词:

  饮料 - 食物 + 饥饿 = 口渴

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

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

  让我们回到我们的例子,假设我们将图书馆中每本书的内容嵌入并将这些嵌入存储在向量数据库中。现在,当你想要找到一本“关于喜欢食物的儿童图书”时,你的查询也被嵌入,返回最符合你查询的书籍,比如《饥饿的毛毛虫》或者《金发女孩和三只熊》。

  向量数据库的用例是什么?

  在大型语言模型(LLMs)引起轰动之前,向量数据库已经存在。最初,它们被用于推荐系统,因为它们可以快速为给定查询找到相似对象。但由于它们可以为LLMs提供长期记忆,最近它们也被用于问答应用程序中。

  向工程师和数据专业人士解释向量数据库

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

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

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

  可以想象,使用简单的k最近邻(kNN)算法计算查询与你拥有的每个嵌入对象之间的相似性可能会变得耗时,特别是当你有数百万个嵌入时。通过ANN,你可以牺牲一些准确性以换取速度,并检索到与查询大致最相似的对象。

  索引 — 为此,向量数据库对向量嵌入进行索引。这一步将向量映射到一个数据结构,这将加快搜索速度。

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

  我们不会深入讨论索引算法的技术细节,但如果你对进一步阅读感兴趣,可以开始查找分层可导航小世界(HNSW)。

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

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

0
相关文章