Creación de una demostración de recomendador de productos multimodal usando Milvus y Streamlit
La demo de recuperación de imágenes compuestas de Milvus muestra la búsqueda inversa de imágenes, mientras que la demo de RAG multimodal de Milvus utiliza esta técnica para recomendaciones de productos. Simplemente sube una imagen e introduce instrucciones de texto; el modelo de embeddings multimodales MagicLens de Google codificará tanto la imagen como el texto en un único vector multimodal. Luego, este vector se utiliza para encontrar los productos de Amazon más parecidos desde una base de datos vectorial Milvus.
🎨🔍 Presentamos la magia de Milvus: ¡búsqueda de imágenes y compras inteligentes!
¿Alguna vez has deseado poder encontrar productos solo mostrando una imagen y describiendo lo que quieres? Bueno, ¡ahora puedes! 🛍️✨
Así es como funcionan nuestras geniales demos:
📸 Toma una foto y escribe lo que estás buscando
🧙♂️ Nuestra magia de Milvus convierte tu entrada en un "vector multimodal" especial (elegante, ¿verdad?)
🕵️♀️ Este vector se convierte en un superdetective para buscar en nuestra base de datos vectorial Milvus
🎉 ¡Voilà! Encuentra productos de Amazon que coinciden con tu imagen y descripción
En este blog, mostraremos cómo ejecutar la demo de RAG multimodal de Milvus.
Tecnologías utilizadas para el recomendador de productos multimodal
Google DeepMind’s MagicLens es un modelo de embeddings multimodales que utiliza una arquitectura de codificador dual para procesar texto e imágenes basándose en CLIP (OpenAI 2021) o CoCa (Google Research 2022). MagicLens admite diversas tareas de recuperación, incluidas imagen a imagen y texto a imagen, al fusionar pesos entrenados en un espacio vectorial común. Entrenado con 36,7 millones de tripletas, puede realizar tareas de recuperación de imagen a imagen, texto a imagen y combinación multimodal texto-imagen, superando a modelos anteriores con un tamaño de modelo significativamente menor.
OpenAI’s GPT-4o es un Gran Modelo de Lenguaje multimodal generativo de OpenAI que integra texto, imágenes y otros tipos de datos en un único modelo, mejorando los modelos de lenguaje tradicionales. Esta IA avanzada ofrece una comprensión y un procesamiento más profundos de información compleja, mejorando la precisión y la conciencia del contexto. Admite diversas aplicaciones, desde procesamiento del lenguaje natural hasta visión por computadora.
Milvus es una base de datos vectorial distribuida y de código abierto para almacenar, indexar y buscar vectores para cargas de trabajo de IA generativa. Su capacidad para realizar búsqueda híbrida, filtrado de metadatos, reordenamiento y manejar eficientemente billones de vectores convierte a Milvus en una opción de referencia para cargas de trabajo de IA y aprendizaje automático. Milvus puede ejecutarse localmente, en un clúster o alojarse en Zilliz Cloud.
Streamlit es una biblioteca Python de código abierto que simplifica la creación y ejecución de aplicaciones web. Permite a los desarrolladores crear y desplegar dashboards, informes de datos e interfaces simples de aprendizaje automático usando scripts de Python sencillos, sin requerir un conocimiento extenso de tecnologías web como CSS o frameworks de JavaScript como Node.js.
Preparar los datos
Los datos de esta demo provienen del conjunto de datos Amazon Reviews 2023. La fuente de datos original incluye 54 millones de reseñas de usuarios de 48 millones de artículos en 33 categorías, como electrodomésticos, belleza, ropa, deportes, aire libre, y una categoría adicional “Unknown”.
Usaremos solo un subconjunto de 5K artículos de los datos disponibles mediante un muestreo uniforme por categoría. Descarga las imágenes ejecutando download_images.py.
$ python download_images.py
Cada fila de datos de producto consta de metadatos del artículo (como el nombre de la categoría y la calificación promedio de las reseñas de usuarios) y URLs de imágenes para la miniatura y las imágenes grandes del producto.
Para los datos vectoriales, esta demo utiliza un único vector de incrustación de imagen grande por producto.
Instrucciones de configuración para MagicLens
Esta guía te muestra cómo configurar el entorno y descargar los pesos del modelo para MagicLens, que es un potente sistema de recuperación de imágenes desarrollado por Google DeepMind. Para obtener información más detallada, visita el repositorio de GitHub de MagicLens.
Configurar el entorno
- Crea un entorno conda:
$ conda create --name magic_lens python=3.9
- Activa el entorno:
$ conda activate magic_lens
- Clona el repositorio Scenic:
$ git clone https://github.com/google-research/scenic.git
- Navega al directorio Scenic:
$ cd scenic
- Instala Scenic:
$ pip install
- Instala las dependencias de CLIP:
$ pip install -r scenic/projects/baselines/clip/requirements.txt
- Instala Jax:
Si estás usando una GPU para el procesamiento, es posible que necesites instalar la versión de GPU correspondiente de Jax. Sigue las instrucciones en la página de documentación de JAX para ver los pasos detallados.
Aquí tienes ejemplos para versiones específicas de CUDA (solo Linux):
Instalación de CUDA 12:
$ pip install --upgrade "jax[cuda12_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Instalación de CUDA 11:
$ pip install --upgrade "jax[cuda11_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Descargar los pesos del modelo localmente
- Navega de vuelta a la carpeta principal:
$ cd .. # This will take you back to the main directory where you cloned the demo.
- Descarga el modelo (puede requerir autenticación):
$ gsutil cp -R gs://gresearch/magiclens/models ./
Crear la colección de Milvus y guardar vectores
El servidor Milvus en esta demo es Milvus Lite con Milvus Client sin esquema.
Crea una colección, codifica cada imagen en vectores y carga los datos vectoriales en Milvus ejecutando index.py.
$ python index.py
Este paso codificará cada imagen en un vector de 768 dimensiones. Para cada producto de la muestra, el vector de imagen, junto con los metadatos de producto asociados, se guarda en una colección de Milvus llamada “cir_demo_large” con AUTOINDEX (HNSW).
Indexación y búsqueda en Milvus
En tiempo de ejecución, cuando realices una búsqueda inversa de una imagen y texto, Milvus buscará los top_k = 100 vectores de imagen más cercanos usando la distancia vectorial COSINE.
Milvus ordena automáticamente los top_k en orden descendente (ya que valores más grandes de distancia COSINE significan que están más cerca).
Ejecutar el frontend del servidor Streamlit
Actualiza tu archivo local
cfg.py, reemplazando los nombres de ruta con tus rutas locales para imágenes y pesos del modelo.Inicia la aplicación ejecutando desde tu terminal:
$ streamlit run ui.py
- Uso de la aplicación:
Sube una imagen para guiar la búsqueda de productos.
Introduce una instrucción de texto para guiar la búsqueda.
Haz clic en "Search" para encontrar productos similares en la base de datos vectorial Milvus.
Haz clic en "Ask GPT" para obtener recomendaciones impulsadas por IA.
Figura 1- La interfaz de nuestra aplicación de demostración
Figura 1: La interfaz de nuestra aplicación de demostración
Cómo funciona esta aplicación:
La función Search incrustará tu imagen y texto en un vector utilizando el modelo de incrustación multimodal, MagicLens, que es el mismo modelo utilizado para incrustar imágenes de productos almacenadas en la base de datos vectorial Milvus. Luego, Milvus realizará una búsqueda vectorial de vecinos más cercanos aproximados (ANN) para encontrar las top_k imágenes de productos más cercanas a tu vector de entrada.
La función Ask GPT llamará al modelo generativo multimodal GPT-4o mini de OpenAI. Tomará las 25 mejores imágenes de los resultados de búsqueda, las incorporará en un prompt y las enviará al modelo. Luego, GPT-4o mini seleccionará la mejor imagen y explicará la razón de su elección.
Figura 2- Las respuestas proporcionadas por GPT-4o mini
Figura 2: Las respuestas proporcionadas por GPT-4o mini
Referencias
Recuperación de imágenes multimodal en bootcamp: https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/cir_with_milvus
RAG multimodal con recomendaciones de reordenamiento en bootcamp: https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/multimodal_rag_with_milvus
Modelo Google MagicLens: https://github.com/google-deepmind/magiclens
Video sobre la teoría detrás de esta demostración: https://youtu.be/uaqlXRCvjG4?si=e83DnUsLZvVnWt-0&t=51
Sigue leyendo

Zilliz Cloud Now Available in AWS Europe (Ireland)
Zilliz Cloud launches in AWS eu-west-1 (Ireland) — bringing low-latency vector search, EU data residency, and full GDPR-ready infrastructure to European AI teams. Now live across 30 regions on five cloud providers.

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Vector Databases vs. Object-Relational Databases
Use a vector database for AI-powered similarity search; use an object-relational database for complex data modeling with both relational integrity and object-oriented features.




