发布于: 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 索引的工作流程。

整个流程包含以下步骤:

  1. 与 Amazon SageMaker notebook 实例上的 Jupyter notebook 进行交互的多个用户。每个 Amazon SageMaker notebook 实例代表运行在 Jupyter Notebook 应用上的机器学习计算实例。Amazon SageMaker 负责创建实例以及与之相关的资源。
  2. 各个条目描述的源语言为德语,需要使用 Amazon Translate 将其转换为英语。
  3. 下载预训练的 BERT 模型,并将模型工件序列化并存储在 Amazon Simple Storage Service (Amazon S3)当中。此模型用于从 Amazon SageMaker 实时端点上的 PyTorch 模型服务器处提供服务。
  4. 翻译后的描述会通过 SageMaker 端点进行推送,借此提取固定长度的特征(嵌入)。
  5. Notebook 代码将文本嵌入以及 Amazon ES 域内的产品 Amazon S3 URI 写入至 KNN 索引。

在此步骤中,我们需要表达一条来自应用程序的搜索查询文本字符串,由其通过 Amazon SageMaker 托管并传递的模型提取 768 项特征。您可以使用这些特征来查询 Amazon ES 中的 KNN 索引。Amazon ES 的 KNN 允许您在向量空间搜索各个点,并通过其余弦相似度(默认值为欧氏几何距离)找到这些点的最近邻。当找到特定查询文本的最近邻向量(例如k = 3最近邻)时,它会将关联的 Amazon S3 图像返回至应用程序。下图所示,为 KNN 搜索全栈应用程序的基本架构。

该流程包含以下步骤:

  1. 最终用户通过其浏览器或者移动设备访问 Web 应用程序。
  2. 用户提供的搜索查询字符串将被发送至 Amazon API Gateway 以及 Amazon Web Services Lambda。
  3. Lambda 函数调用 Amazon SageMaker 实时端点,且该模型返回搜索查询嵌入的向量。Amazon SageMaker 托管并提供 HTTPS 端点以供预测,并使用 Application Auto Scaling 以提供应用程序所需要的性能资源。
  4. 该函数将搜索查询嵌入向量作为 Amazon ES 域中索引 KNN 搜索的搜索值并进行传递,返回的则为包含 k 个相似项的列表以及各项所对应的 Amazon S3 URI。
  5. 此函数生成经过预签名的 Amazon S3 URL 并将其返回至客户端 Web 应用程序,此URL用于在浏览器中显示相似项。

相关文章