暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

什么是矢量数据库?

我们正身处于人工智能革命之中。这场革命正在颠覆所有涉及到的行业,带来诸多创新,同时也带来了新的挑战。对于大型语言模型、生成式人工智能和语义搜索等应用而言,高效的数据处理变得比以往任何时候都更加关键

所有这些新应用都依赖于向量嵌入,这是一种承载了关键语义信息的数据表示方式。这种信息对于人工智能在获取理解力和保持可在执行复杂任务时调用的长期记忆来说至关重要。

嵌入是由 AI 模型(如大型语言模型)生成的,具有众多属性或特征,使得它们的表达变得难以处理。在 AI 和机器学习的语境下,这些特征代表数据的不同维度,对于理解其中的模式、关系和潜在结构至关重要。

向量嵌入带来的挑战在于,传统基于标量的数据库无法应对这种数据的复杂性和规模,导致难以提取有价值的见解并进行实时分析。这时,向量数据库就显得尤为重要,它们专为处理此类数据而设计,为你提供在性能、可扩展性和灵活性方面所需的一切,以便最大程度地发挥数据价值。

借助向量数据库,我们可以为 AI 增加诸如语义信息检索、长期记忆等高级特性。下方的图示有助于我们更好地理解向量数据库在这类应用中的角色:

让我们分析一下这个图表:

  • 首先,我们利用嵌入模型为需要索引的内容创建向量嵌入。
  • 接着,将这个向量嵌入插入向量数据库,并附上与创建这个嵌入相关的原始内容的引用。
  • 当应用程序发起查询时,我们使用同样的嵌入模型为查询创建嵌入,并利用这些嵌入在数据库中查找相似的向量嵌入。正如之前提到的,这些相似的嵌入与创建它们时使用的原始内容关联。

#01

向量索引与向量数据库的区别是什么?

像 FAISS(Facebook AI 相似性搜索)这样的独立向量索引可以显著提高向量嵌入的搜索和检索效率,但它们缺乏任何数据库中存在的功能。而向量数据库则是专门为管理向量嵌入而构建的,相较于使用独立的向量索引,提供了几个优势:

  • 数据管理:向量数据库为数据存储提供了广泛认可且易于使用的功能,例如插入、删除和更新数据。这使得相较于使用 FAISS 这样的独立向量索引,管理和维护向量数据更为简便,因为后者需要额外地与存储方案进行集成。
  • 元数据存储和筛选:向量数据库能够存储与每个向量条目关联的元数据。用户可以通过附加的元数据过滤器在数据库中进行更精细的查询。
  • 可扩展性:向量数据库的设计可随着数据量和用户需求的增长而扩展,为分布式和并行处理提供更好的支持。而独立向量索引可能需要定制解决方案以实现相似的可扩展性(例如在 Kubernetes 集群或类似系统中部署和管理它们)。
  • 实时更新:向量数据库通常支持实时数据更新,允许对数据进行动态更改,然而独立向量索引可能需要进行完整的重新索引过程以添加新数据,这可能耗时且计算成本高。
  • 备份和集合:向量数据库负责备份存储在数据库中的所有数据的常规操作。Pinecone 还允许用户有选择地备份特定索引,以 “集合” 的形式存储该索引中的数据以供后续使用。
  • 生态系统整合:向量数据库可更轻松地与数据处理生态系统中的其他组件集成,例如 ETL 管道(如 Spark)、分析工具(如 Tableau 和 Segment)和可视化平台(如 Grafana),从而简化数据管理流程。此外,它还可以轻松地与其他 AI 相关工具(如 LangChain、LlamaIndex 和 ChatGPT 的插件)集成。
  • 数据安全和访问控制:向量数据库通常提供内置的数据安全特性和访问控制机制,以保护敏感信息,而这些特性可能无法在独立向量索引解决方案中获得。

简言之,向量数据库通过解决独立向量索引的局限性,如可扩展性挑战、繁琐的集成过程,以及缺少实时更新和内置安全措施,为处理向量嵌入提供了更优秀的解决方案,确保了更高效且简化的数据管理体验。

#02

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

我们(大致上)都了解传统数据库的工作原理 —— 它们在行和列中存储字符串、数字和其他类型的标量数据。但是,向量数据库处理的是向量,因此它的优化和查询方式有很大的不同。

在传统数据库中,我们通常查询数据库中的行,这些行的值与我们的查询通常完全相符。然而,在向量数据库中,我们采用相似性度量来找到与我们的查询最为相似的向量。

向量数据库利用各种不同算法的组合,这些算法共同参与近似最近邻(ANN)搜索。这些算法通过哈希、量化或基于图形的搜索方法来优化搜索过程。

这些算法组成了一个管道,能够快速且准确地找到查询向量的相邻向量。由于向量数据库提供近似结果,我们主要考虑的是准确性与速度之间的权衡。结果越准确,查询速度越慢。然而,一个好的系统可以在保证接近完美准确性的同时提供极速搜索。

以下是向量数据库常见流程的详细介绍:

  • 索引:向量数据库使用像 PQ、LSH 或 HNSW 等算法(下文详述)为向量建立索引。这个步骤将向量映射到一种数据结构,以便加速搜索。
  • 查询:向量数据库将已索引的查询向量与数据集中的已索引向量进行比较,以找到最近邻(采用该索引使用的相似性度量)。
  • 后处理:在某些情况下,向量数据库从数据集中检索最终的最近邻,并对其进行后处理以返回最终结果。这个步骤可能包括使用不同的相似性度量对最近邻进行重新排序。

在以下章节中,我们将详细讨论这些算法,并解释它们如何提高向量数据库的整体性能。

算法

有多种算法可以实现向量索引的创建。它们的共同目标是创建一个可快速遍历的数据结构,以实现快速查询。这些算法通常会将原始向量的表示转换为压缩形式,以优化查询过程。

作为 Pinecone 的用户,你无需关心各种算法的复杂性和选择。Pinecone 的设计旨在处理所有复杂性和算法决策,确保你获得最佳性能和结果,而不需要进行繁琐的操作。通过利用 Pinecone 的专业知识,你可以专注于提取有价值的见解和提供强大的 AI 解决方案。

下面的章节将探讨几种算法及其独特的处理向量嵌入的方法。了解这些知识将使你能够做出明智的决策,并感受到 Pinecone 带来的无缝性能,以充分发挥应用程序的潜力。

1、随机投影算法

随机投影算法的基本思想是,通过使用随机投影矩阵将高维向量投影到低维空间中。我们创建一个随机数矩阵,矩阵的大小为我们所需的目标低维度值。然后,我们计算输入向量和矩阵的点积,得到一个投影矩阵,该矩阵的维数比原始向量更少,但仍然保留它们之间的相似性。

在查询时,我们使用相同的投影矩阵将查询向量投影到低维空间中。然后,我们将投影后的查询向量与数据库中的投影向量进行比较,以找到最近邻。由于数据的维数被降低,搜索过程比在整个高维空间中搜索要快得多。

请注意,随机投影是一种近似方法,其投影质量取决于投影矩阵的属性。通常情况下,投影矩阵越随机,投影的质量就越好。但是,生成一个真正随机的投影矩阵可能需要大量的计算资源,特别是对于大型数据集而言。

2、乘积量化算法

乘积量化(Product Quantization,PQ)是一种用于高维向量(如向量嵌入)的有损压缩技术,可以构建索引。它将原始向量分成较小的块,通过为每个块创建一个代表性的 “编码” 来简化每个块的表示,然后将所有块重新组合在一起,而不会丢失对相似度操作至关重要的信息。PQ 的过程可以分解为四个步骤:拆分、训练、编码和查询。

  • 拆分:将向量分解为多个子向量(片段)。
  • 训练:为每个子向量建立一个 “码本”,即生成一组可能的 “码”,用于对子向量进行编码。实践中,使用 k-means 聚类算法对每个子向量进行聚类,并将每个聚类的中心作为对应码本的值。
  • 编码:对每个子向量进行编码,即将其映射到与其最接近的码本值。每个子向量都有一个对应的码本值,可以使用多个码本值来表示同一个子向量。
  • 查询:在查询时,将查询向量拆分为子向量,并使用相同的码本对其进行编码。然后,使用已编码的子向量查询索引,以找到与查询向量最相似的向量。

码本中代表向量的数量是精确表示和搜索码本的计算成本之间的平衡。如果码本中的代表向量数量增多,则向量在子空间中的表示会更加准确,但搜索码本的计算成本也会增加。相反,如果码本中的代表向量数量减少,则表示会变得不够准确,但搜索计算成本会减少。了解更多关于乘积量化的知识。

3、局部敏感哈希

局部敏感哈希(Locality-Sensitive Hashing,LSH)是一种用于近似最近邻搜索的索引技术。它旨在优化速度,同时提供近似、非穷举的结果。LSH 使用一组哈希函数将相似的向量映射到 “桶” 中,以便在搜索时更快地定位到潜在的最近邻。

为了找到给定查询向量的最近邻,LSH 使用相同的哈希函数将相似向量分桶到哈希表中。查询向量被哈希到特定的表中,然后与该表中的其他向量进行比较,以找到最接近的匹配项。相比于搜索整个数据集,这种方法更快,因为每个哈希表中的向量数量比整个空间要少得多。

需要记住的是,LSH 是一种近似方法,其近似精度取决于哈希函数的属性。通常情况下,使用更多的哈希函数可以提高近似精度。但是,使用大量的哈希函数可能会计算成本很高,并且可能不适用于大型数据集。了解更多关于 LSH 的知识。

4、分层的可导航小世界(HSNW)

分层可导航小世界(HSNW)创建了一种分层树状结构,其中每个节点代表一组向量。节点之间的边表示向量之间的相似性。算法从一组带有少量向量的节点开始,这些向量可以通过随机选择或使用聚类算法(例如 k-means)进行聚类得到,每个聚类成为一个节点。

该算法会检查每个节点的向量,并为该节点和那些具有最相似向量的节点之间建立一条边。

当我们查询一个 HSNW 索引时,它会利用这个图来遍历整棵树,访问最有可能包含最接近查询向量的向量的节点。

相似度度量(Similarity Measures)

在前面讨论的算法基础上,我们需要理解相似度度量在向量数据库中的作用。这些度量是向量数据库比较和确定给定查询的最相关结果的基础。

相似度度量是数学方法,用于确定向量空间中两个向量的相似度。在向量数据库中,相似度度量用于比较存储在数据库中的向量,并找到与给定查询向量最相似的向量。

可以使用多种相似度度量方法,包括:

  • 余弦相似度:在向量空间中度量两个向量之间夹角的余弦值。其值范围从 - 1 到 1,其中 1 表示向量完全相同,0 表示向量正交,-1 表示向量完全相反。
  • 欧几里得距离:在向量空间中度量两个向量之间的直线距离。其值范围从 0 到正无穷,其中 0 表示向量完全相同,更大的值表示向量越不相似。
  • 点积:度量两个向量的大小乘积和它们之间夹角的余弦值。其值范围从负无穷到正无穷,其中正值表示向量指向相同方向,0 表示向量正交,负值表示向量指向相反方向。

选择相似度度量方法将会对从向量数据库中获取的结果产生影响。同时需要注意,每种相似度度量方法都有其优缺点,在根据使用情况和要求选择合适的方法时需要谨慎选择。

过滤(Filtering)

向量数据库中存储的每个向量都包括元数据。除了可以查询相似向量外,向量数据库还可以根据元数据查询筛选结果。为此,向量数据库通常维护两个索引:向量索引和元数据索引。然后进行元数据过滤,可以在向量搜索之前或之后进行,但在任何情况下,都会存在一些困难,导致查询过程变慢。

过滤过程可以在矢量搜索本身之前或之后执行,但每种方法都有其自身的挑战,可能会影响查询性能:

  • 预过滤:在这种方法中,元数据过滤是在向量搜索之前完成的。虽然这可以帮助减少搜索空间,但也可能导致系统忽略不符合元数据过滤条件的相关结果。此外,由于增加了计算开销,广泛的元数据过滤可能会降低查询过程的速度。
  • 后过滤:在这种方法中,元数据过滤是在向量搜索之后完成的。这可以确保考虑了所有相关结果,但也可能引入额外的开销,并使查询过程变慢,因为需要在搜索完成后过滤掉不相关的结果。

为了优化过滤过程,向量数据库采用了各种技术,如利用高级的元数据索引方法或使用并行处理来加速过滤任务。平衡搜索性能和过滤准确性之间的权衡对于提供高效和相关的查询结果是至关重要的。

数据库操作

与向量索引不同的是,向量数据库配备了一组能力,使它们更适合在高规模生产环境中使用。让我们总体概述一下操作数据库所涉及的组件。

1、性能和容错能力

性能和容错性是密切相关的。我们存储的数据越多,就需要更多的节点,这样会增加错误和故障的风险。与其他类型的数据库一样,即使底层节点中的一些出现故障,我们也希望确保查询能够尽快执行。这可能是由于硬件故障、网络故障或其他类型的技术故障所致。这种故障可能导致停机或甚至是不正确的查询结果。

为了确保高性能和容错性,向量数据库使用分片和复制来实现以下目标:

  • 分片:将数据划分到多个节点中。有不同的方法可用于数据分区,例如可以通过数据不同聚簇的相似度将其分区,使相似的向量存储在同一个分区中。当进行查询时,查询将被发送到所有分片并检索并合并结果。这称为 “scatter-gather” 模式。
  • 复制:在不同的节点上创建数据的多个副本。这可以确保即使某个节点发生故障,其他节点也可以替代它。有两种主要的一致性模型:最终一致性和强一致性。最终一致性允许数据的不同副本之间存在临时不一致,这将提高可用性并降低延迟,但可能会导致冲突甚至数据丢失。另一方面,强一致性要求在写操作被视为完成之前更新所有数据的副本。这种方法提供了更强的一致性,但可能会导致更高的延迟。

2、监控

为了有效管理和维护向量数据库,我们需要一个强大的监控系统,跟踪数据库性能、健康状况和整体状态的重要方面。监控对于检测潜在问题、优化性能和确保平稳的生产操作至关重要。监控向量数据库的一些方面包括以下内容:

  • 资源使用情况:监控资源使用情况,如 CPU、内存、磁盘空间和网络活动,可以识别可能影响数据库性能的潜在问题或资源限制。
  • 查询性能:查询延迟、吞吐量和错误率可能表明需要解决的潜在系统问题。
  • 系统健康:总体系统健康监控包括单个节点的状态、复制过程和其他关键组件的状态。

3、访问控制

访问控制是管理和监管用户访问数据和资源的过程。它是数据安全的关键组成部分,确保只有授权用户有权查看、修改或与储存在向量数据库中的敏感数据进行交互。

访问控制的重要性有以下几个方面:

  • 数据保护:由于人工智能应用程序通常涉及敏感和机密信息,实施严格的访问控制机制有助于保护数据免受未经授权的访问和潜在的数据泄露。
  • 合规性:许多行业,如医疗保健和金融,受到严格的数据隐私法规的监管。实施适当的访问控制有助于组织遵守这些法规,保护他们免受法律和财务影响。
  • 问责和审计:访问控制机制使组织能够维护向量数据库内用户活动的记录。这些信息对于审计目的至关重要,当发生安全漏洞时,有助于追踪任何未经授权的访问或修改。
  • 可扩展性和灵活性:随着组织的发展和演变,它们的访问控制需求可能会发生变化。强大的访问控制系统允许无缝修改和扩展用户权限,确保数据安全在整个组织的增长过程中得以维护。

4、备份和集合

当其他方法失效时,向量数据库提供定期创建备份的功能。这些备份可以存储在外部存储系统或基于云的存储服务中,确保数据的安全性和可恢复性。在发生数据丢失或损坏的情况下,这些备份可以用来将数据库恢复到先前的状态,最小化停机时间并减少对整个系统的影响。使用 Pinecone,用户可以选择备份特定索引并将其保存为 “集合”,以便稍后用于填充新的索引。

5、API 和 SDK

这就是要解决的问题:与数据库进行交互的开发人员希望通过易于使用的 API 使用工具集,使用他们熟悉和舒适的工具。通过提供用户友好的界面,向量数据库 API 层简化了高性能向量搜索应用程序的开发。

除了 API 之外,向量数据库通常会提供编程语言特定的 SDK 来封装 API。SDK 可以让开发人员更轻松地与数据库交互,并集成到他们的应用程序中。这使得开发人员可以专注于他们的特定用例,例如语义文本搜索、生成式问答、混合搜索、图像相似度搜索或产品推荐,而无需担心基础架构复杂性。

#03

总结

随着 NLP、计算机视觉和其他 AI 应用领域中向量嵌入的指数级增长,向量数据库作为计算引擎的出现,使我们能够有效地与向量嵌入在应用程序中进行交互。

向量数据库是专门针对在生产场景中管理向量嵌入时出现的问题而构建的数据库。因此,它们相对于传统的基于标量的数据库和独立的向量索引提供了显著的优势。

在本文中,我们回顾了向量数据库的关键方面,包括其工作原理、使用的算法以及使其在生产场景中准备就绪的其他功能。我们希望这可以帮助你了解向量数据库的内部工作原理。这不是你使用 Pinecone 必须知道的事情。Pinecone 会考虑到所有这些因素(还有其他的),并让你专注于应用程序的其余部分。

推荐阅读:


PCP 认 证 专 家 报 名



文章转载自PostgreSQL考试认证中心,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论