Visión general de la búsqueda por similitud de imágenes en Elasticsearch
Imagina poder imitar el atuendo de una celebridad con una captura de pantalla. Los usuarios podrían usar la imagen para encontrar con rapidez prendas en línea que coincidan con el estilo. Pero esta no es la experiencia de búsqueda actual.
Los clientes tienen dificultades para encontrar lo que necesitan y, si no pueden hacerlo, se van. Algunos no recuerdan el nombre (palabra clave) de lo que están buscando, pero tienen una idea de cómo se ve o la imagen en sí. Gracias a la búsqueda de vectores, una capacidad integrada en Elastic, las organizaciones pueden implementar la búsqueda por imágenes similares. Esto ayuda a las organizaciones a crear una experiencia de búsqueda más intuitiva, de modo que los clientes puedan buscar con facilidad lo que desean con solo una imagen.
Para implementar esta funcionalidad en Elastic, no necesitas ser un experto en machine learning para dar los primeros pasos. Esto es porque la búsqueda de vectores ya está integrada en nuestra plataforma escalable y de alto rendimiento. Obtienes integraciones en los marcos de trabajo de las aplicaciones, lo que facilita poner en pie aplicaciones interactivas.
En esta serie de blogs de varias partes, recorreremos cómo crear un prototipo de aplicación de búsqueda por similitud en Elastic con tu propio conjunto de imágenes. El frontend de este prototipo de aplicación se implementa con Flask. Puede servir como plan para tu propia aplicación personalizada.
- Parte 1: 5 technical components of image similarity search (Cinco componentes técnicos de la búsqueda por similitud de imágenes)
- Parte 2: How to implement image similarity search in Elastic (Cómo implementar la búsqueda por similitud de imágenes en Elastic)
En este blog de visión general, verás detrás de escena para comprender mejor la arquitectura necesaria para aplicar la búsqueda de vectores en datos de imágenes con Elastic. Si, en realidad, te interesa más la búsqueda semántica en texto que en imágenes, revisa la serie de varios blogs sobre procesamiento de lenguaje natural (NLP) para obtener información sobre las incrustaciones de texto y la búsqueda de vectores, el reconocimiento de entidades con nombre (NER), el análisis de sentimiento y cómo aplicar estas técnicas en Elastic. Comenzaremos por dar un paso atrás y explicar cómo tanto la búsqueda por similitud como la semántica están impulsadas por la búsqueda de vectores.
Búsqueda semántica y búsqueda por similitud; ambas impulsadas por la búsqueda de vectores
La búsqueda de vectores aprovecha el machine learning (ML) para capturar el significado y el contexto de los datos no estructurados. Esta búsqueda encuentra datos similares usando algoritmos de vecino más cercano aproximado (ANN). En comparación con la búsqueda de texto tradicional (en Elastic, basado en puntuación de BM25), la búsqueda de vectores brinda resultados más relevantes y se ejecuta más rápido (sin la necesidad de optimizaciones extremas del motor de búsqueda).
Este enfoque funciona no solo con los datos de texto, sino también con las imágenes y otro tipo de datos no estructurados para los que están disponibles modelos de incrustación genéricos. Para los datos de texto, suele llamarse búsqueda semántica, mientras que búsqueda por similitud suele usarse en el contexto de imágenes y audio.
¿Cómo generas incrustaciones de vectores para imágenes?
Las incrustaciones de vectores son la representación numérica de los datos y el contenido relacionado almacenados en vectores (densos) de alta dimensionalidad. Los modelos que generan incrustaciones suelen estar entrenados con millones de ejemplos para brindar resultados más relevantes y precisos.
En el caso de los datos de texto, los transformadores tipo BERT son populares para generar incrustaciones que funcionen con muchos tipos de texto y están disponibles en repositorios públicos, como Hugging Face. Los modelos de incrustación, que funcionan bien en cualquier tipo de imagen, son materia de investigación continua. El modelo CLIP, usado por nuestros equipos para elaborar un prototipo de la app de similitud de imágenes, lo distribuye OpenAI y brinda un buen punto de partida. Para casos de uso especializados y usuarios avanzados, es posible que debas entrenar un modelo de incrustación personalizado a fin de lograr el rendimiento deseado. Luego, necesitas la capacidad de buscar con eficiencia. Elastic ofrece soporte para la búsqueda de vecino más cercano aproximado basada en HNSW de amplia adopción.
Cómo la búsqueda por similitud impulsa aplicaciones innovadoras
¿Cómo la búsqueda por similitud impulsa la innovación? En nuestro primer ejemplo, los usuarios podrían tomar una captura de pantalla y buscar el atuendo de su celebridad favorita.
También puedes usar la búsqueda por similitud para lo siguiente:
- Sugerir productos que sean similares a lo que compraron otros usuarios
- Encontrar diseños existentes relacionados o plantillas relevantes en una biblioteca de elementos de diseño visuales
- Encontrar canciones que pueden gustarte en servicios de transmisión de música populares según lo que escuchaste recientemente
- Buscar en sets de datos enormes de imágenes no estructuradas y sin etiquetar mediante la descripción natural
Conoce más sobre qué impulsa la búsqueda por similitud de imágenes >>
Visión general de la arquitectura de la app de similitud de imágenes
Elaborar este tipo de aplicación interactiva puede parecer complejo. Esto es especialmente cierto si has estado considerando la implementación en una arquitectura tradicional, como se muestra a continuación. Pero en el segundo diagrama, se muestra cómo Elastic simplifica significativamente esta arquitectura…
La mayoría de los marcos de trabajo de aplicaciones de búsqueda para buscar en tus datos indexados no soportan de forma nativa la búsqueda k vecino más cercano necesaria para la búsqueda (por similitud) de vectores, ni la inferencia necesaria para aplicar modelos de NLP. Por lo tanto, la aplicación de similitud de imágenes debe interactuar con varios servicios, aparte de la búsqueda principal y el servicio kNN. Si se involucra el procesamiento de texto, también tendrá que interactuar con un servicio NLP, como se muestra en la Figura 1. Esto puede resultar difícil de crear y mantener.
Por el contrario, al implementar la búsqueda por similitud de imágenes con Elastic Platform, la búsqueda de vectores y NLP están integrados de forma nativa. La aplicación puede comunicarse de forma nativa con todos los componentes involucrados. El cluster de Elasticsearch puede ejecutar búsquedas de kNN e inferencia de NLP, como se muestra a continuación.
¿Por qué elegir Elastic para la búsqueda por similitud de imágenes?
Implementar la búsqueda por similitud de imágenes en Elastic te brinda ventajas distintivas. Con Elastic, puedes…
Reducir la complejidad de las aplicaciones. Con Elastic no necesitas distintos servicios para ejecutar la búsqueda kNN y vectorizar tu entrada de búsqueda. Los endpoints de inferencia de NLP y búsqueda de vectores están integrados en una plataforma de búsqueda escalable. En otros marcos de trabajo populares, la aplicación de redes neurales profundas y modelos de NLP se realiza por separado del escalado de búsquedas en grandes sets de datos. Esto significa que debes contratar expertos, agregar tiempo de desarrollo al proyecto y reservar recursos para la gestión en el tiempo.
Escalar con velocidad. En Elastic, obtienes escala y velocidad. Los modelos se encuentran junto a los nodos que ejecutan la búsqueda en el mismo cluster, lo cual aplica a clusters en las instalaciones, e incluso más si despliegas en el cloud. Elastic Cloud te permite aumentar y disminuir la escala con facilidad, según tu carga de trabajo de búsqueda actual.
Reducir la cantidad de servicios que necesita una aplicación tiene beneficios más allá del escalado. Puedes experimentar el monitoreo de rendimiento simplificado, una menor cantidad de mantenimiento y menos vulnerabilidades de seguridad, entre otros. Las arquitecturas sin servidor futuras llevarán la simpleza de las aplicaciones a otro nivel.
¿Qué sigue?
Las partes 1 y 2 de esta serie brindarán más detalles sobre cómo implementar la búsqueda por similitud de imágenes en Elastic. Incluirán consideraciones de diseño técnicas para cada uno de los componentes en la arquitectura de alto nivel, más código real para implementar la arquitectura en Elastic.
Para obtener un poco de experiencia práctica en la aplicación de búsqueda de vectores en Elastic, regístrate en nuestro taller práctico de búsqueda de vectores. Echa un vistazo a nuestro centro de eventos virtuales para encontrar nuestro próximo taller y registrarte. Si, mientras tanto, tienes preguntas sobre cualquiera de los conceptos tratados en esta serie, interactúa con nuestra comunidad en este foro de debate.
Publicado originalmente el 14 de diciembre de 2022; actualizado el 28 de febrero de 2023.