亚马逊 OpenSearch 服务的矢量数据库功能详解

OpenS earch 是一款可扩展、灵活和可扩展的开源软件套件,适用于搜索、分析、安全监控和可观察性应用程序,已获得 Apache 2.0 许可证。它包括搜索引擎 OpenSearch(提供低延迟搜索和聚合)、OpenSearch 仪表板、可视化和仪表板工具,以及一套提供警报、精细访问控制、可观察性、安全监控以及向量存储和处理等高级功能的插件。 亚马逊 OpenSearch 服务是一项完全托管的服务,可以轻松地在 亚马逊云科技 云中部署、扩展和操作 OpenSearch。

作为最终用户,当你使用 OpenSearch 的搜索功能时,你通常会想到一个目标——这是你想要实现的目标。在此过程中,你可以使用 OpenSearch 来收集信息以支持实现该目标(或者信息可能是最初的目标)。我们都已经习惯了 “搜索框” 界面,你可以在其中键入一些单词,搜索引擎会根据逐字匹配返回结果。假设你想买一张沙发,以便与家人一起在火炉旁度过舒适的夜晚。你去亚马逊,然后输入 “坐在火炉旁的舒适地方”。不幸的是,如果你在 Amazon.com 上进行搜索,你会得到火炉、暖气扇和家居装饰品等物品,而不是你想要的。问题在于,沙发制造商可能没有在产品标题或描述中使用 “舒适”、“放置”、“坐下” 和 “开火” 等词。

近年来,机器学习 (ML) 技术在增强搜索功能方面变得越来越流行。其中包括使用嵌入模型,这种模型可以将大量数据编码到一个 n 维空间中,其中每个实体都被编码成一个向量,在该空间中是一个数据点,并进行组织以使相似的实体更加接近。例如,嵌入模型可以对语料库的语义进行编码。通过搜索最接近编码文档的向量(k 最近邻 (k-nn) 搜索),您可以找到语义上最相似的文档。复杂的嵌入模型可以支持多种模式,例如,对产品目录的图像和文本进行编码,并在两种模式上实现相似度匹配。

矢量数据库通过提供诸如 k-nn 索引之类的专用索引来提供有效的向量相似度搜索。它还提供其他数据库功能,例如管理矢量数据以及其他数据类型、工作负载管理、访问控制等。 OpenSearch 的 k-nn 插件为 OpenSearch 提供了核心矢量数据库功能 ,因此,当您的客户在您的目录中搜索 “坐在火炉旁的舒适地方” 时,您可以对该提示进行编码,然后使用 OpenSearch 执行最近的邻居查询,让那张 8 英尺长的蓝色沙发上有设计师在壁炉前排列的照片。

使用 OpenSearch 服务作为矢量数据库

借助 OpenSearch Service 的矢量数据库功能,您可以实现语义搜索、带有 LLM 的检索增强生成 (RAG)、推荐引擎和搜索富媒体。

语义搜索

使用语义搜索,可以在搜索文档中使用基于语言的嵌入来提高检索结果的相关性。您可以让搜索客户使用自然语言查询,比如 “坐在火炉旁的舒适地方” 来寻找他们的 8 英尺长的蓝色沙发。有关更多信息,请参阅 在 OpenSearch 中 构建语义搜索引擎 , 以了解语义搜索如何将相关性提高 15%,衡量 标准化折扣累积收益 (ndCg) 指标与关键字搜索相比。举一个具体的例子,我们在 亚马逊 OpenSearch Ser vice 中 提高机器学习的搜索相关性 研讨会基于 变形金刚的双向编码器表示 (BERT ) 模型,探讨了关键词和语义搜索之间的区别,该模型由 亚马逊 SageMaker 托管,用于生成向量并将其存储在 Open Search 中。研讨会以产品问题答案为例,展示使用查询的关键字/短语进行关键字搜索如何导致一些不相关的结果。语义搜索能够通过匹配查询的上下文和语义来检索更多相关的文档。下图显示了以 OpenSearch 服务作为矢量数据库的语义搜索应用程序的示例架构。

Architecture diagram showing how to use Amazon OpenSearch Service to perform semantic search to improve relevance

使用 LLM 进行检索增强生成

RAG 是一种使用 OpenAI、ChatGPT 或亚马逊 Titan Titan Text 等生成式 LLM 构建值得信赖的生成式 AI 聊天机器人的方法。 随着生成式 LLM 的兴起,应用程序开发人员正在寻找利用这项创新技术的方法。一个常见的用例是通过智能代理提供对话体验。也许你是一家软件提供商,拥有产品信息知识库、客户自助服务或行业领域知识,例如税务申报规则或有关疾病和治疗的医疗信息。对话式搜索体验为用户提供了一个直观的界面,用户可以通过对话和问答来筛选信息。生成式 LLM 本身容易产生 幻觉 ——在这种情况下,模型会生成可信但事实上不正确的响应。RAG 通过使用外部知识库来补充生成式 LLM 来解决这个问题,该知识库通常使用包含向量编码知识文章的向量数据库构建。

如下图所示,查询工作流程从一个问题开始,该问题经过编码,用于从矢量数据库中检索相关的知识文章。这些结果被发送到生成式 LLM,后者的工作是增强这些结果,通常是将结果总结为对话回应。通过用知识库补充生成模型,RAG 将模型建立在事实的基础上,以最大限度地减少幻觉。您可以在 我们的语义搜索研讨会的 “ 检索增强生成” 模块中了解有关构建 RAG 解决方案的 更多信息。

Architecture diagram showing how to use Amazon OpenSearch Service to perform retrieval-augmented generation

推荐引擎

推荐是搜索体验中的常见组成部分,对于电子商务应用程序尤其如此。添加诸如 “更像这样” 或 “购买此商品的客户也购买了那个” 之类的用户体验功能,可以通过为客户提供他们想要的东西来增加收入。 搜索架构师使用许多技巧和技术来构建推荐,包括 基于 深度神经网络 (DNN) 的推荐算法,例如 双塔神经网络模型 YoutubeDN N。 例如,经过训练的嵌入模型将产品编码到嵌入空间中,在该空间中,经常一起购买的产品被认为更相似,因此在嵌入空间中被表示为距离更近的数据点。另一种可能性是,产品嵌入是基于共同评级相似度而不是购买活动。您可以通过计算特定用户的嵌入与数据库中的向量之间的向量相似度来使用此亲和力数据来返回推荐项目。下图显示了使用 OpenSearch 作为向量存储构建推荐引擎的示例架构。

Architecture diagram showing how to use Amazon OpenSearch Service as a recommendation engine

媒体搜索

媒体搜索使用户能够使用图像、音频和视频等富媒体来查询搜索引擎。它的实现与语义搜索类似,您可以为搜索文档创建向量嵌入,然后使用向量查询 OpenSearch Service。区别在于你使用诸如 Res Net之类的计算机视觉深度 神经网络(例如卷积神经网络 (CNN))将图像 转换为矢量。下图显示了使用 OpenSearch 作为矢量存储构建图像搜索的示例架构。

Architecture diagram showing how to use Amazon OpenSearch Service to search rich media like images, videos, and audio files

了解这项技术

OpenSearch 使用来自 NMSLIB FAISS 和 Lucen e 库的近似最近邻 (ANN) 算法 来 支持 k-nn 搜索。这些搜索方法使用 ANN 来改善大型数据集的搜索延迟。在 k-nn 插件提供的三种搜索方法中,此方法为大型数据集提供了最佳的搜索可扩展性。引擎详细信息如下:

  • 非公制空间库 (NMSLIB) — NMSLIB 实现了 HNSW ANN 算法
  • Facebook 人工智能相似度搜索 (FAISS) — FAISS 同时实现 HNSW 和 IVF ANN 算法
  • Lucene — Lucene 实现了 HNSW 算法

用于近似 k-nn 搜索的三个引擎都有自己的属性,在给定情况下,这使得其中一个比其他引擎更明智地使用。您可以按照本节中的一般信息来帮助确定哪种引擎最能满足您的要求。

一般而言,应为大规模用例选择 NMSLIB 和 FAISS。Lucene 是小型部署的不错选择,但它具有诸如智能过滤之类的好处,即根据情况自动应用最佳过滤策略(预过滤、后过滤或精确 K-NN)。下表汇总了每个选项之间的差异。

.

NMSLIB-HNSW

FAISS-HNSW

FAISS-IVF

Lucene-HNSW

最大维度

16,000

16,000

16,000

1024

筛选

后置过滤

后置过滤

后置过滤

搜索时筛选

需要培训

没有

没有

是的

没有

相似度指标

l2,内积,cosinesimil,l1,linf

l2,内部产品

l2,内部产品

l2,cosinesimil

矢量体积

数百亿

数百亿

数百亿

< 一千万

索引延迟

最低

查询延迟和质量

低延迟和高质量

低延迟和高质量

低延迟和低质量

高延迟和高质量

向量压缩

平坦

平坦

产品量化

平坦

产品量化

平坦

内存消耗

PQ 值较低

中等

PQ 值较低

近似和精确的最近邻搜索

OpenSearch Service k-nn 插件支持三种不同的方法从向量索引中获取 k 最近的邻居:近似 k-nn、分数脚本(精确 k-nn)和无痛扩展(精确 k-nn)。

近似 k-nn

第一种方法采用近似最近邻法,它使用几种算法中的一种将近似 k 最近邻返回到查询向量。通常,这些算法会牺牲索引速度和搜索精度,以换取性能优势,例如更低的延迟、更小的内存占用和更具可扩展性的搜索。Approxy k-nn 是搜索需要低延迟的大型索引(即数十万个向量或更多)的最佳选择。如果要在 k-nn 搜索之前对索引应用滤镜,则不应使用近似 k-nn,这会大大减少要搜索的向量数量。在这种情况下,你应该使用分数脚本方法或无痛扩展。

分数脚本

第二种方法 扩展了 OpenSearch Service 评分脚本功能 , 可以在 knn _vector 字段或可以表示二进制对象的字段上运行暴力精确的 k-n n 搜索。使用这种方法,您可以对索引中的向量子集运行 k-nn 搜索(有时称为 预过滤搜索)。 与较小的文档正文相比,或者需要预过滤器时,这种方法是首选。在大型索引上使用这种方法可能会导致高延迟。

无痛延期

第三种方法将距离函数添加为无痛扩展,你可以将其用于更复杂的组合。与 k-nn 评分脚本类似,您可以使用此方法在索引中执行暴力精确的 k-nn 搜索,它还支持预过滤。与 k-nn 分数脚本相比,这种方法的查询性能略低。如果您的用例需要在最终分数上进行更多自定义,则应使用这种方法高于分数脚本 K-nn。

向量搜索算法

查找相似向量的简单方法是使用 k 最近邻 (k-nN) 算法,该算法计算查询向量与向量数据库中其他向量之间的距离。正如我们前面提到的,分数脚本 k-nn 和无痛扩展搜索方法在幕后使用了精确的 k-nn 算法。但是,对于具有高维度的超大型数据集,这会产生缩放问题,从而降低搜索效率。近似最近邻 (ANN) 搜索方法可以通过使用更有效地重构索引并降低可搜索向量的维度的工具来克服这个问题。有不同的 ANN 搜索算法;例如,局部敏感哈希、基于树的哈希、基于群集和基于图的哈希。OpenSearch 实现了两种 ANN 算法:分层可导航小世界 (HNSW) 和倒置文件系统 (IVF)。要更详细地了解 HNSW 和 IVF 算法在 OpenSearch 中的工作 原理,请参阅博客文章 “使用 OpenSearch 为数十亿规模的用例 选择 k-nn 算法 ”。

分层可导航的小世界

HNSW 算法是目前最流行的 ANN 搜索算法之一。该算法的核心思想是构建一个边缘连接彼此靠近的索引向量的图形。然后,在搜索时,对该图形进行部分遍历以找到与查询向量最近的近邻。为了引导遍历向查询的最近邻域,该算法始终访问下一个查询向量最近的候选对象。

反向文件

IVF 算法将您的索引向量分成一组存储桶,然后,为了缩短搜索时间,只搜索这些存储桶的子集。但是,如果算法只是将你的向量随机分成不同的存储桶,并且只搜索其中的一个子集,那么得出的近似值就会很差。试管婴儿算法使用了更优雅的方法。首先,在开始索引之前,它会为每个存储桶分配一个代表性向量。对向量进行索引时,它会被添加到具有最接近代表向量的存储桶中。这样,彼此靠近的向量就会大致放置在相同或附近的存储桶中。

向量相似度指标

所有搜索引擎都使用相似度指标对结果进行排名和排序,并将最相关的结果带到顶部。使用纯文本查询时,相似度指标称为 TF-IDF,它衡量查询中术语的重要性,并根据文本匹配的数量生成分数。当您的查询包含向量时,相似度指标本质上是空间性的,它利用了向量空间中的邻近度。OpenSearch 支持多种相似度或距离测量值:

  • 欧几里得距离 -点之间的直线距离。
  • L1(曼哈顿)距离 — 所有向量分量的差值之和。L1 距离用于测量从 A 点到 B 点需要穿越多少个正交城市街区。
  • L 无限(棋盘)距离 — 国王在 n 维国际象棋盘上移动的次数。它与对角线上的欧几里得距离不同——二维棋盘上的对角线步距离 1.41 欧几里得单位,但距 2 个 L 无限单位。
  • 内积 — 两个向量的大小与它们之间角度的余弦值的乘积。通常用于自然语言处理 (NLP) 向量相似度。
  • 余弦相似度 — 向量空间中两个向量之间角度的余弦值。
  • 汉明距离 -对于二进制编码向量,两个向量之间差异的位数。

OpenSearch 作为矢量数据库的优势

将 OpenSearch 服务用作矢量数据库时,可以利用该服务的可用性、可扩展性、可用性、互操作性和安全性等功能。更重要的是,你可以使用 OpenSearch 的搜索功能来增强搜索体验。例如,您可以 在 OpenSearch 中使用 “ 学习排名 ” 将用户点击行为数据集成到搜索应用程序中并提高搜索相关性。您还可以结合 OpenSearch 文本搜索和矢量搜索功能,搜索具有关键字和语义相似性的文档。您还可以使用索引中的其他字段来筛选文档以提高相关性。对于高级用户,您可以使用混合评分模型将 OpenSearch 基于文本的相关性分数(使用 Okapi BM25 函数计算得出) 与 其矢量搜索分数相结合,以提高搜索结果的排名。

规模和限制

OpenSearch 作为矢量数据库支持数十亿条向量记录。请记住以下有关向量数量和维度的计算器,以调整集群的大小。

向量数

OpenSearch VectorDB 利用了 OpenSearch 的分片功能,可以通过对向量进行分片以个位数毫秒的延迟扩展到数十亿个向量,并通过添加更多节点进行水平扩展。一台计算机中可以容纳的向量数量取决于计算机上堆外内存的可用性。所需的节点数将取决于每个节点可用于算法的内存量以及算法所需的总内存量。节点越多,内存越多,性能越好。每个节点的可用内存量以 mem ory_available = ( node_memory — jvm_ size ) * circuit_bre aker_limit 计算得出,参数如下:

  • node_memory — 实例的总内存。
  • jvm_size — OpenSearch JVM 堆大小。这设置为实例 RAM 的一半,上限约为 32 GB。
  • c@@ ircuit_breaker_limit — 断路器的本机内存使用阈值。此值设置为 0.5。

总聚类内存估计取决于向量记录和算法的总数。HNSW 和 IVF 有不同的内存要求。你可以参考 内存估计 了解 更多细节。

维度数

OpenSearch 当前对向量字段 knn_ vector 的维度限制为 16,000 个维度。每个维度都以 32 位浮点数表示。维度越大,索引和搜索所需的内存就越多。维度的数量通常由将实体转换为向量的嵌入模型决定。在构建 knn_ vector 字段时,有很多选项可供选择。要确定要选择的正确方法和参数,请参阅 选择正确的方法

客户故事:

亚马逊音乐

亚马逊音乐一直在创新,为客户提供独特的个性化体验。亚马逊音乐推荐音乐的方法之一是混搭亚马逊的经典创新、 逐项协作筛选 和矢量 数据库。Amazon Music 使用基于用户收听行为汇总的数据,创建了一个嵌入模型,将音乐曲目和客户表现形式编码为向量空间,其中相邻的向量表示相似的曲目。1 亿首歌曲被编码为矢量,编入索引到 OpenSearch 中,并在多个地区提供服务,以提供实时推荐。OpenSearch 目前管理 10.5 亿个向量,支持每秒 7,100 个矢量查询的峰值负载,为亚马逊音乐的推荐提供支持。

逐件商品协作过滤器仍然是最受欢迎的在线产品推荐方法之一,因为它可以有效地扩展到大型客户群和产品目录。OpenSearch 通过提供横向扩展基础架构和 k-nn 索引(在对数时间内,轨道数量和相似度搜索呈线性增长),使推荐器的操作变得更加容易,并进一步提高了推荐器的可扩展性。

下图显示了向量嵌入所创建的高维空间。

A visualization of the vector encoding of Amazon Music entries in the large vector space

亚马逊的品牌保护

亚马逊致力于提供世界上最值得信赖的购物体验,为买家提供尽可能广泛的正品选择。为了赢得和维护客户的信任,我们严格禁止销售假冒产品,并将继续投资于创新,以确保只有正品才能到达客户手中。亚马逊的品牌保护计划通过准确代表和全面保护品牌来建立与品牌的信任。我们努力确保公众的看法反映我们提供的值得信赖的体验。我们的品牌保护战略侧重于四大支柱:(1)主动控制(2)保护品牌的强大工具(3)追究不良行为者的责任(4)保护和教育客户。亚马逊 OpenSearch 服务是亚马逊主动控制的关键部分。

2022 年,亚马逊的自动化技术每天扫描超过 80 亿次对商品详情页面的更改尝试,以寻找潜在的滥用迹象。我们的主动控制系统在品牌必须找到并举报之前就发现了 99% 以上的被屏蔽或移除的商品。这些列表涉嫌欺诈、侵权、伪造或面临其他形式的滥用风险。为了进行这些扫描,亚马逊创建了使用先进和创新技术的工具,包括使用先进的机器学习模型自动检测全球亚马逊门店列表中的知识产权侵权行为。实施这种自动化系统的一个关键技术挑战是能否以快速、可扩展和具有成本效益的方式在庞大的十亿向量语料库中搜索受保护的知识产权。利用亚马逊 OpenSearch 服务的可扩展向量数据库功能和分布式架构,我们成功开发了一个采集管道,该管道已将 680 亿、128 和 1024 个维度的向量索引到 OpenSearch 服务中,使品牌和自动化系统能够通过高度可用且快速(亚秒)的搜索 API 实时进行侵权检测。

结论

无论你是在构建生成式 AI 解决方案、搜索富媒体和音频,还是为现有的基于搜索的应用程序提供更多语义搜索,OpenSearch 都是一个功能强大的矢量数据库。OpenSearch 支持各种引擎、算法和距离测量,您可以使用这些引擎、算法和距离测量来构建正确的解决方案。OpenSearch 提供了一个可扩展的引擎,可以支持低延迟的矢量搜索和多达数十亿个向量。借助 OpenSearch 及其矢量数据库功能,您的用户可以轻松找到那张 8 英尺蓝色的沙发,并在舒适的壁炉旁放松身心。


作者简介

Jon Handler is a Senior Principal Solutions Architect with AWS乔恩·汉德勒 是总部位于加利福尼亚州帕洛阿尔托的亚马逊网络服务的高级首席解决方案架构师。Jon 与 OpenSearch 和亚马逊 OpenSearch Service 紧密合作,为想要迁移到 亚马逊云科技 云的搜索和日志分析工作负载的众多客户提供帮助和指导。在加入 亚马逊云科技 之前,Jon 的软件开发生涯包括四年编写大型电子商务搜索引擎。Jon 拥有宾夕法尼亚大学文学学士学位和西北大学计算机科学与人工智能理学硕士和博士学位。

李建伟 是亚马逊网络服务的首席分析专家 TAM。健威为客户提供顾问服务,帮助客户设计和建立现代数据平台。Janwei一直以软件开发人员、顾问和技术负责人的身份在大数据领域工作。

Dylan Tong 是亚马逊网络服务的高级产品经理。他领导了 OpenSearch 上的人工智能和机器学习 (ML) 产品计划,包括 OpenSearch 的矢量数据库功能。Dylan 拥有数十年的直接与客户合作以及在数据库、分析和 AI/ML 领域创建产品和解决方案的经验。Dylan 拥有康奈尔大学计算机科学学士学位和工程学硕士学位。

Vamshi Vijay Nakkirtha 是一名软件工程经理,负责开发 OpenSearch 项目和亚马逊 OpenSearch 服务。他的主要兴趣包括分布式系统。他是各种插件的积极贡献者,例如K-nn、GeoSpatial和仪表板地图。