作者:Shashank Vats. 编译:Cointime.com QDD
向量数据库
向量数据库是一种将数据存储为高维向量的数据库,这些向量是特征或属性的数学表示。这些向量通常是通过对原始数据(如文本、图像、音频、视频等)应用某种嵌入函数生成的。
向量数据库可以定义为一种工具,用于索引和存储向量嵌入,以实现快速检索和相似性搜索,具有元数据过滤和水平扩展的功能。
向量数据库在很大程度上依赖于向量嵌入,这是一种数据表示类型,其中包含了对于AI获得理解并在执行复杂任务时可以借鉴的长期记忆至关重要的语义信息。因此,在我们进一步了解向量数据库之前,让我们先了解一下向量嵌入是什么!
向量嵌入
向量嵌入就像一张地图,但它不是显示物体在世界中的位置,而是显示物体在所谓的向量空间中的位置。向量空间就像一个大操场,每个物体都有自己的位置。假设我们有一些动物——一只猫、一只狗、一只鸟和一条鱼。我们可以通过为每个图像创建一个向量嵌入,在操场上给它一个特殊的位置。猫可能在一个角落,狗在另一边。鸟可能在天空中,鱼可能在池塘里。这个地方是一个高维空间。每个维度对应它们的不同特征,比如鱼有鳍,鸟有翅膀,猫和狗有腿。它们的另一个特征可以是鱼属于水域,鸟大多在天空中,猫和狗在陆地上。一旦我们拥有了这些向量,我们可以使用数学技巧根据它们的相似性将它们分组在一起。根据我们拥有的信息,我们可以将具有相似特征的动物,如猫和狗,更接近地放置在向量空间中。
因此,向量嵌入就像一张地图,它帮助我们找到向量空间中物体之间的相似性。就像地图帮助我们在世界中找到方向一样,向量嵌入帮助我们在向量的操场上找到方向。
现在我们可能已经明白,关键的思想在于具有语义相似性的嵌入之间的距离较小。为了找出它们有多相似,我们可以使用向量距离函数,如欧几里德距离、余弦距离等。然而,考虑到我们必须计算和比较查询向量与每个其他向量之间的距离,比较距离可能是一项相当令人生畏的任务。这就是为什么我们有向量数据库和向量库的原因。现在可能会出现最大的问题是——既然它们都允许通过向量进行高效搜索,它们之间的区别是什么呢?让我们找出答案!
向量数据库 vs 向量库
向量库将向量嵌入存储在内存索引中,以进行相似性搜索。向量库具有以下功能/限制:
1. 仅存储向量 — 向量库仅存储向量嵌入,而不是生成它们的相关对象。这意味着当我们运行查询时,向量库将返回相关的向量和对象ID。这是有限制的,因为实际信息存储在对象中而不是ID。要解决这个问题,我们需要将对象存储在辅助存储中。然后,我们可以使用查询返回的ID与对象匹配以了解结果。
2. 索引数据是不可变的 — 向量库产生的索引是不可变的。这意味着一旦导入数据并构建了索引,我们就无法进行任何修改(无法进行新的插入、删除或更改)。要对索引进行任何更改,我们将需要从头开始重新构建它。
3. 导入期间的查询限制 — 大多数向量库在导入数据时不能进行查询。需要先导入所有数据对象,然后在导入对象后构建索引。这可能会成为需要导入数百万甚至数十亿对象的应用程序的问题。
有许多向量搜索库可用 — Facebook的FAISS、Spotify的Annoy和Google的ScaNN。FAISS使用聚类方法,Annoy使用树,而ScaNN使用向量压缩。每种方法都存在性能权衡,我们可以根据应用程序和性能要求进行选择。
向量数据库与向量库之间最核心的区别是能够存储、更新和删除数据。向量数据库完全支持CRUD(创建、读取、更新和删除)操作,解决了向量库的限制。
1. 存储向量和对象 — 数据库可以同时存储数据对象和向量。由于两者都被存储,我们可以将向量搜索与结构化过滤器结合使用。过滤器可以确保最近的邻居与元数据匹配。
2. 可变性 — 由于向量数据库完全支持CRUD,我们可以在创建索引后轻松地添加、删除或更新条目。这在处理持续变化的数据时非常有用。
3. 实时搜索 — 与向量库不同,数据库允许我们在导入过程中查询和修改数据。当我们上传数百万个对象时,已导入的数据仍然完全可访问和可操作,因此我们无需等待导入完成才能开始处理已有的数据。
简而言之,向量数据库通过解决独立向量索引的限制,提供了处理向量嵌入的优越解决方案,正如上述几点所讨论的。
但是,是什么使得向量数据库优于传统数据库呢?
向量数据库 vs 传统数据库
传统数据库旨在使用关系模型存储和检索结构化数据,这意味着它们对基于数据列和行的查询进行了优化。虽然可以将向量嵌入存储在传统数据库中,但这些数据库并不适用于向量操作,不能以高效的方式在大型数据集上执行相似性搜索或其他复杂操作。
这是因为传统数据库使用基于简单数据类型(如字符串或数字)的索引技术。这些索引技术不适用于高维向量数据,高维向量数据需要使用反向索引或空间树等专门的索引技术。
此外,传统数据库并未设计用于处理常与向量嵌入相关的大量非结构化或半结构化数据。例如,图像或音频文件可能包含数百万个数据点,传统数据库无法高效处理这些数据。
另一方面,向量数据库专门设计用于存储和检索向量数据,并针对大型数据集执行相似性搜索和其他复杂操作进行了优化。它们使用专门的索引技术和算法来处理高维数据,使它们比传统数据库在存储和检索向量嵌入方面更加高效。
既然你已经阅读了这么多关于向量数据库的内容,你可能想知道它们是如何工作的。让我们来看一看。
向量数据库是如何工作的?
我们都知道传统数据库的工作原理——它们将字符串、数字和其他类型的标量数据存储在行和列中。另一方面,向量数据库操作的是向量,因此它的优化和查询方式相当不同。
在传统数据库中,我们通常查询数据库中值与我们的查询完全匹配的行。在向量数据库中,我们应用相似度度量来查找与我们的查询最相似的向量。
向量数据库使用多种算法的组合来参与近似最近邻(ANN)搜索。这些算法通过哈希、量化或基于图的搜索来优化搜索过程。
这些算法组合成一个管道,可以快速准确地检索查询向量的邻居。由于向量数据库提供近似结果,我们需要考虑的主要权衡是准确性和速度之间的平衡。结果越准确,查询的速度就越慢。然而,一个好的系统可以以超快的速度提供几乎完美的准确性。
以下是向量数据库的常见管道:
l 索引 — 向量数据库使用PQ、LSH或HNSW等算法对向量进行索引。这一步将向量映射到将实现更快搜索的数据结构。
l 查询 — 向量数据库将索引查询向量与数据集中的索引向量进行比较,以找到最近的邻居(应用索引所使用的相似度度量)。
l 后处理 — 在某些情况下,向量数据库从数据集中检索最终的最近邻,并对其进行后处理以返回最终结果。这一步可以包括使用不同的相似性度量重新排序最近邻。
总结
向量数据库是在大型数据集上进行相似性搜索和其他复杂操作的强大工具,这些操作在传统数据库中无法有效执行。要构建一个功能完备的向量数据库,嵌入是必不可少的,因为它们捕捉了数据的语义含义,并实现了准确的相似性搜索。与向量库不同,向量数据库的设计可以根据我们的用例进行扩展,使其成为性能和可扩展性至关重要的应用程序的理想选择。随着机器学习和人工智能的兴起,向量数据库在许多应用中变得越来越重要,包括推荐系统、图像搜索、语义相似性等等。随着这一领域的不断发展,我们可以期待在未来看到更多对向量数据库的创新应用。
所有评论