假设您是一名软件开发人员,正在寻找数据库优化技术,尤其是提高大型数据库中的查询效率。在传统的 SQL 数据库中,您可能会使用“B 树索引”或简单的“索引”等关键字来查找相关博客或文章。但是,这种基于关键字的方法可能会忽略使用不同但相关短语的重要博客或文章,例如“SQL 调优或“索引策略”。
考虑另一种情况,您知道上下文,但不知道特定技术的确切名称。依赖于精确关键字匹配的传统数据库在这种情况下会出现不足,因为它们无法仅根据上下文进行搜索。
那么,我们需要的是一种超越简单关键字匹配的搜索技术,并根据语义相似性提供结果。这就是矢量搜索发挥作用的地方。与传统的关键字匹配技术不同,矢量搜索将查询的语义与数据库条目进行比较,返回更相关、更准确的结果。
在本博客中,我们将讨论与矢量搜索相关的所有内容,从基本概念开始,然后转向更高级的技术。让我们首先概述一下矢量搜索。
矢量搜索概述
矢量搜索是一种复杂的数据检索技术,专注于匹配搜索查询和数据条目的上下文含义,而不是简单的文本匹配。为了实现这种技术,我们必须首先将搜索查询和数据集的特定列转换为数字表示,称为向量嵌入。然后,我们计算查询向量与数据库中向量嵌入之间的距离(余弦相似度或欧几里得距离)。接下来,我们根据这些计算出的距离来识别最接近或最相似的条目。最后,我们返回与查询向量距离最小的前 k 个结果。
矢量搜索的典型场景
- 相似性搜索:用于在特征空间中查找与给定向量相似的其他向量,广泛应用于图像、音频和文本分析等领域。
- 推荐系统:通过分析用户和项目的矢量表示来实现个性化推荐,例如电影、产品或音乐推荐。
- 自然语言处理:搜索文本数据中的语义相似度,支持语义搜索和相关性分析。
- 问答 (QA) 系统:搜索向量表示与输入问题最相似的相关段落。最终答案可以通过基于问题和检索到的段落的大型语言模型 (LLM) 生成。
当数据集很小并且查询很简单时,暴力向量搜索对于语义搜索非常有效。然而,随着数据集的增长或查询变得更加复杂,它的性能会下降,从而导致一些缺点。
实施矢量搜索的挑战
让我们讨论一些与使用简单矢量搜索相关的问题,特别是当数据集大小增加时:
- 性能:如上所述,强力向量搜索计算查询向量与数据库中所有向量之间的距离。它适用于较小的数据集,但随着向量数量增加到数百万个条目,查找数百万个条目之间距离的搜索时间和计算成本也会增加。
- 可扩展性:目前数据呈指数级增长,使得暴力向量搜索在查询海量数据集时很难以相同的速度和精度获得结果。这需要创新的方法来管理大量数据,同时保持相同的速度和准确性。
- 与结构化数据结合:在简单的应用中,要么使用 SQL 查询来查询结构化数据,要么使用向量搜索来查询非结构化数据,但应用程序通常需要同时具备这两种功能。将这两者集成在技术上可能具有挑战性,特别是当它们在不同的系统中处理时。当我们利用向量搜索并同时应用 SQL WHERE 子句进行过滤时,由于数据种类和大小的增加,查询处理时间会增加。
作为这些挑战的解决方案,有效的向量索引技术已经可用。
常用向量索引技术
采用各种索引技术来组织和促进高效的近似向量搜索,以应对大规模向量数据的挑战
分层可导航小世界 (HSNW)
HNSW 算法利用多层图结构来存储和有效搜索向量。在每一层,向量不仅与同一层上的其他向量连接,而且还与下面层中的向量连接。这种结构允许有效地探索附近的向量,同时保持搜索空间的可管理性。顶层包含少量节点,而随着层次结构的下降,节点数量呈指数级增加。底层最终包含了数据库中的所有数据点。这种分层设计定义了 HNSW 算法的独特架构。
搜索过程从选定的向量开始,根据该向量计算当前层和前一层中连接向量的距离。该方法是贪婪的,不断向最接近当前位置的向量前进,迭代直到识别出所有连接向量中最接近的向量。虽然 HNSW 索引通常擅长直接矢量搜索,但它需要大量资源并需要大量时间来构建。此外,由于这些条件下图形连接性的减弱,过滤搜索的准确性和效率可能会大幅下降。
倒排向量文件 (IVF) 索引
IVF索引通过使用簇质心作为倒排索引来有效管理高维数据搜索。它根据几何接近度将向量分割成簇,每个簇的质心作为简化的表示。当搜索与查询向量最相似的项目时,算法首先识别最接近查询的质心。然后,它仅在关联的向量列表中搜索这些质心,而不是整个数据集。与 HSNW 相比,IVF 的构建时间较短,但在搜索过程中的准确性和速度也较低。
MyScale 实际应用:解决方案和实际应用
作为 SQL 矢量数据库,MyScale(打开一个新窗口)旨在处理复杂查询、允许快速数据检索并高效存储大量数据。它优于专用矢量数据库的原因是它结合了快速 SQL 执行引擎(基于 ClickHouse)和我们专有的 Multi -尺度树图(MSTG)算法。 MSTG 结合了基于树和基于图的算法的优点,使 MyScale 能够快速构建和搜索,并在不同的过滤搜索比例下保持速度和准确性,同时保持资源和成本效率。
现在让我们看一下 MyScale 非常有帮助的几个实际应用:
- 基于知识的 QA 应用程序:在开发问答 (QA) 系统时,MyScale 是理想的矢量数据库,具有自我查询以及灵活过滤文档中高度相关结果的能力。此外,MyScale 具有出色的可扩展性,使您可以轻松地同时管理多个用户。要了解更多信息,您可以从我们的抽象质量检查 (打开新窗口)文档中获取帮助。此外,您还可以利用带有高级算法的自查询来提高搜索结果的准确性和速度。
- 大型人工智能聊天机器人:开发大型聊天机器人是一项具有挑战性的任务,特别是当您必须同时管理大量用户并确保将他们分开对待时。此外,聊天机器人必须提供准确的答案。 MyScale 通过其与 SQL 兼容的基于角色的访问控制 (打开新窗口)和大规模多租户 (打开新窗口)通过数据分区和过滤搜索,允许您管理多个用户您还可以编写更复杂的 SQL 和矢量连接查询,以按元数据或视觉内容匹配图像。如需了解更多详细信息,请参阅我们的图片搜索项目 (打开新窗口)文档。
除了这些实际应用之外,通过结合 MyScale 的 SQL 和矢量功能,您还可以开发高级推荐系统 (opens new window) 、对象检测应用程序 (打开新窗口)等等。
结论
矢量搜索通过解释矢量嵌入内的语义超越了传统的术语匹配。这种方法不仅对文本有效,而且还扩展到图像、音频和各种多模式非结构化数据,如 ImageBind (打开新窗口) 。然而,该技术面临计算和存储需求以及高维向量语义模糊等挑战。 MyScale 通过创新地将 SQL 和矢量搜索合并到一个统一、高性能、经济高效的系统中来解决这些问题。这种融合实现了从 QA 系统到 AI 聊天机器人和图像搜索的广泛应用,说明了其多功能性和效率。