该存储库旨在构建一个机器学习 (ML) 支持的搜索引擎原型,以根据文本或图像查询检索和推荐产品。这是关于如何使用对比语言图像预训练 (CLIP) 创建 SageMaker 模型、使用模型将图像和文本编码到嵌入中、将嵌入提取到 Amazon OpenSearch Service 索引中以及查询索引的分步指南使用 OpenSearch 服务 k 最近邻 (KNN) 功能。
基于嵌入的检索(EBR)广泛应用于搜索和推荐系统。它使用最近(近似)邻居搜索算法从嵌入存储(也称为矢量数据库)中查找相似或密切相关的项目。经典的搜索机制很大程度上依赖于关键字匹配,而忽略词汇含义或查询的上下文。 EBR 的目标是让用户能够使用自由文本查找最相关的产品。它之所以受欢迎,是因为与关键词匹配相比,它在检索过程中利用了语义概念。
在此存储库中,我们专注于构建机器学习 (ML) 支持的搜索引擎原型,以基于文本或图像查询检索和推荐产品。这使用了 Amazon OpenSearch Service 及其 k 最近邻 (KNN) 功能,以及 Amazon SageMaker 及其无服务器推理功能。 Amazon SageMaker 是一项完全托管的服务,让每个开发人员和数据科学家都能够通过完全托管的基础设施、工具和工作流程为任何用例构建、训练和部署 ML 模型。 Amazon OpenSearch Service 是一项完全托管的服务,可以轻松执行交互式日志分析、实时应用程序监控、网站搜索等。
对比语言-图像预训练 (CLIP) 是一种在各种图像和文本对上训练的神经网络。 CLIP 神经网络能够将图像和文本投影到同一潜在空间中,这意味着可以使用相似性度量(例如余弦相似性)对它们进行比较。您可以使用 CLIP 将产品的图像或描述编码为嵌入,然后将它们存储到矢量数据库中。然后您的客户可以在数据库中执行查询以检索他们可能感兴趣的产品。要查询数据库,您的客户需要提供输入图像或文本,然后输入将使用 CLIP 进行编码,然后发送到矢量数据库进行 KNN 搜索。
这里的矢量数据库起到了搜索引擎的作用。该矢量数据库支持统一图像和基于文本的搜索,这在电子商务和零售行业特别有用。基于图像的搜索的一个示例是,您的客户可以通过拍照来搜索产品,然后使用该图片查询数据库。对于基于文本的搜索,您的客户可以使用自由格式文本描述产品,然后使用该文本作为查询。搜索结果将按相似度得分(余弦相似度)排序,如果库存中的某个项目与查询(输入图像或文本)更相似,则得分将更接近 1,否则得分将更接近0. 搜索结果的前 K 个产品是您库存中最相关的产品。
OpenSearch 服务提供文本匹配和嵌入基于 KNN 的搜索。我们将在此解决方案中使用基于 KNN 的嵌入搜索。您可以使用图像和文本作为查询来搜索库存中的商品。实现这个统一图像并测试基于 KNN 的搜索应用程序包括两个阶段:
该解决方案使用以下 AWS 服务和功能:
在模板opensearch.yml
中,它将创建一个 OpenSearch 域并授予您的 SageMaker Studio 执行角色以使用该域。
在模板sagemaker-studio-opensearch.yml
中,它将创建一个新的 SageMaker 域、域中的用户配置文件和 OpenSearch 域。因此,您可以使用 StageMaker 用户配置文件来构建此 POC。
您可以按照下面列出的步骤选择要执行的模板之一。
步骤 1:转到 AWS 控制台中的 CloudFormation Service。
步骤 2:上传模板以创建 CloudFormation 堆栈clip-poc-stack
。
如果您已经运行 SageMaker Studio,则可以使用模板opensearch.yml
。
如果您目前没有 SageMaker Studio,您可以使用模板sagemaker-studio-opensearch.yml
。它将为您创建 Studio 域和用户配置文件。
步骤 3:检查 CloudFormation 堆栈的状态。大约需要20分钟才能完成创建。
创建堆栈后,您可以转到 SageMaker 控制台并单击Open Studio
进入 Jupyter 环境。
如果在执行过程中,CloudFormation 显示找不到 OpenSearch 服务链接角色的错误。您需要通过在 AWS 账户中运行aws iam create-service-linked-role --aws-service-name es.amazonaws.com
来创建服务相关角色。
请使用 SageMaker Studio 打开文件blog_clip.ipynb
并使用Data Science Python 3
内核。您可以从头开始执行单元格。
实施中使用了 Amazon Berkeley 对象数据集。该数据集包含 147,702 个产品列表以及多语言元数据和 398,212 个独特的目录图像。我们只会使用美式英语的商品图像和商品名称。出于演示目的,我们将使用约 1,600 种产品。
本节概述了运行此演示的成本注意事项。完成 POC 将部署 OpenSearch 集群和 SageMaker Studio,每小时成本不到 2 美元。注意:下面列出的价格是使用 us-east-1 区域计算的。费用因地区而异。而且成本也可能会随着时间的推移而变化(这里的价格是2022年11月22日记录的)。
进一步的成本细目如下。
OpenSearch 服务– 价格根据实例类型使用情况和存储成本而有所不同。有关更多信息,请参阅 Amazon OpenSearch Service 定价。
t3.small.search
实例运行约 1 小时,每小时 0.036 美元。SageMaker – 价格根据 Studio 应用程序、批量转换作业和无服务器推理端点的 EC2 实例使用情况而有所不同。有关更多信息,请参阅 Amazon SageMaker 定价。
ml.t3.medium
实例运行时间约为 1 小时,每小时 0.05 美元。ml.c5.xlarge
实例运行时间约为 6 分钟,每小时 0.204 美元。S3 – 成本低,价格会根据存储的模型/工件的大小而变化。每月前 50 TB 存储每 GB 仅花费 0.023 美元。有关更多信息,请参阅 Amazon S3 定价。
请参阅贡献以获取更多信息。
该库根据 MIT-0 许可证获得许可。请参阅许可证文件。