什么是向量数据库?

什么是向量数据库?

向量数据库是一种专门用于存储、管理和搜索高维向量嵌入的数据库。其主要功能是作为大型语言模型 (LLM) 可以查询的外部知识库,从而将模型的响应与存储在知识库中的数据“联系起来”,并降低产生幻觉的风险。向量数据库的核心功能是执行语义相似性搜索,即识别概念上相似的数据点,而不仅仅是匹配关键字。它索引并存储来自机器学习模型的密集和稀疏向量嵌入,以实现快速相似性搜索和检索。这些嵌入可以捕捉文本、图像或音频等非结构化数据中的语义关系。在数据库创建的向量空间中,相关项目的位置相互靠近,从而使系统可以根据相关性对结果进行排序。


向量嵌入

什么是向量嵌入?它们是如何创建的?

向量嵌入是浮点值的数值数组,表示单词、短语或整个文档等数据。它们由机器学习模型(例如大型语言模型)生成,将数字媒体转换为高维空间内的点。此过程捕获原始数据的潜在语义含义和关系。例如,一张“金毛猎犬在公园里玩耍”的图片可以转换成一个与文本“快乐的狗在户外”对应的嵌入向量,且数值上非常接近。值得注意的是,一个提供商的模型创建的嵌入不能被另一个提供商的模型理解;例如,来自 OpenAI 模型的嵌入与来自另一个提供商的嵌入不兼容。

什么是密集向量(嵌入)?

密集向量是高维数值嵌入,其中几乎所有元素都是非零值。密集向量的一个重要特征是,特定模型生成的所有向量必须具有相同的固定维数,这是测量相似性的前提条件。例如,Azure OpenAI 模型的嵌入有 1,536 个维度。它们通常由 Transformer 模型生成,捕获丰富而细致的语义含义,使其成为语义相似性搜索的理想选择。例如,单词“cat”的密集向量可能显示为 [0.135, -0.629, 0.327, 0.366, ...]

什么是稀疏向量(嵌入)?

稀疏向量是高维数值嵌入,其中大多数元素为零,这种结构可同时优化存储和计算效率。与密集检索器不同,稀疏检索器使用传统搜索技术(如词频-逆文档频率 (TF-IDF) 或 BM25)根据关键字将查询与文档进行匹配。例如,搜索“健康零食”可能会生成一个稀疏向量,该向量会扩展为相关术语并为其分配权重,例如[“苹果”(3.0)、“胡萝卜”(2.5)、“维生素”(1.2)],而词汇表中所有其他术语的权重为零。该结构与传统倒排索引高度兼容,可实现高效的检索。

测量相似性

如何测量向量相似度和距离?

在向量搜索中,通过计算高维空间中两个向量之间的距离或角度来量化相似度;距离越近的向量被认为在语义上越相似。用于衡量这种接近程度的常用指标包括余弦相似度、欧几里得距离、点积、汉明距离和曼哈顿距离。

  • L2 距离(欧几里得距离)是最常见的度量,表示两个向量点之间的“直线”距离。
  • L1 距离(曼哈顿距离)通过将向量分量的绝对差值相加来测量距离,就像在城市网格中导航一样。
  • Linf 距离(切比雪夫距离)是沿任何单一维度的最大差异。
  • 余弦相似度通过测量两个向量之间角度的余弦来确定它们是否指向相似的方向,而不考虑它们的大小。分数为 1 表示向量相同,分数为 –1 表示向量相反。这是标准化嵌入空间的常见选择,例如来自 OpenAI 模型的嵌入空间。
  • 点积相似性同时考虑向量的角度和大小。它相当于标准化向量的余弦相似度,但通常计算效率更高。
  • 汉明距离计算两个向量不同的维数。
  • 最大内积 (MaxSim) 是一种相似性度量,当单个数据(如文档)由多个向量(例如,每个单词一个向量)表示时使用。它通过将一个文档中的每个向量与另一个文档中最相似的向量进行比较,然后汇总结果来计算相似度。

高效的搜索算法

什么是向量搜索系统中的多阶段搜索?

多阶段检索或检索器框架(为了简单起见,我们也可以称之为搜索管道)是一个精心设计的工作流,它定义了处理查询的步骤顺序。这通常包括查询分析、从一个或多个索引中进行初步检索(例如,结合词汇和向量搜索的混合方法)、结果过滤,以及在将结果返回给用户之前的最后重新排序阶段等步骤。


使用检索器框架构建搜索管道有哪些优势?

主要优势是模块化和灵活性。它使开发人员轻松地组合不同的搜索和排序策略(例如混合搜索),并构建根据特定需求定制的复杂、多阶段检索管道,而无需从头开始构建整个系统。

什么是语义重排序?

语义重排序是一个第二阶段的过程,用于提高搜索结果的相关性。在初始快速检索阶段获取大量候选文档后,将使用计算量更大但更准确的模型来对这个较小的集合进行重新排序,以产生更精确的最终排名。

“检索和重新排序”多阶段过程如何工作?

“检索和重新排序”管道分为两个不同的阶段运行:

  1. 检索:使用高效、可扩展性检索方法(如 ANN 向量搜索或词汇 BM25 搜索)从完整索引中获取初始候选文档集。
  2. 重新排序:然后将这个较小的候选集传递给更强大的模型(如交叉编码器),该模型对查询和每个文档之间的语义关系进行更深入的分析,并对它们进行重新排序以提高最终相关性。

用于重新排序的双编码器和交叉编码器架构有什么区别?

  • 双编码器独立地为查询和文档生成各自的嵌入。由于文档嵌入可以预先计算并编入索引,因此这种架构速度非常快,并用于初始检索阶段。
  • 交叉编码器将查询和文档一起作为单个输入进行处理。这使它能够捕捉更深层次的上下文交互,使其高度准确,但速度也慢得多。由于其计算成本,它只适用于一小部分候选结果的重新排序阶段。

存储和优化

向量通常如何存储在向量数据库中,以及会产生哪些存储挑战?

矢量通常存储为 32 位浮点数数组 (float32)。主要的挑战是巨大的存储空间;单个 384 维向量占用大约 1.5KB。因此,一个包含 1 亿个文档的索引只需增加一个向量字段,其大小就能扩大 7 倍。由于像 HNSW 这样的矢量搜索算法需要将索引加载到 RAM 中以提高性能,这带来了内存成本和可扩展性方面的重大挑战。

什么是向量量化?

矢量量化是一种有损压缩技术,通过用更少的位表示模型的参数来减少模型的内存和计算需求。这对于可能拥有数十亿个参数的 LLM 尤为有用。通过将高精度的float32数转换为低精度的整数(如int8int4),量化可以显著缩小模型大小,加快推理速度,而对精度的影响最小。

什么是标量量化(SQ)?

标量量化通过将 float32 值的连续范围映射到一组离散的低精度整数值(例如,int8)来压缩向量。这可以将存储大小减少 4 倍,同时保留大量向量的幅度信息,这对于相关性很重要。

什么是二进制量化 (BQ)?

二进制量化是一种更积极的压缩技术,它将 float32 向量的每个分量转换为二进制表示形式(例如 1 位)。这可以实现高达 32 倍的压缩,最大限度地节省内存,并使用基于整数的运算实现更快的计算速度,但通常会以一定的精度损失为代价。

集成矢量存储(数据库)和搜索平台有哪些优势?

将向量存储和搜索与传统数据库功能(例如词汇搜索和过滤)相结合的集成平台具有显著的优势。它消除了在不同系统之间同步数据的需要,从而简化了体系结构。最重要的是,它支持强大的混合搜索,能够在单个统一查询中执行词汇搜索、向量搜索和元数据过滤,从而获得更相关的结果,并为开发者提供更简单的体验。