理清向量搜索的基础术语和概念,以便您可以实施适合您需求的正确解决方案。
译自 Vector Search: What You Need to Know Before Getting Started,作者 Adam Hevenor。
计划为你的项目采用向量数据库?正如你可能已经发现的,这是一项值得但并不容易的壮举。
首先,你需要浏览广阔的市场选择,以选择最适合你的业务需求的解决方案。这本身就是一项艰巨的任务,但这仅仅是个开始。
开发人员必须考虑各种技术和其他因素,才能正确实现向量数据库。其中,选择正确的向量搜索算法可能具有挑战性。这些算法需要对数学概念有深入的了解,以便在准确性和向量检索速度之间建立适当的权衡。
本文阐明了向量搜索的基础概念以及成功设置向量数据库所需的实现细节。
向量数据库 是一种最先进的解决方案,用于高效 存储、快速检索和无缝处理大规模的高维 (HD) 数值数据表示。
这些 HD 向量(也称为嵌入)是信息检索(例如,为快速搜索引擎提供支持)以及 AI 应用程序(例如,实时推荐系统或文档摘要)背后的高效且有效的数据结构。
所有类型的信息——从文本和统计数据到图像和音乐——都可以嵌入到向量中。由此,向量数据库可以无缝启用多模态用例。
虽然机器学习 (ML) 模型提供了推理能力,但向量数据库提供了一种解决方案,用于存储和搜索大量向量(称为向量空间)。对于高维向量,可能性数量变得难以理解。
为了实现搜索性能,向量数据库执行以下操作:
- 将向量写入存储层(理想情况下具有高性能特性)。
- 计算新向量与向量空间中已存在的一些向量采样之间的距离。
- 使用这些距离构建索引以优化搜索性能。
- 最后,当发出搜索请求时,执行最近邻结果的算法。
为了确保围绕向量索引进行可靠和有效的操作,向量数据库结合了经典数据库的特性。其中包括:
- 通过预处理(例如,数据规范化、降维)、后处理(例如,重新排序)、缓存、查询重写、并发控制和事务管理等技术提高搜索效率。
- 通过数据分区、复制、剪枝和其他优化扩展解决方案。
- 通过系统分析、索引优化、数据备份和安全性(通过加密和身份验证)等活动监控和维护数据库。
- 促进集成以无缝地向外部系统显示信息。
向量相似性搜索需要根据定义的相似性度量或距离度量,在数据库中查找与特定查询向量最相似的向量。
在设置向量解决方案时,你需要选择向量相似性搜索方法。
向量将源数据的最有意义的信息总结为一个紧凑的高维数值。维度越多,可以有意义地嵌入的数据就越复杂。
从源数据到有意义的向量表示的映射是使用 AI 训练的嵌入模型实现的,以创建一个向量空间,其中相似的概念彼此紧密映射。更一般地说,向量空间是这样的:向量之间的相对距离表示它们之间的概念距离。
下图显示了一个简化的二维 (2D) 示例来可视化该概念,其中一个维度表示性别,另一个维度表示年龄。
概念在二维向量空间中的表示
在这个向量空间中,“祖父”比“男孩”更接近“男人”,“男人”和“女人”与“孩子”等距,“男人”远离“女人”,但在年龄关系上是对称的。
现在假设您想查询“婴儿”并检索与之关联的最相关概念,您需要计算“婴儿”与空间中其他向量之间的三角距离(最常见的是欧几里得距离、余弦相似度和点积),然后检索最接近的 N 个向量。
一种简单但效率低下的解决方案是计算所有向量之间的距离。在实践中,使用索引是最佳实践。索引是一种数据结构,例如树或图,它本质上对空间信息进行编码,从而允许检索更快地收敛到向量空间的正确位置。在查询时,您的搜索将嵌入到一个向量中,并且数据库中与之最相似的索引向量将被检索出来,同时提供一些可选的后处理,例如候选精化或重新排序。
在上面的二维示例中,计算向量之间的距离很简单:您可以以接近零的延迟检索最准确的结果。但是,当移动到高清向量表示时,计算相似度得分变得复杂。
维数灾难(增加的计算和内存需求)以及直观几何和可视化的丧失都出现在高维空间中。
这意味着,虽然可以执行精确返回与查询最相似的向量的“精确搜索”,但这些方法不仅成本高,而且处理时间也更长(可能需要数小时!),这使得在典型的生产系统中运行通常不可行。
对于小型数据集,可以进行精确搜索,并且对于与近似最近邻 (ANN) 实现的性能比较很有用。但是,在实践中,执行“近似搜索”。
存在不同的近似算法,每个算法都在准确性和速度之间提供独特的性能权衡。因此,理解和选择正确的向量搜索算法实现对于针对每个用例优化向量数据库解决方案至关重要。
向量搜索背后的最流行(几乎是唯一)算法是最近邻算法。这就是为什么向量搜索通常被称为最近邻搜索,并且向量索引的名称基于它支持的最近邻算法,即分层可导航小世界 (HNSW) 索引。
最近邻算法通过将数据集组织成树、哈希或图(这些都是空间感知数据结构)来查找基于所选距离度量最接近给定查询点的 data point。还可以引入量化和聚类等技术,通过压缩向量表示来增强优化,从而提高搜索效率。
最近邻算法的两类是用于精确搜索的 k 最近邻 (KNN) 和用于近似搜索的 ANN。
对于精确搜索,KNN 通过比较数据库中的所有向量来返回与查询向量最接近的 k 个向量。复杂度为 O(n):当使用维度为 300 的 Word2vec 向量查询包含 1 亿个向量的数据库时,您需要 300 亿次操作才能检索您(精确的!)最相似的 k 个向量。
ANN 算法的复杂度为 O(log(n)),最常用于实际应用。ANN 可以基于树、基于图或基于哈希。
最近邻算法包括:
- 近似最近邻 Oh Yeah (ANNOY) 和近似最近邻的快速库 (FLANN):基于树的 ANN 的常见实现;当您需要尽可能快时效果最佳,例如照片共享平台的交互式实时图像相似性搜索。
- 分层可导航小世界 (HNSW) 和可导航小世界 (NSW):基于图的 ANN 的常见实现;最适合需要在规模上尽可能准确的应用程序,例如大型全球电子商务平台的推荐系统。
- 局部敏感哈希 (LSH) 和语义哈希 (SH):基于哈希的 ANN 的常见实现;最适合在精度不如资源效率关键的场景中实现成本效益,例如内部文档管理系统的去重解决方案。
选择正确的向量搜索算法对于优化搜索性能和系统的整体效率至关重要,最终有助于改善用户体验和应用程序的更好结果。
首先,您的算法选择应与您的数据要求保持一致,然后根据需要进行定制以提供最佳性能要求。除了准确性和延迟之外,在定义性能权衡时需要考虑的其他指标包括吞吐量、成本和可扩展性。
选择矢量数据库涉及浏览多种解决方案和注意事项,尤其是在寻找合适的矢量搜索算法时。
矢量搜索背后的基本思想很简单:高维数据表示可以嵌入到矢量空间中,其中距离反映概念相似性。在树、图或哈希中构建矢量时,您可以在查询时有效地浏览矢量空间,以在准确性和速度之间取得独特的平衡,从而满足数据要求和可扩展性需求。
选择允许您灵活自定义实现细节(如矢量搜索算法)的矢量数据库解决方案,可以成为成功应用程序的变革者。