📢 转载信息
原文链接:https://machinelearningmastery.com/vector-databases-explained-in-3-levels-of-difficulty/
原文作者:Bala Priya C
在本文中,您将了解向量数据库的工作原理,从相似性搜索的基本概念到使大规模检索成为可能的技术。我们将涵盖以下主题:
- 嵌入模型如何将非结构化数据转换为向量,以便按相似性进行搜索。
- 向量数据库如何支持最近邻搜索、元数据过滤和混合检索。
- HNSW、IVF 和 PQ 等索引技术如何帮助向量搜索在生产环境中扩展。
废话不多说,我们开始吧。
向量数据库详解:三个难度层级
图片来源:作者
引言
传统数据库回答一个明确的问题:是否存在满足这些条件的记录?而向量数据库回答的是一个不同的问题:哪些记录与这个查询最相似?这一转变至关重要,因为现代数据的一个巨大类别——文档、图像、用户行为、音频——无法通过精确匹配来搜索。因此,正确的查询不是“找到这个”,而是“找到与这个接近的”。嵌入模型通过将原始内容转换为向量来实现这一点,其中几何上的接近程度对应于语义上的相似性。
然而,问题在于规模。在生产数据规模下,将查询向量与每个存储的向量进行比较意味着数十亿次浮点运算,这些计算量使得实时搜索不切实际。向量数据库通过近似最近邻算法来解决这个问题,这些算法可以跳过绝大多数候选者,并以极低的成本返回近乎详尽搜索的结果。
本文将从三个层面解释其工作原理:核心的相似性问题和向量的赋能作用,生产系统如何存储和查询带过滤和混合搜索的嵌入,最后是使这一切在大规模上奏效的索引算法和架构决策。
第一层:理解相似性问题
传统数据库存储结构化数据——行、列、整数、字符串——并通过精确查找或范围查询来检索。SQL 在此方面快速且精确。但许多现实世界的数据是非结构化的。文本文件、图像、音频和用户行为日志无法很好地放入列中,“精确匹配”是它们不适用的查询方式。
解决方案是将这些数据表示为向量:固定长度的浮点数数组。嵌入模型(如 OpenAI 的 text-embedding-3-small)或用于图像的视觉模型,将原始内容转换为捕捉其语义含义的向量。相似的内容会产生相似的向量。例如,“dog”和“puppy”这两个词在向量空间中会非常接近。一张猫的照片和一幅猫的素描也会很接近。
向量数据库存储这些嵌入,并允许您通过相似性进行搜索:“找出与此查询向量最接近的 10 个向量。” 这被称为最近邻搜索。
第二层:存储和查询向量
嵌入
在向量数据库执行任何操作之前,内容需要被转换为向量。这是通过嵌入模型完成的——将输入映射到密集向量空间的神经网络,通常具有 256 到 4096 个维度,具体取决于模型。向量中的具体数字没有直接的解释;重要的是几何关系:相似的向量意味着相似的内容。
您可以调用嵌入 API 或自行运行模型,获取一个浮点数数组,然后将该数组与文档元数据一起存储。
距离度量
相似性以向量之间的几何距离来衡量。三种度量是常见的:
- 余弦相似度衡量两个向量之间的角度,忽略了幅度。它常用于文本嵌入,其中方向比长度更重要。
- 欧氏距离衡量向量空间中的直线距离。当幅度有意义时,它很有用。
- 点积速度很快,并且在向量被归一化时效果很好。许多嵌入模型经过训练就使用了它。
度量选择应与您的嵌入模型训练方式相匹配。使用错误的度量会降低结果质量。
最近邻问题
在小型数据集中,查找精确的最近邻非常简单:计算查询到每个向量的距离,对结果进行排序,然后返回前 K 个。这被称为暴力搜索或平面搜索,它是 100% 准确的。它的扩展性也与数据集大小成线性关系。对于拥有 1000 万个向量且每个向量有 1536 个维度的数据集,平面搜索对于实时查询来说太慢了。
解决方案是近似最近邻 (ANN) 算法。这些算法通过牺牲少量准确性来换取速度的大幅提升。生产中的向量数据库在底层运行 ANN 算法。具体的算法、参数以及它们的权衡,将在下一层进行探讨。
元数据过滤
纯向量搜索返回全局上语义上最相似的项目。实际上,您通常需要的是更接近:“查找属于此用户且创建日期晚于此日期的最相似文档。” 这就是混合检索:向量相似性与属性过滤相结合。
实现方式各不相同。预过滤先应用属性过滤器,然后对剩余的子集运行 ANN。后过滤先运行 ANN,然后过滤结果。对于选择性查询,预过滤更准确但成本更高。大多数生产数据库使用某种形式的预过滤,并辅以智能索引来保持其速度。
混合搜索:密集 + 稀疏
纯密集向量搜索可能会丢失关键字级别的精度。查询“GPT-5 发布日期”可能会在语义上偏向于通用 AI 主题,而不是包含确切短语的特定文档。混合搜索将密集 ANN 与稀疏检索(BM25 或 TF-IDF)相结合,以同时获得语义理解和关键字精度。
标准方法是并行运行密集和稀疏搜索,然后使用互易排名融合 (RRF)——一种基于排名的合并算法,无需进行分数归一化——来合并分数。现在大多数生产系统都支持原生混合搜索。
第三层:为规模化进行索引
近似最近邻算法
三个最重要的近似最近邻算法在速度、内存使用和召回率这三个权衡点上各占一席之地。
分层可导航小世界 (HNSW) 构建一个多层图,其中每个向量是一个节点,边连接相似的邻居。较高的层比较稀疏,能够实现快速的长距离遍历;较低的层比较密集,用于精确的局部搜索。在查询时,算法沿着这个图向最近邻的方向进行跳跃。HNSW 速度快,内存消耗大,但能提供出色的召回率。它是许多现代系统的默认选择。
分层可导航小世界的工作原理
倒排文件索引 (IVF) 使用 k-means 将向量聚类成组,构建一个将每个簇映射到其成员的倒排索引,然后在查询时只搜索最近的簇。IVF 比 HNSW 使用的内存少,但通常速度稍慢,并且需要一个训练步骤来构建簇。
倒排文件索引的工作原理
乘积量化 (PQ) 通过将向量划分为子向量并对每个子向量进行量化以生成代码本来压缩向量。这可以将内存使用量减少 4 到 32 倍,从而支持数十亿规模的数据集。它通常与 IVF 结合使用,形成 IVF-PQ,如 Faiss 等系统。
乘积量化的工作原理
索引配置
HNSW 有两个主要参数:ef_construction 和 M:
ef_construction控制索引构建过程中考虑的邻居数量。值越高通常会提高召回率,但构建时间更长。M控制每个节点的双向链接数量。较高的M通常能提高召回率,但会增加内存使用量。
您可以根据召回率、延迟和内存预算来调整这些参数。
查询时,ef_search 控制探索的候选者数量。增加此值可以在增加延迟的同时提高召回率。这是一个运行时参数,您可以在不重建索引的情况下进行调整。
对于 IVF,nlist 设置簇的数量,nprobe 设置查询时要搜索的簇数量。更多的簇可以提高精度,但也会增加内存占用。较高的 nprobe 可以提高召回率,但会增加延迟。阅读 如何调整 IVF 索引的参数(如簇数 nlist 和探测数 nprobe)以在最快的查询速度下实现目标召回率? 以了解更多。
召回率 vs. 延迟
ANN 存在于一个权衡面上。您可以通过搜索更多的索引来获得更好的召回率,但需要以延迟和计算成本为代价。请对您的特定数据集和查询模式进行基准测试。对于搜索应用程序来说,召回率@10 为 0.95 可能已经很好了;而推荐系统可能需要 0.99。
规模和分片
单个 HNSW 索引可以容纳在单台机器的内存中,最多约 5000 万到 1 亿个向量,具体取决于维度和可用 RAM。超过此规模,您就需要进行分片:将向量空间跨节点分区,将查询扇出到各个分片,然后合并结果。这会引入协调开销,并需要仔细选择分片键以避免热点。要了解更多,请阅读 向量搜索如何随数据规模扩展?
存储后端
向量通常存储在 RAM 中以实现快速 ANN 搜索。元数据通常单独存储,通常在键值存储或列式存储中。一些系统支持内存映射文件,用于索引大于 RAM 的数据集,在需要时溢出到磁盘。这会牺牲一些延迟来换取规模。
如 DiskANN(由微软开发)等磁盘 ANN 索引,专为从 SSD 读取而设计,并最大限度地减少 RAM 使用。它们在大规模数据集(其中内存是限制因素)上实现了良好的召回率和吞吐量。
向量数据库选项
向量搜索工具通常分为三类。
首先,您可以选择专用向量数据库,例如:
- Pinecone:一个完全托管、无需运维的解决方案
- Qdrant:一个开源的、基于 Rust 的系统,具有强大的过滤功能
- Weaviate:一个具有内置架构和模块化功能的开源选项
- Milvus:一个高性能的开源向量数据库,专为大规模相似性搜索而设计,支持分布式部署和 GPU 加速
其次,有现有系统的扩展,例如 pgvector for Postgres,它在中小型规模下效果很好。
第三,还有一些库,例如:
对于中等规模的新检索增强生成 (RAG) 应用,如果您已经在使用 Postgres,pgvector 通常是一个不错的起点,因为它最大限度地减少了运维开销。随着您需求的增长——尤其是对于更大的数据集或更复杂的过滤——Qdrant 或 Weaviate 可能会成为更具吸引力的选择,而如果您偏爱完全托管且无需维护基础设施的解决方案,Pinecone 是理想的选择。
总结
向量数据库解决了实际问题:大规模、快速地查找语义相似的内容。核心思想很简单:将内容嵌入为向量,然后通过距离进行搜索。细节——HNSW 与 IVF、召回率调优、混合搜索和分片——在生产规模下至关重要。
以下是一些您可以进一步探索的资源:
- 什么是向量数据库及其工作原理?用例+示例 | Pinecone
- 向量数据库:从嵌入到应用 | DeepLearning.AI
- 机器学习向量数据库完整指南
- 高性能 LLM 应用的 Top 5 向量数据库
学习愉快!
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区