作者:Radovan Ondas,Bernhard Suhm
想象一下能够用屏幕快照模仿名人的样子。 用户可以使用该图片快速找到符合该款式的在线销售服装。 但是,这不是今天的搜索体验。
客户很难找到他们需要的东西,如果找不到,他们就会离开。 他们中的一些人不记得他们要找的东西的名称(关键字),但对它的外观或实际图像有一个想法。 借助 Elastic 中的一项集成功能矢量搜索,组织可以实施相似图像搜索。 这有助于组织创建更直观的搜索体验,以便客户仅使用图像即可轻松搜索所需内容。
要在 Elastic 中实现此功能,你无需成为机器学习专家即可上手。 这是因为矢量搜索已经集成到我们可扩展的高性能平台中。 你可以集成到应用程序框架中,从而更轻松地建立交互式应用程序。
在这个由多个部分组成的博客系列中,你将了解如何使用你自己的图像集在 Elastic 中构建原型相似性搜索应用程序。 这个原型应用程序的前端是使用 Flask 实现的。 它可以作为你自己的自定义应用程序的蓝图。
- 第 1 部分:图像相似度搜索的 5 个技术组件
- 第 2 部分:如何在 Elastic 中实现图像相似度搜索
在此概述博客中,你将深入幕后,更好地了解使用 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 中应用矢量搜索的一些实践经验,请注册我们的矢量搜索实践研讨会。 查看我们的虚拟活动中心,查找并报名参加下一次研讨会。 如果你同时对本系列中讨论的任何概念有疑问,请在此论坛中与我们的社区互动。