向量数据库中的高级查询技术

2024-07-18

By Cahyo Subroto

向量数据库中的高级查询技术

引言

由于向量数据库能够管理和查询高维向量数据,它们在现代AI和机器学习工作流程中扮演着关键角色。这种能力使得快速准确的相似性搜索成为可能,这对于各种AI应用程序至关重要,从个性化推荐、图像识别到自然语言处理。通过在大规模上促进这些操作,向量数据库显著提高了AI应用程序的性能和有效性,使它们在速度和准确性至关重要的高维数据处理时代变得不可或缺。

高级查询技术通过提高数据检索性能,显著增强了向量数据库在AI中的实用性。这些技术不仅提高了向量搜索结果的质量,还为检索具有复杂查询的数据提供了更好的性能。让我们探索一些这些技术及其现实世界的应用。

向量数据库基础

向量数据库以高维向量的形式存储数据,这是一种数学表示,用于捕捉非结构化数据在基础模型学习的所有事物的向量空间中的“语义含义”。然后,开发人员使用这些嵌入进行相似性搜索、聚类和其他数据检索任务。仔细一看,一个向量是一个数值数组,表示一个浮点数在多个维度上的位置,可能看起来像这样:

嵌入:[array([-3.09392996e-02, -1.80662833e-02, 1.34775648e-02, 2.77156215e-02, -4.86349640e-03, -3.12581174e-02, -3.55921760e-02, 5.76934684e-03, 2.80773244e-03, 1.35783911e-01, 3.59678417e-02, 6.17732145e-02, ... -4.61330153e-02, -4.85207550e-02, 3.13997865e-02, 7.82178566e-02, -4.75336798e-02, 5.21207601e-02, 9.04406682e-02, -5.36676683e-02], dtype=float32)]

维度:384 (384,)

这个例子展示了一个具有384个维度的数值数组的一部分。

因为这些向量嵌入包含了一个对象的语义含义,所以聚集在一起的向量是相似的,并且可能彼此相关。有了这个,各种用例围绕着向量搜索(也称为语义相似性搜索)出现,使其成为每个数据库都渴望采用的最热门功能之一。尽管这个过程乍一看似乎很直接,但支持向量嵌入——存储、索引、查询——比它们看起来要复杂得多。

高级向量查询技术概述

高级查询技术解锁了处理复杂数据检索需求的可能性。这些技术不仅提高了向量搜索结果的质量,还为检索具有复杂查询的数据提供了更好的性能。让我们探索一些这些技术及其现实世界的应用。

近似最近邻(ANN)搜索

在向量空间中比较每个向量,直到出现k个精确匹配,这将是非常耗时的,特别是对于具有高维向量的大型数据集。相反,我们执行近似搜索以获得更好的性能。为此,您必须事先构建一个索引。通常有四种类型的向量搜索算法: 基于哈希的索引(例如,局部敏感哈希) 基于树的索引(例如,ANNOY) 聚类索引(例如,产品量化) 基于图的索引(例如,HNSW,CAGRA)

不同的算法对不同类型的向量数据效果更好,但它们都在牺牲一点准确性/召回率的情况下帮助加快了向量搜索过程。 大型语言模型(LLMs)通常需要提高对用户查询背后意图的理解,以产生不相关的结果。然而,设想一种情况,一家公司将其内部文档集成到向量中,并将它们存储在向量数据库中。这种设置使员工能够使用ANN查询搜索文档。向量数据库检索与员工查询嵌入最接近的数据嵌入,然后将这些嵌入作为提示传递给LLM。LLM根据公司的数据生成类似人类的文本答案,确保相关性。这个过程被称为检索增强生成(RAG),它通过纳入对公司文档的语义理解,显著提高了内部搜索的相关性,并减少了AI幻觉。

多向量查询

多向量查询通过允许同时使用多个向量进行搜索,扩展了向量数据库的查询能力。在大多数情况下,多向量查询比执行单向量查询更有效,因为延迟比针对单个单向量查询的搜索要低得多。除此之外,多向量查询还可以提供更好的查询结果。

例如,在电子商务网站上,多向量查询可以显著改进产品推荐系统。通过使用代表用户偏好不同方面的多个向量(例如,品牌偏好、价格范围、产品类别、过去的购买历史),这些查询可以检索更符合用户复杂偏好的产品,增强购物体验,并可能提高转化率。

范围查询

范围查询允许用户检索与查询向量在指定距离或相似性阈值内的所有项目。这种技术对于专注于寻找满足最小相似性要求的一组项目的应用很重要,而不是识别单个最相似的项目。

药物发现提出了巨大的挑战,从分子小到几十个原子到大到包含数万个原子的生物制品。开发人员可以利用机器学习将每个分子向量化,创建一个针对其预期用途的功能表示,如针对特定疾病或症状。

在这个框架内,范围搜索功能是适当的。与传统的top-k搜索不同,范围搜索通过识别所有在指定距离内的向量(分子)来扩展其范围,提供相关候选者的全面列表,而不是固定数量。这个功能在药物发现中是不可或缺的,并且在欺诈检测和网络安全等不同领域中具有适用性。

优化查询以提高性能

在向量数据库中优化高级查询对于在AI和机器学习应用程序中实现高性能和准确性至关重要。这种优化确保系统能够高效地处理大量高维数据,使得实时和相关数据检索成为可能。以下是一些优化这些查询的最佳实践。

索引策略

索引在加快查询速度方面起着重要作用,特别是在ANN中。没有一种索引类型适合所有情况。索引(例如,基于树的、基于哈希的或基于图的)针对不同的查询和数据特征进行了优化。例如,基于树的索引如KD树可能适用于低维数据,而基于图的索引对高维数据表现更好。

查询优化策略

分区 战略性地划分您的数据以提高索引效率。像聚类这样的技术可以将相似的向量分组,减少查询的搜索空间并提高响应时间。

使用近似搜索 对于许多应用程序来说,精确的最近邻搜索是不必要的,近似结果可以显著减少查询时间,而对准确性的影响很小。像HNSW(分层可导航小世界)或Annoy这样的ANN算法就是为此目的设计的。

平衡速度与准确性 选择索引并调整索引参数 向量数据库应该支持不止一种索引,无论索引多么简单或流行,以允许用户选择最适合他们需求的索引。一旦选择了索引,然后调整索引参数,接着调整搜索参数。

5.PNG 5.PNG

大多数向量数据库系统和ANN库提供控制搜索速度和准确性之间权衡的参数(例如,搜索深度或森林中树木的数量)。尝试这些参数可以帮助为您的应用程序需求找到最佳平衡。

早期停止标准 在搜索算法中实施早期停止,一旦找到“足够好”的结果就停止搜索过程,减少详尽搜索的计算开销。 服务质量(QoS)水平 为不同类型的查询或用户请求定义不同的QoS水平。例如,后台任务可能容忍更慢、更准确的搜索,而面向用户的查询可能优先考虑速度。 使用高级查询 执行高级查询将取决于您使用的向量数据库。有关更多详细信息,最好参考其官方文档。在这个例子中,我们将使用Zilliz上的托管Milvus向量数据库。 res = client.search( collection_name=COLLECTION_NAME, data=[data["rows"][0]["title_vector"]], filter='publication not in ["Towards Data Science", "Personal Growth"]', output_fields=["title", "publication"], limit=5 ) print(res) 上面的查询将执行一个带有过滤器的查询搜索,使用ANN。在示例中,我们过滤掉不是“Towards Data Science”和“Personal Growth”的出版物。

挑战和解决方案 在向量数据库中实现高级查询提出了独特的挑战。以下是一些常见挑战和实际解决方案。

可扩展性 随着数据集的增长,维护查询性能成为大数据处理的挑战。幸运的是,有各种技术可以使向量数据库可扩展。解决方案之一是使用数据库分区,这将分配负载并利用并行处理。由于您的向量数据库需要分布式,最好使用成熟的云计算平台,如Google Cloud、AWS,甚至Zilliz Cloud来管理您的数据库。

降维 高维数据可能导致“维度的诅咒”,其中相似性搜索的性能会降低。使用降维技术,如PCA(主成分分析)或自编码器,可以通过减少数据集的维度而不丢失重要信息来帮助,使索引更有效。

动态数据 在不损害查询性能的情况下,使向量数据库与新数据保持更新。

  • Cahyo Subroto

    Cahyo Subroto

    Freelance Technical Writer

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud
    博客向量数据库中的高级查询技术