什么是向量数据库?
什么是向量数据库?
向量数据库是一种专门用于存储、管理和搜索高维向量嵌入的数据库。其主要功能是作为大型语言模型 (LLM) 可以查询的外部知识库,从而将模型的响应与存储在知识库中的数据“联系起来”,并降低产生幻觉的风险。向量数据库的核心功能是执行语义相似性搜索,即识别概念上相似的数据点,而不仅仅是匹配关键字。它索引并存储来自机器学习模型的密集和稀疏向量嵌入,以实现快速相似性搜索和检索。这些嵌入可以捕捉文本、图像或音频等非结构化数据中的语义关系。在数据库创建的向量空间中,相关项目的位置相互靠近,从而使系统可以根据相关性对结果进行排序。
向量嵌入
什么是向量嵌入?它们是如何创建的?
向量嵌入是浮点值的数值数组,表示单词、短语或整个文档等数据。它们由机器学习模型(例如大型语言模型)生成,将数字媒体转换为高维空间内的点。此过程捕获原始数据的潜在语义含义和关系。例如,一张“金毛猎犬在公园里玩耍”的图片可以转换成一个与文本“快乐的狗在户外”对应的嵌入向量,且数值上非常接近。值得注意的是,一个提供商的模型创建的嵌入不能被另一个提供商的模型理解;例如,来自 OpenAI 模型的嵌入与来自另一个提供商的嵌入不兼容。
什么是密集向量(嵌入)?
密集向量是高维数值嵌入,其中几乎所有元素都是非零值。密集向量的一个重要特征是,特定模型生成的所有向量必须具有相同的固定维数,这是测量相似性的前提条件。例如,Azure OpenAI 模型的嵌入有 1,536 个维度。它们通常由 Transformer 模型生成,捕获丰富而细致的语义含义,使其成为语义相似性搜索的理想选择。例如,单词“cat”的密集向量可能显示为 [0.135, -0.629, 0.327, 0.366, ...]。
什么是稀疏向量(嵌入)?
什么是向量搜索?
向量搜索是一种通过将数据表示为高维数值向量(通常称为嵌入)来查找相似数据的技术。这种方法用途广泛,因为机器学习模型可以为任何类型的数字媒体生成嵌入,包括文本、图像和音频。基本概念涉及将数据转换为向量空间,其中向量之间的几何距离表示它们的语义相似性。向量搜索是一种查询操作,它根据特定的相似性度量来查找与给定查询向量最相似的向量。例如,搜索“犬科动物”可以在语义上匹配包含单词“狗”的文档,这与传统的关键字搜索不同,后者匹配的是字面意思而不是其基本含义。
测量相似性
如何测量向量相似度和距离?
在向量搜索中,通过计算高维空间中两个向量之间的距离或角度来量化相似度;距离越近的向量被认为在语义上越相似。用于衡量这种接近程度的常用指标包括余弦相似度、欧几里得距离、点积、汉明距离和曼哈顿距离。
- L2 距离(欧几里得距离)是最常见的度量,表示两个向量点之间的“直线”距离。
- L1 距离(曼哈顿距离)通过将向量分量的绝对差值相加来测量距离,就像在城市网格中导航一样。
- Linf 距离(切比雪夫距离)是沿任何单一维度的最大差异。
- 余弦相似度通过测量两个向量之间角度的余弦来确定它们是否指向相似的方向,而不考虑它们的大小。分数为 1 表示向量相同,分数为 –1 表示向量相反。这是标准化嵌入空间的常见选择,例如来自 OpenAI 模型的嵌入空间。
- 点积相似性同时考虑向量的角度和大小。它相当于标准化向量的余弦相似度,但通常计算效率更高。
- 汉明距离计算两个向量不同的维数。
- 最大内积 (MaxSim) 是一种相似性度量,当单个数据(如文档)由多个向量(例如,每个单词一个向量)表示时使用。它通过将一个文档中的每个向量与另一个文档中最相似的向量进行比较,然后汇总结果来计算相似度。
高效的搜索算法
HNSW 和 ANN 等算法如何实现高效的向量搜索?
在海量高维数据集中搜索相似向量是一项重大挑战。随着数据集的增长,将查询向量与其他向量进行比较的“暴力”方法在计算上是不可行的。这个问题可以通过近似最近邻 (ANN) 算法来解决。这些技术可以快速查找最接近查询的向量,而无需执行详尽的比较。分层可导航小世界 (HNSW) 是一种常见的 ANN 算法,它将向量组织成一个分层图结构,其中向量基于相似性进行连接,从而实现快速遍历。这比 FLAT(暴力)搜索更有效、更准确,后者计算量大,但更精确。通过大幅缩小搜索范围,这些结构实现了巨大的速度提升,但代价是绝对精度略有降低,不过这种降低通常是可以接受的。
什么是向量搜索系统中的多阶段搜索?
多阶段检索或检索器框架(为了简单起见,我们也可以称之为搜索管道)是一个精心设计的工作流,它定义了处理查询的步骤顺序。这通常包括查询分析、从一个或多个索引中进行初步检索(例如,结合词汇和向量搜索的混合方法)、结果过滤,以及在将结果返回给用户之前的最后重新排序阶段等步骤。
使用检索器框架构建搜索管道有哪些优势?
主要优势是模块化和灵活性。它使开发人员轻松地组合不同的搜索和排序策略(例如混合搜索),并构建根据特定需求定制的复杂、多阶段检索管道,而无需从头开始构建整个系统。
什么是语义重排序?
语义重排序是一个第二阶段的过程,用于提高搜索结果的相关性。在初始快速检索阶段获取大量候选文档后,将使用计算量更大但更准确的模型来对这个较小的集合进行重新排序,以产生更精确的最终排名。
“检索和重新排序”多阶段过程如何工作?
“检索和重新排序”管道分为两个不同的阶段运行:
- 检索:使用高效、可扩展性检索方法(如 ANN 向量搜索或词汇 BM25 搜索)从完整索引中获取初始候选文档集。
- 重新排序:然后将这个较小的候选集传递给更强大的模型(如交叉编码器),该模型对查询和每个文档之间的语义关系进行更深入的分析,并对它们进行重新排序以提高最终相关性。
用于重新排序的双编码器和交叉编码器架构有什么区别?
- 双编码器独立地为查询和文档生成各自的嵌入。由于文档嵌入可以预先计算并编入索引,因此这种架构速度非常快,并用于初始检索阶段。
- 交叉编码器将查询和文档一起作为单个输入进行处理。这使它能够捕捉更深层次的上下文交互,使其高度准确,但速度也慢得多。由于其计算成本,它只适用于一小部分候选结果的重新排序阶段。
存储和优化
向量通常如何存储在向量数据库中,以及会产生哪些存储挑战?
矢量通常存储为 32 位浮点数数组 (float32)。主要的挑战是巨大的存储空间;单个 384 维向量占用大约 1.5KB。因此,一个包含 1 亿个文档的索引只需增加一个向量字段,其大小就能扩大 7 倍。由于像 HNSW 这样的矢量搜索算法需要将索引加载到 RAM 中以提高性能,这带来了内存成本和可扩展性方面的重大挑战。
什么是向量量化?
矢量量化是一种有损压缩技术,通过用更少的位表示模型的参数来减少模型的内存和计算需求。这对于可能拥有数十亿个参数的 LLM 尤为有用。通过将高精度的float32数转换为低精度的整数(如int8或int4),量化可以显著缩小模型大小,加快推理速度,而对精度的影响最小。
什么是标量量化(SQ)?
标量量化通过将 float32 值的连续范围映射到一组离散的低精度整数值(例如,int8)来压缩向量。这可以将存储大小减少 4 倍,同时保留大量向量的幅度信息,这对于相关性很重要。
什么是二进制量化 (BQ)?
二进制量化是一种更积极的压缩技术,它将 float32 向量的每个分量转换为二进制表示形式(例如 1 位)。这可以实现高达 32 倍的压缩,最大限度地节省内存,并使用基于整数的运算实现更快的计算速度,但通常会以一定的精度损失为代价。
集成矢量存储(数据库)和搜索平台有哪些优势?
将向量存储和搜索与传统数据库功能(例如词汇搜索和过滤)相结合的集成平台具有显著的优势。它消除了在不同系统之间同步数据的需要,从而简化了体系结构。最重要的是,它支持强大的混合搜索,能够在单个统一查询中执行词汇搜索、向量搜索和元数据过滤,从而获得更相关的结果,并为开发者提供更简单的体验。
向量搜索与词汇搜索有何不同?
- 词汇搜索(例如 BM25)基于关键字匹配。它会查找包含查询中出现的精确术语的文档。它很精准,但不理解上下文或同义词。
- 向量搜索基于语义含义。它会找到概念上与查询相似的文档,即使它们不共享任何关键字。它非常适合理解用户意图,但可能不如词汇搜索精准。
向量数据库的常见用例有哪些?开发人员可以使用向量搜索构建什么?
开发人员使用向量数据库来构建复杂的应用程序,这些应用程序依赖于理解数据的语义含义。常见用例包括:
- 语义搜索:在电子商务或文档发现系统等领域,创建能理解用户意图而非关键字的搜索体验
- 检索增强生成 (RAG):为 LLM 和聊天机器人提供访问外部最新知识的权限,以生成更准确和基于事实的回答
- 推荐引擎:根据与用户兴趣或过去行为的概念相似性,推荐产品、文章或媒体
- 图像和多模态搜索:查找视觉上相似的图像或在不同数据类型之间进行搜索(例如,使用文本查找图像)