Elasticsearch:什么是向量数据库?

什么是向量数据库?

向量数据库是一种专门用于存储、管理和搜索高维向量嵌入的数据库,以实现语义相似度搜索。

这些嵌入由机器学习模型生成,可以捕捉文本、图像或音频等非结构化数据中的语义关系,并将概念上相关的项目在向量空间中放置得更近,从而让系统能够根据相关性对结果进行排序。向量数据库会对密集和稀疏嵌入进行索引和存储,以实现快速检索。它们通常还充当外部知识库,供大型语言模型(LLM)进行查询,使其能够基于可信数据生成响应,并降低产生幻觉的风险。

向量嵌入

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

向量嵌入是由浮点数值组成的数值数组,用于表示单词、短语或完整文档等数据。它们由机器学习模型(例如大型语言模型)生成,这些模型将数字媒体转换为高维空间中的点。这一过程能够捕捉原始数据背后的语义含义和关系。例如,一张"金毛猎犬在公园里玩耍"的图像可以被转换为一个嵌入,该嵌入在数值上接近"户外快乐的小狗"这段文本的嵌入。需要注意的是,由一个提供商的模型创建的嵌入无法被另一个提供商的模型理解;例如,OpenAI 模型生成的嵌入与其他提供商生成的嵌入并不兼容。

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

稠密向量是高维数值嵌入,其中几乎所有元素都是非零值。稠密向量的一个关键特征是,由特定模型生成的所有向量都必须具有相同的固定维度数,这是计算相似度的前提。例如,Azure OpenAI 模型生成的嵌入具有 1,536 个维度。稠密向量通常由 Transformer 模型生成,能够捕捉丰富而细致的语义含义,因此非常适合用于语义相似度搜索。例如,单词"猫"的稠密向量可能表示为 0.135, -0.629, 0.327, 0.366, ...

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

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

什么是向量搜索?

向量搜索是一种通过将数据表示为高维数值向量(通常称为嵌入)来查找相似数据的技术。这种方法具有很强的通用性,因为机器学习模型可以为各种类型的数字媒体生成嵌入,包括文本、图像和音频。其基本概念是将数据转换到一个向量空间中,在这个空间里,向量之间的几何距离表示它们在语义上的相似程度。向量搜索是一种查询操作,它根据特定的相似度指标,查找与给定查询向量最相似的向量。例如,搜索"犬类"可能会在语义上匹配包含"狗"这个词的文档,而传统的关键词搜索匹配的是字面上的词语,而不是其背后的含义。

衡量相似度

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

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

  • **L2 距离(欧氏距离)**是最常见的指标,表示两个向量点之间的直线距离,也就是 "直线距离"。

  • **L1 距离(曼哈顿距离)**通过计算向量各个分量绝对差值之和来衡量距离,就像在城市街区网格中移动一样。

  • **Linf 距离(切比雪夫距离)**表示任意单个维度上的最大差值。

  • 余弦相似度通过计算两个向量之间夹角的余弦值,判断它们是否指向相似的方向,而不考虑向量的大小。得分为 1 表示两个向量完全相同,--1 表示它们方向完全相反。这是归一化嵌入空间中常用的选择,例如 OpenAI 模型生成的嵌入空间。

  • 点积相似度同时考虑向量的角度和大小。对于归一化向量而言,它等价于余弦相似度,但通常具有更高的计算效率。

  • 汉明距离计算两个向量在多少个维度上存在差异。

  • **最大内积(MaxSim)**是一种用于单个数据片段(例如文档)由多个向量表示时的相似度指标(例如每个单词对应一个向量)。它会将一个文档中的每个向量与另一个文档中最相似的向量进行比较,然后汇总这些结果来计算相似度。

高效搜索算法

什么是 k 近邻(kNN)搜索?

k 近邻(kNN)搜索是向量相似度搜索背后的核心操作:给定一个查询向量,根据选定的距离指标,找到数据库中与其距离最近的 k 个向量。"k" 就是你希望返回的结果数量,例如,最相似的 10 张产品图像,或者 RAG 查询中最相关的 5 个文档片段。精确 kNN 搜索会将查询向量与索引中的每一个向量进行比较,以确保找到真正距离最近的匹配结果。这种方式非常精确,但扩展性较差。因此,生产系统通常会采用近似方法。

精确 kNN 与近似最近邻(ANN)搜索有什么区别?

精确 kNN 会将查询向量与数据集中的每一个向量进行比较,以确保返回真正距离最近的匹配结果。它具有很高的准确性,但计算成本高,而且延迟会随着索引大小线性增长。近似最近邻(ANN)搜索则通过将搜索范围缩小到一部分具有较高可能性的向量,而不是扫描所有向量,以牺牲少量准确性换取大幅度的速度提升。在实际应用中,ANN 的召回率通常已经足够高,因此大多数生产环境中的向量搜索系统默认使用 ANN,而将精确 kNN 保留给小型数据集或要求完美召回率的场景。

HNSW 和 ANN 等算法如何实现高效的向量搜索?

在海量高维数据集中搜索相似向量是一项重大挑战。随着数据集不断增长,暴力搜索需要将查询向量与其他每一个向量进行比较,这在计算上变得不可行。这个问题可以通过使用近似最近邻(ANN)算法来解决。这些技术能够快速找到距离查询向量最近的向量,而无需进行穷举式比较。一种常见的 ANN 算法是分层可导航小世界(HNSW),它将向量组织成分层的图结构,并根据相似度建立向量之间的连接,从而实现快速遍历。与 FLAT(暴力搜索)相比,这种方式更加高效,同时能够保持较高的准确性。FLAT 计算成本较高,但更加精确。通过大幅缩小搜索范围,这些结构能够以少量且通常可以接受的绝对准确性损失为代价,实现巨大的速度提升。

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

多阶段检索或检索器框架(为了简单起见,我们也可以称其为搜索流水线)是一种经过编排的工作流,用于定义处理查询时所执行的步骤顺序。通常包括查询分析、从一个或多个索引中进行初始检索(例如结合词法搜索和向量搜索实现混合搜索)、结果过滤,以及在向用户返回结果之前进行最终的重排序阶段。

使用检索器框架构建搜索流水线有哪些好处?

最主要的好处是模块化和灵活性。它允许开发者轻松组合不同的搜索和排序策略(例如混合搜索),并根据特定需求构建复杂的多阶段检索流水线,而无需从头开始构建整个系统。

什么是语义重排序?

语义重排序是一个用于改善搜索结果相关性的第二阶段处理过程。在初始的快速检索阶段获取一批范围较广的候选文档之后,会使用一个计算成本更高但准确性也更高的模型,对这批较小的候选集重新排序,从而生成更加精准的最终排名。

"检索并重排序"的多阶段流程是如何工作的?

"检索并重排序" 流水线分为两个不同的阶段:

  1. **检索:**使用高效、可扩展的检索方法(例如 ANN 向量搜索或词法 BM25 搜索),从完整索引中获取一批初始候选文档。

  2. **重排序:**然后将这个较小的候选集交给更强大的模型(例如交叉编码器),对查询与每个文档之间的语义关系进行更深入的分析,并重新排列它们的顺序,从而提高最终的相关性。

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

  • 双编码器 分别独立地为查询和文档生成嵌入。由于文档嵌入可以预先计算并建立索引,这种架构速度非常快,因此用于初始的检索阶段。

  • 交叉编码器将查询和文档作为单个输入一起处理。这使其能够捕捉更加深入的上下文交互,因此准确性非常高,但速度也慢得多。由于计算成本较高,它只适合在较小的候选结果集上执行重排序。

向量数据库的存储与优化

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

向量通常以 32 位浮点数(float32)数组的形式存储。主要挑战在于其巨大的存储占用:一个 384 维的向量大约占用 1.5 KB。因此,一个包含 1 亿个文档的索引,仅仅增加一个向量字段,大小就可能增加 7 倍。由于 HNSW 等向量搜索算法为了保证性能,需要将索引加载到 RAM 中,这会带来巨大的内存成本和可扩展性挑战。

什么是向量量化?

向量量化是一种有损压缩技术,通过使用更少的 bit 表示模型参数,降低模型的内存和计算需求。这对于可能拥有数十亿参数的 LLM 尤其有用。通过将高精度的 float32 数值转换为 int8 或 int4 等低精度整数,量化可以显著减小模型大小,并加快推理速度,同时对准确性的影响很小。

什么是标量量化(Scalar quantization - SQ)?

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

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

二进制量化是一种更加激进的压缩技术,它将 float32 向量的每个分量转换为二进制表示(例如 1 bit)。这种方式最多可以实现 32 倍压缩,提供最大的内存节省,并利用基于整数的操作实现更快的计算,但通常会以一定程度的精度损失为代价。

向量数据库有哪些优势?

在处理非结构化数据和 AI 应用时,向量数据库相比传统数据库具有多项优势:

**超越关键词匹配的语义搜索:**向量数据库根据含义而不是精确的词语匹配来检索结果。例如,查询 "适合学生的经济型笔记本电脑" 可以找到描述为 "大学生预算型笔记本" 的产品,因为底层嵌入捕捉的是概念上的相似性,而不是字面文本的重叠。

**大规模快速相似度搜索:**通过将向量索引与 HNSW 等近似最近邻算法结合,向量数据库可以在毫秒级内从数十亿个向量中返回相关结果,从而让实时 AI 应用成为可能。

**支持非结构化数据:**文本、图像、音频、视频和其他非结构化格式都可以表示为向量嵌入,并通过一个统一的系统进行搜索,从而无需针对不同数据类型分别构建数据流水线。

为大型语言模型提供数据依据 :向量数据库作为检索增强生成(RAG)架构中的检索层,从可信数据源向 LLM 提供相关且最新的上下文,从而减少幻觉。

混合搜索能力:现代向量数据库可以在一个查询中结合稠密向量搜索、稀疏向量搜索和传统关键词(BM25)搜索,比单独使用任何一种方法都能提供更加准确的结果。

**可扩展性和性能:**专门设计的索引结构、量化技术和分布式架构使向量数据库能够处理不断增长的数据集和大量查询,同时不会导致延迟显著下降。

**降低运维复杂性:**集成式向量数据库无需将存储、嵌入管理和搜索拆分到不同系统中,从而简化了 AI 应用的架构。

集成式向量数据库和搜索平台有哪些优势?

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

什么是向量数据库中的元数据过滤?

元数据过滤是指根据附加在每个向量上的结构化属性来缩小向量搜索结果范围,例如日期、类别、作者、价格、语言或用户权限。向量搜索根据语义相似度检索结果,而元数据过滤则应用结果必须满足的硬性约束。因此,"轻量跑鞋"的查询可以限制为有库存、价格低于 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 或类似区域性法规约束的组织,需要能够将向量数据库固定部署在特定国家或地区,或者完全运行在自己的基础设施中。

选择一个支持完整部署范围的向量数据库,包括托管云、自管理云、本地部署和物理隔离部署,可以让组织针对具有不同安全和合规要求的工作负载采用统一的技术,而不必针对敏感数据和非敏感数据分别运行不同的技术栈。

原文:What is a Vector Database? | A Comprehensive Vector Database Guide | Elastic

相关推荐
久美子1 小时前
铁轨、迷宫与护栏:AI 数据工程的确定性骨架
大数据
江湖有缘1 小时前
从零搭建私有云相册:使用 Docker 一键部署 Damselfly全攻略
运维·docker·容器
LHX sir1 小时前
MCP 协议是什么?HubPort 如何让设备被 AI 智能体调用
人工智能·物联网·ai智能体·mcp
jikemaoshiyanshi1 小时前
AI 训练 GPU 利用率偏低,如何通过云上高性能存储优化成本?AWS 基于 I/O 瓶颈分层选型
人工智能·云计算·aws
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践<十三>:图像转换之灰度图、二值图
c++·人工智能·opencv·计算机视觉
NJCloud1 小时前
ELK企业级日志分析平台(四)——基于 ELFK + Kafka 的日志采集与传输平台部署实践
linux·运维·分布式·elk·kafka
cspttty1 小时前
财务人员学数据分析考什么证
数据库
lisanmengmeng1 小时前
搭建elk环境并接入frostmourne,实现监控报警效果(一)
运维·elk·jenkins