← 返回博客
跳至主要内容

向量数据库的简要介绍

·阅读需 16 分钟
Leonie Monigatti
Zain Hasan

A Gentle Introduction to Vector Databases

如果您是最近才第一次听到“向量数据库”这个术语,您并不孤单。虽然向量数据库已经存在几年了,但它们最近才引起了更广泛的开发者社区的关注。

围绕向量数据库(有时也称为 AI 数据库)的兴奋与 ChatGPT 的发布密切相关。自 2022 年底以来,公众开始了解最先进的大型语言模型 (LLM) 的能力,而开发者们意识到向量数据库可以进一步增强这些模型。

本文将解释它们的一些核心概念,例如 向量嵌入向量搜索。然后,我们将深入研究在向量搜索中使用距离度量的技术细节,以及 向量索引 如何实现高效检索。一旦我们掌握了基本理解,我们将讨论用例和当前的工具格局。

什么是向量数据库?

向量数据库索引、存储并提供对结构化或非结构化数据(例如,文本或图像)及其向量嵌入的访问,这些向量嵌入是数据的数值表示。它允许用户快速、大规模地在生产环境中查找和检索相似对象。

Definition

由于其搜索能力,它有时也被称为向量搜索引擎。

向量数据库如何工作?

向量数据库使用向量搜索检索数据对象。向量搜索使用向量嵌入,这些是机器可理解的格式,用于表示人类可理解的数据对象,例如文本文档、图像、歌曲、视频等。向量数据库还使用向量索引来大规模检索数据对象。

本节介绍这些核心概念。我们将讨论什么是向量嵌入,它们如何实现相似性搜索,以及它们如何加速搜索。

向量嵌入

当您想到数据时,您可能想到电子表格中整齐排列的数字。这种类型的数据称为结构化数据,因为它很容易以表格形式存储。然而,据称如今大约 80% 的数据是非结构化的。非结构化数据的示例包括图像、文本(例如,文档、社交媒体帖子或电子邮件)或时间序列数据(例如,音频文件、传感器数据或视频)。这种类型数据的问题是很难以有组织的方式存储它,以便您可以轻松找到您正在寻找的内容。

但人工智能 (AI) 和机器学习 (ML) 领域的创新使我们能够以数值形式表示非结构化数据,而不会损失其语义含义,即所谓的向量嵌入。向量嵌入只是一个很长的数字列表,每个数字都描述了数据对象的特征。

例如,我们如何在 RGB 系统中数值表示颜色 ,其中向量中的每个数字描述了颜色的红色、绿色或蓝色程度。例如,以下绿色可以表示为[6, 205, 0]在 RGB 系统中。

RGB system

但是将更复杂的数据(例如单词、句子或文本)拟合到有意义的数字序列并非易事。这就是 AI 模型发挥作用的地方:AI 模型使我们能够将例如单词的上下文含义表示为向量,因为它们已经学会了在向量空间中表示不同单词之间的关系。能够从非结构化数据生成嵌入的 AI 模型也称为嵌入模型或向量化器。下面,您可以看到 RGB 系统三维向量空间中的一些示例数据点(颜色)。

rgb-color-vector-space

不同的嵌入模型以不同的向量空间表示数据。向量空间在维度数量上有所不同,从几十到几千不等,精度随着维度的增加而提高。在颜色示例中,也有不同的方法可以数值表示颜色。例如,您可以将前述绿色表示为[6, 205, 0]或者以 CMYK 系统表示为[97, 0, 100, 20].

这就是为什么对所有数据使用相同的嵌入模型以确保它位于各自的向量空间中非常重要。

向量嵌入以数值形式捕获对象相对于其他对象的语义含义。因此,相似的对象在向量空间中聚集在一起,这意味着两个对象越接近,它们就越相似。

现在,让我们考虑一个更简单的单词的数值表示示例 - 也称为词向量。在下图中,您可以看到“Wolf”(狼)和“Dog”(狗)彼此靠近,因为狗是狼的直系后代。靠近狗的是“Cat”(猫)这个词,它与“Dog”这个词相似,因为两者都是动物,也是常见的宠物。但是,在右侧更远的地方,您可以看到代表水果的单词,例如“Apple”(苹果)或“Banana”(香蕉),它们彼此靠近,但与动物术语相距较远。

vector embeddings

向量嵌入允许我们通过在向量空间中搜索彼此靠近的对象来查找和检索相似对象。这个概念称为 向量搜索、相似性搜索或语义搜索。

与我们可以为单词“Dog”找到相似向量的方式类似,我们可以找到与搜索查询相似的向量。例如,要找到与单词“Kitten”(小猫)相似的单词,我们可以为这个查询词生成一个向量嵌入 - 也称为查询向量 - 并检索其所有最近邻居,例如“Cat”这个词,如下所示。

Vector search

由于语义搜索的概念基于上下文含义,它允许通过检索与用户意图匹配的相关搜索结果来实现更人性化的搜索体验。这种优势使向量搜索对于例如对拼写错误或同义词敏感的应用非常重要。

数据对象的数值表示使我们能够对它们应用数学运算。例如,您可以计算两个向量表示之间的距离来确定它们的相似性。您可以使用几种相似性度量来计算两个向量之间的距离。例如,Weaviate 支持以下距离度量

  • 平方欧几里得或 L2 平方距离计算两个向量之间的直线距离。它的范围是[0, ∞],其中 0 表示相同的向量,较大的值表示越来越不相似的向量。
  • 曼哈顿或 L1 距离计算线段的长度之和,该线段是向量在坐标轴上的投影。它的范围是[0, ∞],其中 0 表示相同的向量,较大的值表示越来越不相似的向量。
  • 余弦相似度计算两个向量之间的角度的余弦。Weaviate 使用余弦距离作为余弦相似度的补数。它的范围是[0, 2],其中 0 表示相同的向量,2 表示指向相反方向的向量。
  • 点积计算两个向量的幅值和它们之间角度的余弦的乘积。它的范围是[-∞, ∞],其中 0 表示正交向量,较大的值表示越来越相似的向量。Weaviate 使用负点积以保持较大的值表示越来越不相似的向量的直观概念。
  • 汉明距离计算向量在每个维度上的差异数量。

distance metrics

如您所见,有许多不同的相似性度量。作为经验法则,选择与用于训练 ML 模型的相似度量。如果您不确定使用了哪一个,通常可以在托管服务的网站上找到此信息,例如 OpenAI 的 ada-002 使用余弦相似度Hugging Face 上托管的 MiniLM 支持余弦相似度、点积和欧几里得距离。要了解有关不同距离度量的更多信息,您可以继续阅读我们的博客文章 向量搜索中的距离度量是什么?

向量索引用于近似最近邻方法

向量索引是组织向量嵌入的过程,以便可以有效地检索数据。

当您想要找到与给定查询向量最接近的项目时,蛮力方法将是使用 k-最近邻 (kNN) 算法。但是,计算查询向量与向量数据库中的每个条目之间的相似性需要大量的计算资源,尤其是在您拥有包含数百万甚至数十亿个数据点的庞大数据集时。这是因为所需的计算量随着维度和数据点数量的线性增加 (O(n))。

找到相似对象的更有效解决方案是使用近似最近邻 (ANN) 方法。其基本思想是预先计算向量嵌入之间的距离。然后,您可以组织和存储相似的向量彼此靠近(例如,在集群或图中),以便以后可以更快地找到相似的对象。这个过程称为向量索引。请注意,速度提升以牺牲一些准确性为代价,因为 ANN 方法仅返回近似结果。

在前面的示例中,一种选择是预先计算一些集群,例如动物、水果等。因此,当您查询数据库以获取“Kitten”时,您可以从仅查看最接近的动物开始搜索,而不会浪费时间计算所有水果和其他非动物对象之间的距离。更具体地说,ANN 算法可以帮助您在例如四足动物附近的一个区域开始搜索。然后,该算法还可以防止您偏离相关结果。

Vector indexing for Approximate Nearest Neighbor

上述示例大致描述了分层可导航小世界 (HNSW) 算法。它也是 Weaviate 中的默认 ANN 算法。但是,有几种 ANN 算法可以索引向量,可以分为以下几类

  • 基于聚类的索引(例如,FAISS
  • 基于邻近图的索引(例如,HNSW
  • 基于树的索引(例如,ANNOY
  • 基于哈希的索引(例如,LSH
  • 基于压缩的索引(例如,PQSCANN

请注意,索引可以在查询时实现快速检索,但构建索引最初可能需要大量时间。

进一步阅读:为什么向量搜索如此快速

向量数据库架构

由于向量数据库不仅存储向量嵌入,还存储原始数据对象,因此它们的架构由多个索引组成。

下面是 Weaviate 向量数据库架构 的一个示例。 数据库架构

用户可以创建任意数量的索引,并且每个索引可以包含任意数量的分片。分片可以分布和/或复制到集群中的节点上。分片始终包含对象、倒排和向量存储。向量存储不受 LSM 分段的影响。

向量数据库用例

各种各样的应用程序都使用向量数据库的搜索能力。它们涵盖了经典的机器学习用例,例如自然语言处理 (NLP)、计算机视觉和推荐系统,到为现代应用程序中的 LLM 提供长期记忆。

向量数据库最流行的用例自然是搜索。因为向量搜索可以帮助找到相似的对象,所以它非常适合您可能想要找到相似的产品、电影、书籍、歌曲等应用程序。这就是为什么它们也用于推荐系统,作为重述的搜索任务。

随着 LLM 的兴起,许多现代生成式 AI 应用程序将向量数据库用作外部知识来源。您可能已经遇到了它们为 LLM 提供长期记忆的术语。LLM 是无状态的,这意味着如果您不将此信息存储在例如向量数据库中,它们会立即忘记您刚刚讨论的内容,从而为它们提供状态。这使得 LLM 能够进行实际的对话。此外,您可以将其他信息存储在其中,作为检索增强生成 (RAG) 流程的一部分,以减少幻觉。

这里有一个示例 演示,名为 HealthSearch,展示了 Weaviate 向量数据库与 LLM 协同工作,展示了利用用户撰写的评论和查询来检索基于特定健康影响的补充产品的潜力。

example-use-case-llm-vector-database

向量数据库周围的工具格局

虽然向量数据库是 AI 原生的,并且专门设计用于处理向量嵌入并实现高效的向量搜索,但像 向量库 和具备向量能力的数据库也存在。

向量数据库与传统(关系)数据库

现代向量数据库和传统(关系)数据库之间的主要区别在于它们优化数据的类型。虽然关系数据库旨在以列的形式存储结构化数据,但向量数据库也针对存储非结构化数据(例如文本、图像或音频)及其向量嵌入进行了优化。

由于向量数据库和关系数据库针对不同类型的数据进行了优化,因此它们在数据存储和检索方式上也不同。在关系数据库中,数据存储在列中,并通过传统搜索中的关键字匹配进行检索。相反,向量数据库还存储原始数据的向量嵌入,从而实现高效的语义搜索。由于向量搜索可以语义理解您的搜索词,因此它不依赖于基于精确匹配来检索相关的搜索结果。这使其对同义词具有鲁棒性。

例如,假设您有一个存储 Jeopardy 问题的数据库,并且您想检索包含动物的所有问题。由于传统数据库中的搜索依赖于关键字匹配,因此您必须创建一个查询所有动物的大查询(例如,包含“狗”,或包含“猫”,或包含“狼”等)。使用语义搜索,您可以简单地查询“动物”的概念。

Traditional search vs. vector search

由于大多数向量数据库不仅存储向量嵌入,而且将它们与原始源数据一起存储,因此它们不仅能够进行向量搜索,还能够进行传统的关键字搜索。一些数据库,例如 Weaviate,甚至支持 混合搜索 功能,将向量搜索与关键字搜索结合起来。

向量数据库与具备向量能力的数据库(SQL 和 NoSQL)

如今,许多现有的数据库已经启用了向量支持和向量搜索。但是,它们通常不会索引向量嵌入,这使得向量搜索速度较慢。因此,AI 原生向量数据库相对于具备向量能力的数据库的优势在于其由于向量索引而提高的向量搜索效率。

向量数据库与向量索引库

与向量数据库类似,向量库 也能够进行快速的向量搜索。但是,向量库仅存储数据对象的向量嵌入,并将它们存储在内存索引中。这导致了两个关键差异

  1. 可更新性:索引数据是不可变的,因此,无法进行实时更新。
  2. 可扩展性:大多数向量库在导入数据时都无法进行查询,这对于需要导入数百万甚至数十亿个对象的应用程序来说可能是一个可扩展性问题。

因此,向量库是应用程序处理有限的静态数据快照的绝佳解决方案。但是,如果您的应用程序需要实时可扩展的语义搜索,那么您应该考虑使用向量数据库。

向量数据库与图数据库

图数据库以节点和边的方式存储数据,表示实体及其关系。它针对查询数据中的连接和模式进行了优化,使其在网络、社交和推荐系统中功能强大。另一方面,向量数据库索引、存储并提供对结构化或非结构化数据(例如文本或图像)及其向量嵌入的访问,这些嵌入是数据的数值表示。它允许用户快速、大规模地查找和检索相似对象。

向量数据库与向量存储

向量存储是一个更轻量级的系统或库,专门设计用于存储和检索向量嵌入。它更侧重于管理向量并支持基本的索引和查询操作。另一方面,向量数据库不仅存储和检索向量嵌入,还提供全面的数据库功能,例如分布式存储、扩展、安全性和对复杂查询的支持。

向量数据库常见问题解答

本节回答了有关向量数据库的一些常见问题。

为什么我们需要向量数据库

向量数据库对于高效管理和搜索高维向量嵌入至关重要。它们能够实现实时准确的相似性搜索,这对于 AI 原生应用程序堆栈至关重要。

为什么使用向量数据库?

向量数据库已成为 AI 原生应用程序堆栈中的关键组成部分,尤其是在管理组织生成的大量非结构化数据(例如图像、文本和音频)方面。与难以处理非结构化数据的传统数据库不同,向量数据库通过利用高维向量表示或嵌入来有效地存储、搜索和分析此数据。在需要快速准确地检索相关信息时,这种能力尤其有益。

例如,在推荐系统或 NLP 任务中,向量数据库使企业能够解锁宝贵的见解,从而做出更明智的决策并改善个性化。此外,它们能够实现类似人类的语义搜索功能,使企业能够找到与用户查询密切匹配的产品、内容或信息。这不仅可以改善用户体验和参与度,还可以推动以客户为中心的个性化。

随着业务的增长和数据量的增加,向量数据库的可扩展性和性能至关重要。这些数据库针对处理大规模、高维向量进行了优化,即使在扩展规模下也能确保数据检索保持快速和准确。对于需要实时数据处理的 AI 应用程序(例如聊天机器人、欺诈检测和其他交互式 AI 系统)而言,这种可扩展性至关重要。

此外,向量数据库与现有的 AI 工作流程无缝集成,包括 LLM 编排框架、嵌入模型提供商和推理引擎。这种集成简化了生产级 RAG 应用程序的部署和扩展,使企业能够充分利用 AI 的潜力。通过为存储和检索向量提供专门的基础设施,向量数据库降低了与 AI 开发相关的复杂性和成本,使组织能够专注于创新和为客户提供个性化体验。

如何使用向量数据库

将向量嵌入存储在数据库中,对其进行索引以实现高效检索,并执行相似性搜索以找到最相关的数据点。

如何选择向量数据库

向量数据库的选择标准是搜索延迟、对象数量增加时的内存占用、召回率和检索相关性、成本效率以及与您现有堆栈和 AI 工具(例如语言模型和嵌入模型)的集成能力。

摘要

本文解释了向量数据库是一种索引、存储并提供对结构化或非结构化数据及其向量嵌入的访问的数据库类型。像 Weaviate 这样的向量数据库允许高效的相似性搜索和大规模数据检索,基于它们的向量距离或向量相似度。

我们介绍了它们的核心概念,例如向量嵌入,并讨论了它们如何通过利用 ANN 算法来实现高效的向量搜索。此外,我们还探讨了其他向量搜索工具,并讨论了向量数据库相对于传统数据库和具备向量能力的数据库和向量库的优势。

上次更新时间:2024 年 11 月 189 日

准备开始构建了吗?

请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。

不想错过另一篇博文?

注册我们的双周时事通讯以保持更新!


提交后,我同意 服务条款 隐私政策.