预计阅读时间: 9 分钟
最近几周,投资者对矢量数据库的兴趣有所增加。 自 2023 年初以来,我们注意到:
让我们更详细地了解什么是矢量数据库。
矢量数据库在很大程度上依赖于矢量嵌入,这是一种数据表示形式,其中包含对 AI 理解和维持长期记忆至关重要的语义信息,以便在执行复杂活动时加以利用。
矢量嵌入就像一张地图,但它们不是向我们展示事物在世界上的位置,而是向我们展示事物在某个叫做 向量空间。 向量空间有点像一个大游乐场,一切都有它玩耍的地方。 想象一下,你有一群动物:一只猫、一只狗、一只鸟和一条鱼。 我们可以通过在操场上给它一个特殊的位置来为每个图像创建一个矢量嵌入。 猫可能在一个角落,狗在另一边。 鸟可以在天上,鱼可以在池塘里。 这个地方是一个多维空间。 每个维度对应着它们的不同方面,比如鱼有鳍,鸟有翅膀,猫狗有腿。 它们的另一个方面可能是鱼属于水,鸟主要属于天空,而猫和狗则属于地面。 一旦我们有了这些向量,我们就可以使用数学技术根据它们的相似性对它们进行分组。 根据我们掌握的信息,
因此,向量嵌入就像一张地图,可以帮助我们找到向量空间中事物之间的相似性。 就像地图可以帮助我们环游世界一样,矢量嵌入可以帮助我们在矢量游乐场中导航。
关键思想是语义相似的嵌入之间的距离更小。 为了找出它们有多相似,我们可以使用向量距离函数,例如欧氏距离、余弦距离等。
矢量库 将向量的嵌入存储在内存中的索引中,以便执行相似性搜索。 矢量库具有以下特征/限制:
有许多矢量搜索库可用: Facebook 的 FAISS,惹恼了 通过 Spotify 和 扫描神经网络 由谷歌。 FAISS 使用聚类方法,Annoy 使用树,ScanNN 使用向量压缩。 每个都有性能权衡,我们可以根据我们的应用程序和性能指标进行选择。
矢量数据库与矢量库的主要区别在于能够存档、更新和删除数据。 矢量数据库有 CRUD 支持 完全(创建、读取、更新和删除)解决了矢量库的局限性。
简而言之,矢量数据库通过解决前面讨论的自包含矢量索引的局限性,为处理矢量嵌入提供了一个更好的解决方案。
但是是什么让矢量数据库优于传统数据库呢?
传统数据库旨在使用关系模型存储和检索结构化数据,这意味着它们针对基于数据列和行的查询进行了优化。 虽然可以在传统数据库中存储向量嵌入,但这些数据库并未针对向量操作进行优化,无法有效地对大型数据集执行相似性搜索或其他复杂操作。
这是因为传统数据库使用基于简单数据类型(例如字符串或数字)的索引技术。 这些索引技术不适用于矢量数据,矢量数据具有高维性,需要专门的索引技术,如倒排索引或空间树。
此外,传统数据库并非旨在处理通常与矢量嵌入相关的大量非结构化或半结构化数据。 例如,一个图像或音频文件可能包含数百万个数据点,传统数据库无法有效处理这些数据点。
另一方面,矢量数据库专为存储和检索矢量数据而设计,并针对大型数据集上的相似性搜索和其他复杂操作进行了优化。 他们使用专为处理高维数据而设计的索引技术和算法,使它们比传统数据库更有效地存储和检索向量嵌入。
现在您已经阅读了很多关于矢量数据库的内容,您可能想知道,它们是如何工作的? 让我们来看看。
我们都知道关系数据库的工作原理:它们在行和列中存储字符串、数字和其他类型的标量数据。 另一方面,矢量数据库对矢量进行操作,因此其优化和查询方式大不相同。
在传统数据库中,我们通常查询数据库中的行,其中的值通常与我们的查询完全匹配。 在向量数据库中,我们应用相似性度量来找到与我们的查询最相似的向量。
矢量数据库结合了几种算法,这些算法都参与最近邻搜索 (ANN)。 这些算法通过散列、量化或基于图形的搜索来优化搜索。
这些算法被组装成一个管道,可以快速准确地检索查询向量的邻居。 由于向量数据库提供了近似结果,我们考虑的主要权衡是在准确性和速度之间。 结果越精确,查询就越慢。 然而,一个好的系统可以提供超快速的搜索和近乎完美的准确性。
矢量数据库是对大型数据集进行相似性搜索和其他复杂操作的强大工具,而传统数据库无法有效执行这些操作。 要构建功能向量数据库,嵌入是必不可少的,因为它们捕获数据的语义并实现准确的相似性搜索。 与矢量库不同,矢量数据库旨在适应我们的用例,使其成为性能和可扩展性至关重要的应用程序的理想选择。 随着机器学习和人工智能的兴起,矢量数据库对于包括推荐系统、图像搜索、语义相似性在内的广泛应用变得越来越重要,而且这个例子不胜枚举。 随着该领域的不断发展,我们可以期待在未来看到更多矢量数据库的创新应用。
Ercole Palmeri