理解向量数据库





5.00/5 (4投票s)
什么是向量数据库?
引言
随着ChatGPT等大型语言模型的广泛采用,向量数据库日益受到关注。然而,向量数据库的出现早于这一现象,因为它们解决了传统数据库在处理图像、视频和文本等多样化数据类型时难以实现的相似性和语义搜索功能这一挑战性问题。
在本系列文章中,我们将深入探讨向量数据库为何不仅仅是炒作,在特定场景下为何不可或缺。我们将探讨它们所采用的算法、它们面临的挑战,并将理论原则应用于实际应用:利用这项技术构建推荐系统。
鉴于该主题相对较新,关于向量数据库的权威教材有限。然而,有一本专门针对自然语言处理(NLP)应用的向量数据库的资源,可作为对该主题的良好入门。
用于自然语言处理的向量数据库:使用高维文本表示构建智能NLP应用 (Allen)
本文最初发布于: 理解向量数据库
万物始于数据
直到最近,数据主要存储在传统的 关系型数据库 中,并通过各种复杂程度的查询来检索信息。
在2000年代后期,云计算的兴起以及存储成本的大幅降低,带来了海量非结构化和多样化的数据。这些数据包括图像、视频、音频文件、文档和各种文本。同时,查询这些多样化数据对象的 需求依然存在,尽管其复杂度有所增加。
我们如何解决这个挑战?
在日常生活中,相似性的概念意味着什么?
例如,当我们说我们的姐妹长得像我们朋友的女儿时,我们是在进行基于人类的推理,运用眼色或其他身体特征等相似性标准。同样,我们可能会断言两篇文档因使用了相同的词语或同义表达而相似。在这种情况下,我们正在分析文档,并将词语作为特征来进行比较。
这里考虑的实体,无论是人类还是文档,都无法以传统方式进行量化,因为我们并没有运用数学推理来确定精确的相似程度。相反,我们的大脑天生就能直观地辨别这些实体之间的共性,通常无需显式计算。
那么,我们如何引入一定的正式性呢?
数学来帮忙
通常,数学是解决我们部分问题的方法。在这里,我们正在处理几个形式化的概念。
什么是向量空间?
向量空间是一个集合,它配备了两种运算:向量加法和标量乘法。这些运算必须满足某些性质,包括加法和标量乘法下的封闭性、结合律、交换律、加法单位元(零向量)的存在以及每个向量的加法逆元的存在。向量空间为研究向量提供了框架,向量可以代表各种数学对象,例如几何量、物理量和抽象数学实体。
重要
数学家们创造了向量空间的概念,使其在 线性组合 下具有结构稳定性,允许两个向量相加或乘以一个常数因子。这个基本概念在线性代数中至关重要,使我们能够以基本的方式处理抽象量——添加、减去和比较它们。
实数集合是向量空间的一个例子:当我们加两个实数时,结果仍然是一个实数。
数学是否定义了相似性的概念?
在实践中,它通常定义了相反的概念,即距离,但在数学框架内定义相似性同样是可能的。
考虑一个向量空间 E。E 上的度量或距离函数 d 是一个函数,它将 EE 的点对映射到实数,并满足以下规则:
- 一个对象与其自身的距离始终为零:对于所有 x ∈ E,d(x,x) = 0
- 不同对象之间的距离始终为正。
- 距离是对称的:对于所有 x,y ∈ E,d(x,y) = d(y,x)
- 距离满足三角不等式:对于所有 x,y,z ∈ E,d(x,y) ≤ d(x,z) + d(z,y)
信息
理论上,距离可以在更一般的空间中定义,称为度量空间,其中元素不要求遵循向量空间的加法性质。然而,度量空间的性质通常不如向量空间丰富。
例如,在实数集 R 中,绝对值函数充当度量,允许我们评估两个值之间的接近程度。
d(x,y) = |x - y|
信息
虽然这些例子可能看起来很简单,但它们说明了该主题的本质:数学长期以来一直将接近的概念形式化,我们应该利用这些原理来促进文档或图像之间的比较。
在实践中,我们将操作于向量空间 Rⁿ,它代表了实数 n-元组的集合。
因此,我们面临着诸如图像、音频文件或文档等可触摸的实体,我们的目标是比较它们,以及一个强大的数学框架来建模相似性。
然而,我们如何弥合这两个领域之间的鸿沟?
此时,我们遇到了一个挑战:我们拥有一组 A 的非结构化数据,包括图像、视频和文档,它们不容易比较,同时也有一个强大的数学框架。弥合这一差距的解决方案再次来自于数学,特别是函数 的概念。函数 在两个元素集之间建立映射,提供了一种关联不同数据集并实现有意义的比较的方法。
f: A → Rⁿ
在人工智能中,这个函数被称为 **嵌入(embedding)**。本质上,我们将集合 A 的每个元素翻译或“嵌入”到一个 n-元组中。然而,需要注意的是,反向操作不能普遍应用:并非每个 n-元组都必然代表集合 A 的一个元素(因为实数集 R 是不可数的)。
理论上,这个概念似乎很简单:我们有一个函数,可以实现文档或图像与向量空间之间的正确映射。然而,这个函数的实际实现正是挑战所在。这个过程涉及到对函数 f 的建模。因此,在文献中,f 通常被称为“音频模型”(如果我们旨在嵌入音频数据),或“视频模型”(如果我们旨在嵌入视频数据),依此类推,取决于要嵌入的数据类型。这些模型旨在捕捉相应数据类型在向量空间中的有意义的表示,从而实现比较、聚类、分类以及机器学习和人工智能中的各种下游任务。
基于具体要求和数据性质,已构思并部署了许多模型。为了具体说明这一概念,我们将深入探讨其中一种模型:**tf-idf**(详见后续帖子)。
那么,向量数据库是什么?
一旦图像或文档等数据被转换为向量空间中的嵌入,就可以将它们存储在数据存储中。虽然传统的 关系型数据库管理系统(RDBMS) 可以实现此目的,但它们并非专门为存储向量而设计,因此并未针对此类数据进行优化。这种必要性促使了向量数据库的开发。
信息
向量数据库是专门设计的数据库,用于高效存储和查询高维向量数据。与针对表格数据进行优化的传统关系型数据库不同,向量数据库经过定制,可将向量作为主要数据类型进行处理。
它们提供了存储、索引和查询向量的机制,以保持其高维结构并实现高效的相似性搜索和其他基于向量的操作。向量数据库的例子包括 Milvus、Faiss 和 Pinecone。
向量数据库的实际用途是什么?
一旦存储了文档或图像,就可以针对这些向量执行查询。使用向量进行相似性搜索确实是一个简单的过程,如前所述。
-
向量数据库支持图像或视频特征的索引和搜索,使用户能够搜索具有相似视觉特征的图像或视频。例如,用户可以搜索描绘特定对象或场景的图像,系统将检索视觉上相似的图像。
-
向量数据库可以驱动产品推荐引擎,提供基于用户历史购买或浏览习惯的个性化建议。通过利用产品向量的索引并采用相似性搜索功能,系统可以快速找到与用户偏好高度匹配的产品。
-
向量数据库可用于欺诈检测。
-
...
我们将深入探讨用于文档的特定模型。由于涉及数学符号,我们建议有兴趣的读者参考原始文章以全面了解其内容。有关具体示例,请参见 此处。
向量数据库如何高效地计算相似性?
向量数据库的结构旨在实现快速的相似性计算。然而,当寻找给定向量的 k 个最近邻时,计算每个向量之间的距离(蛮力方法)变得不切实际,尤其是在处理数十亿个向量时。为了解决这个挑战,已经开发了各种技术来实现高效计算。这些技术通常被称为 **近似最近邻(ANN)**。
在这里,我们将简要概述主要的现有算法,并参考更专业的资源以获取更多详细信息。
发现 ANNOY
ANNOY(Approximate Nearest Neighbors Oh Yeah)是一个具有 Python 绑定的 C++ 库,它提供了近似最近邻搜索算法的高效实现。ANNOY 旨在快速查找高维数据集的近似最近邻。它通过构建分割数据空间的二叉树,然后高效地遍历这些树来识别最近邻来实现这一点。
发现 LSH
LSH(Locality Sensitive Hashing)是一种用于高维空间中近似最近邻搜索的技术。LSH 通过以高概率将相似数据点哈希到同一个桶中来工作,从而实现高效的近似相似性搜索。LSH 的关键思想是设计哈希函数,使相似数据点映射到相同或相邻的哈希桶,同时以高概率将不相似的点映射到不同的桶。
发现 HNSW
HNSW(Hierarchical Navigable Small World)是一种用于构建数据结构以实现高维空间中高效近似最近邻搜索的方法。HNSW 构建了一个分层图结构,其中每个节点代表一个数据点,边将节点连接到其最近邻。图的构建方式使其表现出小世界属性,意味着节点与其最近邻以及更远但仍然相关的其他节点相连接。
最终想法
如果您想深入了解此主题,请购买以下书籍,其中包含了本系列中强调的所有概念,并深入探讨了更高级的概念。
用于自然语言处理的向量数据库:使用高维文本表示构建智能NLP应用 (Allen)
如果您需要更多信息,请随时与我联系。
历史
- 2024年2月9日:初始版本