简介

向量数据库是一种相对较新的交互方式,用于处理源自不透明机器学习模型(如深度学习架构)的抽象数据表示。这些表示通常被称为向量(vectors)或嵌入(embeddings),它们是用于训练机器学习模型以完成情感分析、语音识别、目标检测等任务的数据的压缩版本。

这些新型数据库在语义搜索推荐系统等许多应用中大放异彩。在这里,我们将了解市场上最流行且增长最快的向量数据库之一:Qdrant

什么是 Qdrant?

Qdrant “是一个向量相似度搜索引擎,提供生产就绪的服务,并配备了便捷的 API,用于存储、搜索和管理带有额外负载(payload)的点(即向量)。” 你可以将负载视为额外的信息片段,它们可以帮助你优化搜索,并提供可呈现给用户的有用信息。

你可以通过 Python 的 qdrant-client 开始使用 Qdrant,或者拉取最新的 qdrant Docker 镜像并进行本地连接,也可以尝试 Qdrant Cloud 的免费层级选项,直到你准备好完全迁移。

言归正传,让我们来谈谈什么是向量数据库。

什么是向量数据库?

dbs

向量数据库是一种专门用于高效存储和查询高维向量的数据库。在传统的 OLTPOLAP 数据库中(如上图所示),数据以行和列的形式组织(称为),查询是基于这些列中的值进行的。然而,在图像识别、自然语言处理和推荐系统等特定应用中,数据通常表示为高维空间中的向量。这些向量加上 ID 和负载,我们称之为“点”(Point)。这些点就是我们在 Qdrant 等向量数据库中称为集合(Collection)的结构中存储的元素。

在此语境下,向量是对象或数据点的数学表示,向量的元素隐含或显式地对应于对象的特定特征或属性。例如,在图像识别系统中,向量可以代表一张图像,向量的每个元素代表像素值或该像素的描述符/特征。在音乐推荐系统中,每个向量可以代表一首歌,向量的元素则捕捉歌曲的特征,如节拍、流派、歌词等。

向量数据库针对这些高维向量的存储查询进行了优化,它们通常使用专门的数据结构和索引技术,例如层次化可导航小世界图(HNSW,用于实现近似最近邻搜索)和乘积量化(Product Quantization)等。这些数据库支持快速的相似度和语义搜索,允许用户基于某种距离度量找到最接近给定查询向量的向量。最常用的距离度量包括欧几里得距离、余弦相似度和点积,Qdrant 完全支持这三种度量。

以下是这三种度量的简要概述:

  • 余弦相似度 - 余弦相似度是一种衡量两个向量相似程度的方法。简单来说,它反映了向量是否具有相同的方向(相似)或截然相反。余弦相似度通常用于文本表示,以比较两个文档或句子之间的相似性。余弦相似度的输出范围为 -1 到 1,其中 -1 表示两个向量完全不相似,1 表示最大相似度。
  • 点积 - 点积相似度度量是另一种衡量两个向量相似度的方法。与余弦相似度不同,它还考虑了向量的长度。例如,当文档的向量表示是基于术语(词)频率构建时,这一点可能很重要。点积相似度通过将两个向量中的对应值相乘然后对这些乘积求和来计算。总和越高,两个向量越相似。如果你对向量进行归一化(即让其中的数值之和为 1),点积相似度就等同于余弦相似度。
  • 欧几里得距离 - 欧几里得距离是衡量空间中两点之间距离的一种方法,类似于我们测量地图上两地之间的距离。它是通过计算两个点坐标之间差值的平方和的平方根来得出的。这种距离度量在机器学习中也常用于衡量两个向量的相似或不相似程度。

现在我们已经了解了什么是向量数据库以及它们在结构上与其他数据库有何不同,让我们来看看它们为何如此重要。

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

向量数据库在需要相似度搜索的各种应用中起着至关重要的作用,如推荐系统、基于内容的图像检索和个性化搜索。通过利用其高效的索引和搜索技术,向量数据库能够更快、更准确地检索已表示为向量的非结构化数据,从而帮助用户获得与其查询最相关的结果。

此外,使用向量数据库的其他好处还包括:

  1. 高效存储和索引高维数据。
  2. 能够处理拥有数十亿数据点的大规模数据集。
  3. 支持实时分析和查询。
  4. 能够处理源自复杂数据类型(如图像、视频和自然语言文本)的向量。
  5. 提高了机器学习和 AI 应用的性能并降低了延迟。
  6. 与构建定制解决方案相比,减少了开发和部署的时间与成本。

请记住,使用向量数据库的具体好处可能会因你组织的用例和所选数据库的特性而异。

现在,让我们从高层面评估一下 Qdrant 的架构。

Qdrant 架构的高层概述

qdrant

上图展示了 Qdrant 一些主要组件的高层概述。你应该熟悉以下术语:

  • 集合 (Collections):集合是点的命名集(带有负载的向量),你可以在其中进行搜索。同一集合内每个点的向量必须具有相同的维度,并使用单一指标进行比较。命名向量 (Named vectors) 可用于在单个点中拥有多个向量,每个向量都可以有自己的维度和度量要求。
  • 距离度量 (Distance Metrics):这些用于衡量向量之间的相似性,必须在创建集合时选择。度量的选择取决于获取向量的方式,特别是用于编码新查询的神经网络。
  • 点 (Points):点是 Qdrant 操作的核心实体,它们由一个向量以及可选的 ID 和负载组成。
    • id:向量的唯一标识符。
    • Vector:数据的高维表示,例如图像、声音、文档、视频等。
    • 负载 (Payload):负载是一个 JSON 对象,包含你可以添加到向量中的额外数据。
  • 存储 (Storage):Qdrant 可以使用两种存储选项之一:内存 (In-memory) 存储(将所有向量存储在 RAM 中,速度最快,因为仅在持久化时才需要访问磁盘),或 内存映射 (Memmap) 存储(创建与磁盘文件关联的虚拟地址空间)。
  • 客户端:你可以用来连接 Qdrant 的编程语言。

后续步骤

现在你已经进一步了解了向量数据库和 Qdrant,可以开始学习我们的教程了。如果你从未接触过向量数据库,请直接查看入门 (Getting Started) 部分。相反,如果你是该技术的资深开发者,请直接跳转到最适合你用例的部分。

在学习教程的过程中,如果有任何问题,请随时通过我们的 Discord 频道告知我们。😎

此页面有用吗?

感谢您的反馈!🙏

很抱歉听到这个。😔 你可以在 GitHub 上编辑此页面,或创建一个 GitHub Issue。