Elasticsearch 中的图像相似度搜索概览

enterprise-search-search-bar-pattern-light-1680x980.png

想象一下仅凭借一张截图就能模仿明星的装扮。用户可以使用图像快速找到符合他们风格的线上所售服装。但是,当今的搜索体验还达不到这个水平。

客户难以找到他们所需的内容,而且如果找不到的话,他们就会离开。有些人忘记了要搜索内容的名称(关键词),但是仍记得样貌或拥有实际的图像。借助矢量搜索(Elastic 中集成的一项功能),组织能够实施图像相似度搜索。该功能可帮助组织打造更加直观的搜索体验,所以客户仅使用一张图像就能轻松搜索到要找的内容。

您无须成为一名 Machine Learning 专家,也能开始着手在 Elastic 中实施这一功能。这是因为矢量搜索已经集成到了我们可扩展的高性能平台中。您可将集成添加到应用程序框架中,从而更轻松地建立交互式应用程序。

本系列博文包括多个部分,会带您了解如何使用您自己的图像集在 Elastic 中构建相似度搜索原型应用程序。该原型应用程序的前端是使用 Flask 实施的。它可以作为您自己的定制应用程序的蓝图。

在本篇概览博文中,您将会来到幕后,更好地理解使用 Elastic 对图像数据应用矢量搜索所需的架构。如果您更感兴趣的是针对文本的语义搜索,而不是图像搜索,请查看有关自然语言处理 (NLP) 的博文系列(包含多篇博文),了解文本嵌入和矢量搜索、命名实体识别 (NER)、情感分析,以及如何在 Elastic 中应用这些技术。刚开始时,我们会后退一步,解释一下矢量搜索如何为相似度和语义搜索提供支持。

语义搜索和相似度搜索——均由矢量搜索提供支持

矢量搜索利用 Machine Learning (ML) 来捕获非结构化数据的意思和上下文。矢量搜索会利用相似最近邻 (ANN) 算法来找到相似数据。相较于传统的(Elastic 中基于 BM25 评分的)文本搜索,矢量搜索可生成更相关的结果且执行速度更快(无须进行极端引擎优化)。

此方法不仅适用于文本数据,也适用于图像和已有通用嵌入模型的其他类型的非结构化数据。对于文本数据,这通常称为语义搜索;但对于图像和音频搜索,这通常称为相似度搜索

你们如何为图像生成矢量嵌入?

矢量嵌入是数据和相关上下文的数字化表示,存储在高维度(密集)矢量中。用于生成嵌入的模型通常是使用数百万的示例进行训练后得来的,以提供更相关也更准确的结果。

对于文本数据,类似 BERT 的转换器特别热门,可用来生成适用于很多文本类型的嵌入,而且在诸如 Hugging Face 等公共存储库上便有这些转换器。嵌入模型对于任何图像类型的效果都很好,是一个持续的研究主题。CLIP 模型(我们的团队便用其来制作图像相似度应用的原型)由 OpenAI 进行分发,是一个很好的起点。对于专业用例和高级用户,您可能需要训练定制的嵌入模型来实现预期表现。接下来,您需要能够高效地进行搜索。Elastic 支持应用广泛的基于 HNSW 的近似最近邻搜索

相似度搜索如何为创新应用程序提供支持

相似度搜索如何为创新提供支持?在我们的第一个示例中,用户可以截取图片并进行搜索从而找到最喜爱的明星的服饰。

您还可以使用相似度搜索来:

  • 基于其他购物者购买的产品,建议相似产品。
  • 从视觉设计元素库中查找相关的既有设计或相关模板。
  • 基于您最近收听的歌曲,从热门音乐流服务中查找您可能喜欢的歌曲。
  • 使用自然描述从非结构化且未加标签的图像的巨型数据集中进行搜索。

详细了解是什么在为图像相似度搜索提供支持 >>

图像相似度应用的架构概览

制作这种交互应用程序看起来会很复杂。如果您考虑在传统架构中实施的话(如下图所示),则更是如此。但第二幅图则显示了 Elastic 可以如何大幅简化这一架构…

图 1:图像相似度搜索的典型实施(需要使用外部服务)

对于旨在搜索索引数据的大部分搜索应用程序框架,其并不为实现矢量(相似度)搜索所需的 k 最近邻搜索提供原生支持,也不为应用 NLP 模型所需的推理提供原生支持。因此,图像相似度应用程序除了需要与核心搜索(kNN 服务)进行交互之外,还需要与多项服务进行交互。如果涉及文本处理,它还需要与 NLP 服务进行交互,如图 1 所示。它的构建和维护都很复杂。

相比之下,如果使用 Elastic 平台部署图像相似度搜索,矢量搜索和 NLP 都是原生集成的。应用程序能够与涉及的所有组件进行原生通信。如下图所示,Elasticsearch 集群可以执行 kNN 搜索和 NLP 推理。

图 2:Elastic 中图像相似度搜索的实施

为什么选择 Elastic 进行图像相似度搜索?

通过在 Elastic 中实施图像相似度搜索,您可以获得独特优势。使用 Elastic,您可以…

降低应用程序复杂性。借助 Elastic,您无须将运行 kNN 搜索的服务和对搜索输入进行矢量化的服务分离开来。矢量搜索和 NLP 推理终端已被集成到一个可扩展的搜索平台中。在其他热门框架中,深度神经网络和 NLP 模型的应用需要与针对大型数据集扩展搜索分开完成。这意味着您需要聘请专家,为项目增加开发时间,并预留出资源在一段时间内对其进行管理。 

快速扩展。在 Elastic 中,您能做到规模和速度两不误。模型和运行搜索时所用的节点在同一集群(适用于本地部署的集群)内,如果您部署到云端,则更是如此。Elastic Cloud 允许您轻松缩放规模,具体取决于您当前的搜索工作负载。

减少应用程序所需服务的数量有很多益处,不局限于可扩展性。您能够简化性能监测,缩小维护足迹,并减少安全漏洞,不胜枚举。未来的无服务器架构会将应用程序简单性提升至全新水平。

后续内容?

本系列的第 1 部分和第 2 部分会详细解释如何在 Elastic 中实施图像相似度搜索。内容将会包括针对总体架构中每个组件的技术设计考量,以及在 Elastic 中实施此架构的实际代码。 

如要获得在 Elastic 中应用矢量搜索的实操体验,请注册参加我们的实操矢量搜索研讨会。访问我们的线上活动中心查找并注册下一次研讨会。同时,如果您对在此系列中所讨论的任何概念有疑问,请在这个论坛中与我们的社区互动。

最初发表于 2022 年 12 月 14日;更新于 2023年 2 月 28 日。