发布于: Oct 10, 2022
人工智能语义分析的发展推动了语义搜索引擎的兴起,使得电子商务与零售企业能够更轻松地为消费者提供搜索服务。基于自然语言理解(NLU)的搜索引擎使您可以通过首选会话语言直接表述自己的需求,而不再只能硬性依赖于以输入设备写下相应关键字。您可以使用母语以单词或句子执行查询,并由搜索引擎负责理解并提供最佳结果。
Amazon SageMaker 是一项完全托管服务,可为每位开发人员及数据科学家提供快速构建、训练以及部署机器学习(ML)模型的能力。Amazon Elasticsearch Service (Amazon ES) 同样是一项完全托管服务,可帮助您轻松以极具成本效益的方式大规模部署、保护并运行 Elasticsearch。Amazon ES提花 KNN 搜索功能,可以在多种用例(例如产品推荐、欺诈检测以及图像、视频等)以及某些特定的语义场景下(例如文档与查询相似性等)当中实现搜索增强。另外,您也可以选择使用 Amazon Kendra,这是一种高精度且易于使用的企业搜索服务,由机器学习技术提供支持,且无需用户具备任何机器学习经验。在本文中,我们将介绍如何使用 Amazon SageMaker 与 Amazon ES k最近邻(KNN)在某些类型的应用程序中实现基于NLU的产品搜索功能。
在《使用 Amazon SageMaker 与 Amazon ES 构建视觉搜索应用程序》一文中,我们已经探讨了如何使用 Amazon SageMaker 与 Amazon ES KNN 的欧氏几何距离指标构建视觉搜索应用程序。Amazon ES 现可支持开源 Elasticsearch 7.7版本,且包含 KNN 索引的余弦相似性指标。余弦相似度衡量的是两个向量在同一方向上夹角的余弦,余弦角越小、表示向量之间的相似度越高。通过余弦相似度,您可以测量两上向量之间的方向,并据此在某些特定语义搜索应用程序中做出理想选择。Amazon ES 的高度分布式架构使您能够实现增强的 KNN 排名、高召回率与高性能的企业级搜索引擎。
在本文中,我们将构建一款简单的搜索应用程序,借此展示与传统 Amazon ES 排名方法相比,将 KNN 与 Amazon ES 结合使用所将发展的巨大潜力。文中还将提供一款在浏览器中测试基于 KNN 的搜索查询结果的 Web 应用程序。此应用程序还能够将搜索结果与 Elasticsearch 匹配查询进行比较,以证明 KNN 搜索与全文搜索之间的区别。
在使用文本进行搜索时,常规的 Elasticsearch 文本匹配搜索能够带来很好的效果;但相比之下,基于 KNN 的搜索往往更加自然。例如,当您使用基于 KNN 的搜索应用程序搜索婚纱时,如果您键入“婚礼礼服”或者“结婚礼服”,系统就会给出相关结果。但要构建起基于KNN的搜索应用程序,我们需要完成两个阶段:
- KNN 参考索引 – 在此阶段,我们需要通过深度学习模型传递一组语料库文档,从中提取特征或嵌入。文本嵌入是语料库的数字表示。您可以将这些特征保存在 Amazon ES 上的 KNN 索引当中。实现 KNN 的理论基础在于,相似的数据点将在向量空间中彼此相邻。例如,“夏装”与“夏季碎花裙”由于存在文本嵌入并转而彼此相似;相比之下,“夏装”与“婚纱”则互不相似。
- KNN 索引查询 – 应用程序的推理阶段。在此阶段,我们需要通过深度学习模型提交文本搜索查询,借此提取特征。接下来,使用这些鞂查询参考 KNN 索引。KNN 索引会从 KNN 微量空间返回相似的文本嵌入。例如,如果传递“结婚礼服”文本的特征向量,则其会将“婚礼礼服”嵌入作为类似项返回。
接下来,让我们深入探索各个阶段及其相关的 Amazon Web Services 架构。
在本用例中,您可以使用 Feidegger 数据集中的着装图像及其视频描述。此数据集是一套多模语料库,专门关注时尚项目并配合德语版本的视觉描述。此数据集属于 Zalando 当前时尚领域文本图像多模研究的一部分。
在此步骤中,我们将使用 Amazon Translate 将每种服饰的描述从德语翻译为英语。接下来,我们从每条英语描述中提取特征微量,其代表着衣物的数字特征的 n 维向量。您可以使用 Amazon SageMaker 中托管的预训练 BERT 模型。这里我们提取出服饰的每项视觉描述中的 768 个特征向量,并将其作为 KNN 索引存储在 Amazon ES 域当中。
以下截屏所示,为创建 KNN 索引的工作流程。
整个流程包含以下步骤:
- 与 Amazon SageMaker notebook 实例上的 Jupyter notebook 进行交互的多个用户。每个 Amazon SageMaker notebook 实例代表运行在 Jupyter Notebook 应用上的机器学习计算实例。Amazon SageMaker 负责创建实例以及与之相关的资源。
- 各个条目描述的源语言为德语,需要使用 Amazon Translate 将其转换为英语。
- 下载预训练的 BERT 模型,并将模型工件序列化并存储在 Amazon Simple Storage Service (Amazon S3)当中。此模型用于从 Amazon SageMaker 实时端点上的 PyTorch 模型服务器处提供服务。
- 翻译后的描述会通过 SageMaker 端点进行推送,借此提取固定长度的特征(嵌入)。
- Notebook 代码将文本嵌入以及 Amazon ES 域内的产品 Amazon S3 URI 写入至 KNN 索引。
在此步骤中,我们需要表达一条来自应用程序的搜索查询文本字符串,由其通过 Amazon SageMaker 托管并传递的模型提取 768 项特征。您可以使用这些特征来查询 Amazon ES 中的 KNN 索引。Amazon ES 的 KNN 允许您在向量空间搜索各个点,并通过其余弦相似度(默认值为欧氏几何距离)找到这些点的最近邻。当找到特定查询文本的最近邻向量(例如k = 3最近邻)时,它会将关联的 Amazon S3 图像返回至应用程序。下图所示,为 KNN 搜索全栈应用程序的基本架构。
该流程包含以下步骤:
- 最终用户通过其浏览器或者移动设备访问 Web 应用程序。
- 用户提供的搜索查询字符串将被发送至 Amazon API Gateway 以及 Amazon Web Services Lambda。
- Lambda 函数调用 Amazon SageMaker 实时端点,且该模型返回搜索查询嵌入的向量。Amazon SageMaker 托管并提供 HTTPS 端点以供预测,并使用 Application Auto Scaling 以提供应用程序所需要的性能资源。
- 该函数将搜索查询嵌入向量作为 Amazon ES 域中索引 KNN 搜索的搜索值并进行传递,返回的则为包含 k 个相似项的列表以及各项所对应的 Amazon S3 URI。
- 此函数生成经过预签名的 Amazon S3 URL 并将其返回至客户端 Web 应用程序,此URL用于在浏览器中显示相似项。
相关文章