Elastic 图像相似度搜索概述

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elastic 图像相似度搜索概述相关的知识,希望对你有一定的参考价值。

作者:Radovan OndasBernhard Suhm

 

想象一下能够用屏幕快照模仿名人的样子。 用户可以使用该图片快速找到符合该款式的在线销售服装。 但是,这不是今天的搜索体验。

客户很难找到他们需要的东西,如果找不到,他们就会离开。 他们中的一些人不记得他们要找的东西的名称(关键字),但对它的外观或实际图像有一个想法。 借助 Elastic 中的一项集成功能矢量搜索,组织可以实施相似图像搜索。 这有助于组织创建更直观的搜索体验,以便客户仅使用图像即可轻松搜索所需内容。

要在 Elastic 中实现此功能,你无需成为机器学习专家即可上手。 这是因为矢量搜索已经集成到我们可扩展的高性能平台中。 你可以集成到应用程序框架中,从而更轻松地建立交互式应用程序。

在这个由多个部分组成的博客系列中,你将了解如何使用你自己的图像集在 Elastic 中构建原型相似性搜索应用程序。 这个原型应用程序的前端是使用 Flask 实现的。 它可以作为你自己的自定义应用程序的蓝图。

在此概述博客中,你将深入幕后,更好地了解使用 Elastic 将矢量搜索应用于图像数据所需的架构。 如果你实际上对文本而不是图像的语义搜索更感兴趣,请查看有关自然语言处理 (NLP)的多博客系列,以了解文本嵌入和矢量搜索、命名实体识别 (NER)、情感分析以及如何进行在 Elastic 中应用这些技术。 我们将先退后一步,解释相似性和语义搜索如何由向量搜索提供支持。

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

矢量搜索利用机器学习 (ML) 来捕获非结构化数据的含义和上下文。 矢量搜索使用近似最近邻 (ANN) 算法查找相似数据。 与传统的文本搜索(在 Elastic 中,基于 BM25 评分)相比,矢量搜索会产生更相关的结果并且执行速度更快(不需要极端的搜索引擎优化)。

这种方法不仅适用于文本数据,还适用于图像和其他类型的非结构化数据,这些数据可以使用通用嵌入模型。 对于文本数据,通常称为语义搜索(semantic search),而相似性搜索(similarity search)则经常用于图像和音频的上下文中。

 

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

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

对于文本数据,类似 BERT 的转换器很受欢迎,可以生成适用于多种文本的嵌入,并且可以在 Hugging Face 等公共存储库中找到它们。 适用于任何类型图像的嵌入模型是正在进行的研究课题。 CLIP 模型 —— 我们的团队使用它来制作图像相似性应用程序的原型 —— 由 OpenAI 分发并提供了一个很好的起点。 对于特殊用例和高级用户,你可能需要训练自定义嵌入模型以获得所需的性能。 接下来,你需要高效搜索的能力。 Elastic 支持广泛采用的基于 HNSW 的近似最近邻搜索。

相似性搜索如何推动创新应用

相似性搜索如何推动创新? 在我们的第一个示例中,用户可以截取屏幕截图并搜索以查找最喜欢的名人的着装。

 

你还可以使用相似性搜索来:

  • 推荐与其他购物者购买的产品相似的产品。
  • 从视觉设计元素库中查找相关的现有设计或相关模板。
  • 根据你最近收听的内容,从流行音乐流媒体服务中查找你可能喜欢的歌曲。
  • 使用自然描述搜索非结构化和未标记图像的庞大数据集。

详细了解图像相似性搜索的能力 >>

图像相似度应用架构概述

制作这种交互式应用程序看起来很复杂。 如果你一直在考虑在如下所示的传统架构中实施,则尤其如此。 但在第二张图中,它显示了 Elastic 如何显着简化该架构……

图1:图片相似度搜索的典型实现(需要外部服务)

 

大多数用于搜索索引数据的搜索应用程序框架本身并不支持矢量(相似性)搜索所需的 k-最近邻搜索,也不支持应用 NLP 模型所需的推理。 因此,图像相似度应用程序需要与多个服务交互,除了核心搜索 kNN 服务。 如果涉及文本处理,它还需要与 NLP 服务交互,如图 1 所示。构建和维护起来可能很复杂。

相比之下,在使用 Elastic Platform 实现图像相似性搜索时,矢量搜索和 NLP 是原生集成的。 该应用程序可以与所有相关组件进行本地通信。 Elasticsearch 集群可以执行 kNN 搜索和 NLP 推理,如下所示。

图 2:在 Elastic 中实现图片相似度搜索

 

为什么选择 Elastic 做图片相似度搜索?

在 Elastic 中实施图像相似性搜索可为你提供独特的优势。 使用 Elastic,你可以……

降低应用程序的复杂性。 使用 Elastic,你不需要单独的服务来运行 kNN 搜索和向量化你的搜索输入。 矢量搜索和 NLP 推理端点集成在可扩展的搜索平台中。 在其他流行的框架中,深度神经网络和 NLP 模型的应用与对大型数据集的缩放搜索分开进行。 这意味着你需要聘请专家,为你的项目增加开发时间,并预留资源以随着时间的推移对其进行管理。

随速度扩展。 在 Elastic 中,你可以获得规模和速度。 模型与在同一集群中运行搜索的节点并存,这适用于本地集群,如果部署到云中则更是如此。 Elastic Cloud 允许你根据当前的搜索工作负载轻松扩展和缩减。

减少应用程序所需的服务数量具有扩展之外的好处。 你可以体验简化的性能监控、更小的维护足迹和更少的安全漏洞——仅举几例。 未来的无服务器架构会将应用程序的简单性提升到一个全新的水平。

下一步是什么?

本系列的第 1 部分和第 2 部分将提供有关如何在 Elastic 中实施图像相似性搜索的更多详细信息。 它们将包括高级架构中每个组件的技术设计考虑因素以及在 Elastic 中实施架构的实际代码。

要获得在 Elastic 中应用矢量搜索的一些实践经验,请注册我们的矢量搜索实践研讨会。 查看我们的虚拟活动中心,查找并报名参加下一次研讨会。 如果你同时对本系列中讨论的任何概念有疑问,请在此论坛中与我们的社区互动。

以上是关于Elastic 图像相似度搜索概述的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何在 Elastic 中实现图片相似度搜索

Postgres:用于一对多搜索的浮点数组的余弦相似度索引

以图搜图 图像匹配_百度识图:以图搜图找到相似图片原理分析

PHP基于elasticsearch全文搜索引擎的开发

有啥可以对比两张图片得出相似度的软件。

信息学奥赛一本通(C++)在线评测系统——基础C++语言—— 1123:图像相似度