什么是向量数据库?
向量嵌入
什么是向量嵌入?它们是如何创建的?
向量嵌入是浮点值的数值数组,表示诸如单词、短语或整个文档等数据。它们由机器学习模型(例如大型语言模型)生成,将数字媒体转换为高维空间内的点。此过程捕获原始数据的潜在语义含义和关系。例如,一张“金毛猎犬在公园里玩耍”的图片可以转换成一个与文本“快乐的狗在户外”对应的嵌入向量,且数值上非常接近。值得注意的是,一个提供商的模型创建的嵌入不能被另一个提供商的模型理解;例如,来自 OpenAI 模型的嵌入与来自另一个提供商的嵌入不兼容。
什么是密集向量(嵌入)?
密集向量是高维数值嵌入,其中几乎所有元素都是非零值。密集向量的一个重要特征是,特定模型生成的所有向量必须具有相同的固定维数,这是测量相似性的前提条件。例如,Azure OpenAI 模型的嵌入有 1,536 个维度。它们通常由 Transformer 模型生成,捕获丰富而细致的语义含义,使其成为语义相似性搜索的理想选择。例如,单词“cat”的密集向量可能显示为 [0.135, -0.629, 0.327, 0.366, ...]。
什么是稀疏向量(嵌入)?
什么是向量搜索?
向量搜索是一种通过将数据表示为高维数值向量(通常称为嵌入)来查找相似数据的技术。这种方法用途广泛,因为机器学习模型可以为任何类型的数字媒体生成嵌入,包括文本、图像和音频。基本概念涉及将数据转换为向量空间,其中向量之间的几何距离表示它们的语义相似性。向量搜索是一种查询操作,它根据特定的相似性度量来查找与给定查询向量最相似的向量。例如,搜索“犬科动物”可以在语义上匹配包含单词“狗”的文档,这与传统的关键字搜索不同,后者匹配的是字面意思而不是其基本含义。
测量相似性
如何测量向量相似度和距离?
在向量搜索中,通过计算高维空间中两个向量之间的距离或角度来量化相似度;距离越近的向量被认为在语义上越相似。用于衡量这种接近程度的常用指标包括余弦相似度、欧几里得距离、点积、汉明距离和曼哈顿距离。
- L2 距离(欧几里得距离)是最常见的度量,表示两个向量点之间的“直线”距离。
- L1 距离(曼哈顿距离)通过将向量分量的绝对差值相加来测量距离,就像在城市网格中导航一样。
- Linf 距离(切比雪夫距离)是沿任何单一维度的最大差异。
- 余弦相似度通过测量两个向量之间角度的余弦来确定它们是否指向相似的方向,而不考虑它们的大小。分数为 1 表示向量相同,分数为 –1 表示向量相反。这是标准化嵌入空间的常见选择,例如来自 OpenAI 模型的嵌入空间。
- 点积相似性同时考虑向量的角度和大小。它相当于标准化向量的余弦相似度,但通常计算效率更高。
- 汉明距离计算两个向量不同的维数。
- 最大内积 (MaxSim) 是一种相似性度量,当单个数据(如文档)由多个向量(例如,每个单词一个向量)表示时使用。它通过将一个文档中的每个向量与另一个文档中最相似的向量进行比较,然后汇总结果来计算相似度。
高效的搜索算法
什么是 k 最近邻 (kNN) 搜索?
k 最近邻 (kNN) 搜索是向量相似度搜索背后的核心操作:给定一个查询向量,由其根据选定的距离度量在数据库中找到与之最接近的 k 个向量。“k”只是您想要返回的结果数量,例如,10 张最相似的产品图片,或者 RAG 查询的 5 个最相关的文档块。精确的 kNN 搜索通过将查询与索引中的每个向量进行比较来保证找到真正的最接近匹配,这是精确的,但扩展性很差。这就是生产系统通常依赖近似方法的原因。
精确近邻搜索和近似最近邻搜索 (ANN) 有什么区别?
精确 kNN 将查询向量与数据集中的每个向量进行比较,以确保返回真正的最接近匹配项。这种方法精确度高,但计算成本高,延迟与索引的大小呈线性增长。近似最近邻 (ANN) 搜索通过将搜索范围缩小到有希望的向量子集(而不是扫描所有向量),以少量的准确性换取大幅度的速度提升。实际上,ANN 的召回率足够高,因此大多数生产环境的向量搜索系统默认使用它,只在小型数据集或需要完美召回的情况下才使用精确 kNN。
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 倍的压缩,最大限度地节省内存,并使用基于整数的运算实现更快的计算速度,但通常会以一定的精度损失为代价。
向量数据库有哪些优势?
向量数据库在处理非结构化数据和 AI 应用时,相较于传统数据库具有多项优势:
超越关键词匹配的语义搜索:向量数据库根据语义而非精确的词语匹配来检索结果。查询“学生负担得起的笔记本电脑”可以显示出被描述为“大学预算笔记本”的产品,因为底层嵌入捕捉的是概念上的相似性,而非文字上的重叠。
大规模快速相似度搜索:通过将向量索引与近似最近邻算法(如 HNSW)相结合,向量数据库能够在毫秒级时间内从数十亿个向量中返回相关结果,使实时 AI 应用成为可能。
支持非结构化数据:文本、图像、音频、视频和其他非结构化格式都可以表示为向量嵌入,并通过一个统一的系统进行搜索,从而无需为每种数据类型单独建立管道。
大型语言模型的基础:向量数据库在检索增强生成 (RAG)架构中充当检索层,从可信来源为语言模型提供相关的最新语境,减少幻觉。
混合搜索功能:现代向量数据库在单个查询中结合了密集向量搜索、稀疏向量搜索和传统关键字 (BM25) 搜索,可提供比任何单一方法都更准确的结果。
可扩展性和性能:专门设计的索引结构、量化和分布式架构使向量数据库能够处理不断增长的数据集和大量查询,而不会明显增加延迟。
降低操作复杂性:集成的向量数据库无需将存储、嵌入管理和搜索等独立系统拼接在一起,从而简化了人工智能应用的架构。
集成向量数据库和搜索平台有哪些优势?
将向量存储和搜索与传统数据库功能(例如词汇搜索和筛选)相结合的集成平台具有显著的优势。它消除了在不同系统之间同步数据的需要,从而简化了体系结构。最重要的是,它支持强大的混合搜索,能够在单个统一查询中执行词汇搜索、向量搜索和元数据筛选,从而获得更相关的结果,并为开发者提供更简单的体验。
什么是向量数据库中的元数据筛选?
元数据筛选是基于每个向量附加的结构化属性(如日期、类别、作者、价格、语言或用户权限)缩小向量搜索结果范围的过程。向量搜索通过语义相似度检索结果,而元数据筛选器则施加硬性约束,结果必须满足这些条件,因此“轻量跑鞋”查询可以限制在有现货、价格低于 100 英镑且用户所在地区有售的商品。
将向量相似度与元数据筛选相结合对于生产应用至关重要。例如,RAG 系统可能需要将响应限制在当前用户有权查看的文档,或者限制在过去六个月内发表的文章。如果没有元数据筛选,就会经常出现语义相关但上下文错误的结果。
常见的方法有两种。预筛选在相似度搜索之前应用元数据约束,从一开始就减少候选集;这保证了请求的结果数量,但在高度选择性的筛选器上可能会变慢。后筛选首先运行相似度搜索,然后排除不匹配的结果。这种方法速度更快,但如果筛选条件较为严格,返回的结果可能少于请求的数量。现代向量数据库通常结合运用两种策略,根据筛选条件的选择性动态选择,以平衡召回率、延迟和准确性。
向量搜索与词汇搜索有何不同?
- 词汇搜索(例如 BM25)基于关键字匹配。它会查找包含查询中出现的精确术语的文档。它很精准,但不理解上下文或同义词。
- 向量搜索基于语义含义。它会找到概念上与查询相似的文档,即使它们不共享任何关键字。它非常适合理解用户意图,但可能不如词汇搜索精准。
向量数据库的常见用例有哪些?开发人员可以使用向量搜索构建什么?
开发人员使用向量数据库来构建复杂的应用程序,这些应用程序依赖于理解数据的语义含义。常见用例包括:
- 语义搜索:在电子商务或文档发现系统等领域,创建能理解用户意图而非关键字的搜索体验
- 检索增强生成 (RAG):为 LLM 和聊天机器人提供访问外部最新知识的权限,以生成更准确和基于事实的回答
- 推荐引擎:根据与用户兴趣或过去行为的概念相似性,推荐产品、文章或媒体
- 图像和多模态搜索:查找视觉上相似的图像或在不同数据类型之间进行搜索(例如,使用文本查找图像)
借助 Elastic 的向量数据库功能
Elasticsearch 是一个向量数据库,建立在世界上部署最广泛的搜索引擎基础之上,在一个平台中结合了向量搜索、词汇搜索和元数据筛选。与运行专用向量存储和单独的搜索系统相比,团队可以使用一个引擎在生产规模上支持语义搜索、混合检索和检索增强生成。
关键功能包括:
- 原生密集和稀疏向量支持:在同一索引中索引、存储和查询密集向量嵌入和稀疏嵌入(包括由 Elastic 的 ELSER 模型生成的嵌入)。
- 开箱即用的混合搜索:使用检索器框架将 BM25 词汇搜索、密集向量 kNN 和稀疏向量检索结合到单个查询中,并使用互惠排序融合 (RRF) 合并结果。
- 内置推理:semantic_text 字段类型和推理 API 自动处理分块、嵌入生成和查询时向量化,免除了管理独立嵌入管道的需求。
- 高效的存储:更好的二进制量化 (BBQ) 默认启用于密集向量,在保持召回率的同时将内存占用减少高达 32 倍,从而在扩展时降低基础架构成本。
- 筛选向量搜索:在单个查询中应用元数据筛选、地理空间限制和文档级安全性,同时考虑向量相似度,查询规划器根据选择性选择预筛选或后筛选。
- 生产级操作: 继承了 Elasticsearch 的分布式架构,包括分片、复制、基于角色的访问控制、快照和监控,这些功能均成熟且经过大规模部署的实战验证。
- 语义重排序:Elastic Rerank 模型在初始检索的基础上提供第二阶段的相关性提升,无需重新索引即可提高结果质量。
请参阅Elasticsearch Labs 文档,开始使用 Elasticsearch 中的向量搜索。
部署灵活性:本地部署和隔离式向量数据库
向量数据库的运行位置与其性能越来越重要。大多数向量数据库都以托管云服务的形式提供,但越来越多的企业需要在自己的基础设施内部署这些数据库,要么在内部部署,要么在完全隔离的环境中部署。
本地部署意味着向量数据库运行在组织控制的硬件上,通常是在自己的数据中心或私有云内。数据从未离开组织的网络边界,运营团队直接管理安装、扩展、升级和安全。隔离部署更进一步:该环境完全与公共互联网没有任何连接。软件更新、模型权重和嵌入管道必须通过受控的离线流程引入,而且不能向外发送遥测数据或数据。
与大多数其他基础设施相比,这对向量数据库更为重要。在 RAG 管道中,向量数据库保存了支撑语言模型响应的知识库,这通常意味着它包含组织拥有的最敏感内容:内部研究、客户记录、法律文件、源代码、机密情报或专有运营数据。嵌入本身也可能泄露有关源内容的信息,因此存储层是威胁模型的一个重要组成部分,而不是事后考虑的问题。
若干行业有硬性要求,实际上排除了只使用公共云的向量数据库:
- 联邦、国防和情报机构通常在机密或气隙网络中运行,这些网络不允许外部连接,并且软件必须满足特定的认证标准才能部署。
- 处理受保护健康信息的医疗服务提供商必须严格遵守有关存储和处理患者数据的规定,许多医疗服务提供商更愿意将 AI 工作负载保留在医院或支付方的基础架构内,而不是将临床笔记的嵌入发送到第三方服务。
- 金融服务公司面临数据驻留规则、监管审计要求和内部政策,这些政策通常要求将客户和交易数据保留在特定司法管辖区或公司自己的受控环境内。
- 有数据驻留或主权要求的企业,包括根据 GDPR 或类似地区框架等法规运营的任何组织,都需要能够将其向量数据库固定在特定国家或地区,或完全在自己的基础架构内运行。
选择支持全部署范围、托管云、自管云、本地部署和隔离式矢量数据库,可以让组织在具有截然不同的安全性和合规性配置文件的工作负载中采用单一技术进行标准化,而不是为敏感和非敏感数据运行单独的堆栈。