Creación de un sistema RAG multimodal con Elasticsearch: la historia de Gotham City

Aprenda a crear un sistema multimodal de generación aumentada de recuperación (RAG) que integre datos de texto, audio, video e imagen para proporcionar una recuperación de información más rica y contextualizada.

Elasticsearch tiene integraciones nativas con las herramientas y proveedores líderes en la industria de IA generativa. Echa un vistazo a nuestros webinars sobre cómo ir más allá de los conceptos básicos de RAG o crear apps listas para la producción con la base de datos vectorial de Elastic.

Para crear las mejores soluciones de búsqueda para tu caso de uso, inicia una prueba gratuita en el cloud o prueba Elastic en tu máquina local ahora mismo.

En este blog, aprenderás a crear un pipeline RAG (Retrieval-Augmented Generation) multimodal con Elasticsearch. Exploraremos cómo aprovechar ImageBind para generar incrustaciones para varios tipos de datos, incluidos texto, imágenes, audio y mapas de profundidad. También descubrirás cómo almacenar y recuperar de manera eficiente estas incrustaciones en Elasticsearch mediante dense_vector y búsqueda k-NN. Finalmente, integraremos un modelo de lenguaje grande (LLM) para analizar la evidencia recuperada y generar un reporte final completo.

¿Cómo funciona el oleoducto multimodal RAG?

  1. Recopilación de pistas → imágenes, audio, textos y mapas de profundidad de la escena del crimen en Gotham.
  2. Generación de incrustaciones → Cada archivo se convierte en un vector mediante el modelo multimodal ImageBind.
  3. Indexación en Elasticsearch → Los vectores se almacenan para una recuperación eficiente.
  4. Buscando por similitud → Dada una nueva pista, se recuperan los vectores más similares.
  5. El LLM analiza la evidencia → ¡Un modelo GPT-4 sintetiza la respuesta e identifica al sospechoso!

Tecnologías empleadas

  • ImageBind → Genera incrustaciones unificadas para varias modalidades.
  • Elasticsearch → Permite una búsqueda vectorial rápida y eficiente.
  • LLM (GPT-4, OpenAI) → Analiza la evidencia y genera un reporte final.

¿A quién va dirigido este blog?

  • Usuarios de Elastic interesados en la búsqueda vectorial multimodal.
  • Desarrolladores que buscan comprender el RAG multimodal en la práctica.
  • Cualquiera que busque soluciones escalables para analizar datos de múltiples fuentes.

Requisitos previos para el RAG multimodal: Configuración del entorno

Para resolver el crimen en Gotham City, debe configurar su entorno tecnológico. Siga esta guía paso a paso:

1. Requisitos técnicos

ComponenteEspecificación
Sistema operativoLinux, macOS o Windows
Python3.10 o posterior
CARNEROMínimo 8 GB (se recomiendan 16 GB)
GPUOpcional pero recomendado para ImageBind

2. Configuración del proyecto

Todos los materiales de investigación están disponibles en GitHub, y usaremos Jupyter Notebook (Google Colab) para esta experiencia interactiva de resolución de crímenes. Siga estos pasos para comenzar:

Configuración con Jupyter Notebook (Google Colab)

1. Accede al cuaderno

  • Abre nuestro notebook de Google Colab listo para usar: RAG multimodal con Elasticsearch.
  • Este cuaderno contiene todo el código y las explicaciones que debe seguir.

2. Clonar el repositorio

3. Instalar dependencias

4. Configurar credenciales

Nota: El modelo ImageBind (~2 GB) se descargará automáticamente en la primera ejecución.

Ahora que todo está configurado, ¡profundicemos en los detalles y resolvamos el crimen!

Introducción: El crimen en Gotham City

En una noche lluviosa en Gotham City, un crimen impactante sacude la ciudad. El comisionado Gordon necesita su ayuda para desentrañar el misterio. Las pistas están dispersas en diferentes formatos: imágenes borrosas, audio misterioso, textos encriptados e incluso mapas de profundidad. ¿Estás listo para emplear la tecnología de IA más avanzada para resolver el caso?

En este blog, se le guiará paso a paso a través de la construcción de un sistema RAG (Retrieval-Augmented Generation) multimodal que unifica diferentes tipos de datos (imágenes, audio, textos y mapas de profundidad) en un solo espacio de búsqueda. Usaremos ImageBind para generar incrustaciones multimodales, Elasticsearch para almacenar y recuperar estas incrustaciones y un modelo de lenguaje grande (LLM) para analizar la evidencia y generar un reporte final.

Fundamentos: Arquitectura RAG multimodal

¿Qué es un RAG multimodal?

El auge de la generación aumentada de recuperación (RAG) multimodal está revolucionando la forma en que interactuamos con los modelos de IA. Tradicionalmente, los sistemas RAG funcionan exclusivamente con texto, recuperando información relevante de las bases de datos antes de generar respuestas. Sin embargo, el mundo no se limita al texto: las imágenes, los videos y el audio también contienen conocimientos valiosos. Es por eso que las arquitecturas multimodales están ganando protagonismo, lo que permite que los sistemas de IA combinen información de diferentes formatos para obtener respuestas más ricas y precisas.

Tres enfoques principales para el GAR multimodal

Para implementar un GAR multimodal, se emplean comúnmente tres estrategias. Cada enfoque tiene sus propios beneficios y limitaciones, según el caso de uso:

1. Espacio vectorial compartido

Los datos de diferentes modalidades se asignan a un espacio vectorial común empleando modelos multimodales como ImageBind. Esto permite que las consultas de texto recuperen imágenes, videos y audio sin conversión de formato explícita.

Beneficios:

  • Permite la recuperación multimodal sin necesidad de conversión de formato explícita.
  • Proporciona una integración fluida entre diferentes modalidades, lo que permite la recuperación directa a través de texto, imagen, audio y video.
  • Escalable para diversos tipos de datos, lo que lo hace útil para aplicaciones de recuperación a gran escala.

Desventajas:

  • La capacitación requiere grandes conjuntos de datos multimodales, que pueden no estar siempre disponibles.
  • El espacio de incrustación compartido puede introducir una deriva semántica, donde las relaciones entre modalidades no se conservan perfectamente.
  • El sesgo en los modelos multimodales puede afectar la precisión de la recuperación, según la distribución del conjunto de datos.

2. Modalidad de conexión a tierra única

Todas las modalidades se convierten a un solo formato, generalmente texto, antes de la recuperación. Por ejemplo, las imágenes se describen a través de subtítulos generados automáticamente y el audio se transcribe en texto.

Beneficios:

  • Simplifica la recuperación, ya que todo se convierte en una representación de texto uniforme.
  • Funciona bien con los motores de búsqueda basados en texto existentes, eliminando la necesidad de una infraestructura multimodal especializada.
  • Puede mejorar la interpretabilidad ya que los resultados recuperados están en un formato legible por humanos.

Desventajas:

  • Pérdida de información: Es posible que ciertos detalles (por ejemplo, relaciones espaciales en imágenes, tono en audio) no se capturen completamente en las descripciones de texto.
  • Depende de la calidad de los subtítulos/transcripciones: los errores en las anotaciones automáticas pueden reducir la eficacia de la recuperación.
  • No es óptimo para consultas puramente visuales o auditivas , ya que el proceso de conversión podría eliminar el contexto esencial.

3. Recuperación separada

Mantiene modelos distintos para cada modalidad. El sistema realiza búsquedas separadas para cada tipo de datos y luego combina los resultados.

Beneficios:

  • Permite la optimización personalizada por modalidad, mejorando la precisión de la recuperación para cada tipo de datos.
  • Menos dependencia de modelos multimodales complejos, lo que facilita la integración de los sistemas de recuperación existentes.
  • Proporciona un control detallado sobre la clasificación y la reclasificación, ya que los resultados de diferentes modalidades se pueden combinar dinámicamente.

Desventajas:

  • Requiere fusión de resultados, lo que hace que el proceso de recuperación y clasificación sea más complejo.
  • Puede generar respuestas inconsistentes si diferentes modalidades devuelven información contradictoria.
  • Mayor costo computacional ya que se realizan búsquedas independientes para cada modalidad, aumentando el tiempo de procesamiento.

Nuestra elección: espacio vectorial compartido con ImageBind

Entre estos enfoques, elegimos el espacio vectorial compartido, una estrategia que se alinea perfectamente con la necesidad de búsquedas multimodales eficientes. Nuestra implementación se basa en ImageBind, un modelo capaz de representar múltiples modalidades (texto, imagen, audio y video) en un espacio vectorial común. Esto nos permite:

  • Realice búsquedas multimodales entre diferentes formatos de medios sin necesidad de convertir todo en texto.
  • Emplee incrustaciones altamente expresivas para capturar relaciones entre diferentes modalidades.
  • Garantiza la escalabilidad y la eficiencia, almacenando incrustaciones optimizadas para una recuperación rápida en Elasticsearch.

Al adoptar este enfoque, creamos una estable canalización de búsqueda multimodal, donde una consulta de texto puede recuperar directamente imágenes o audio sin procesamiento previo adicional. Este método amplía las aplicaciones prácticas desde la búsqueda inteligente en grandes repositorios hasta los sistemas avanzados de recomendación multimodal.

En la ilustración siguiente se muestra el flujo de datos dentro de la canalización RAG multimodal, destacando el proceso de indexación, recuperación y generación de respuestas basado en datos multimodales:

¿Cómo funciona el espacio de incrustación?

Tradicionalmente, las incrustaciones de texto provienen de modelos de lenguaje (por ejemplo, BERT, GPT). Ahora, con modelos multimodales nativos como ImageBind de Meta AI, tenemos una columna vertebral que genera vectores para múltiples modalidades:

  • Texto: Las oraciones y los párrafos se transforman en vectores de la misma dimensión.
  • Imágenes (visión): los pixeles se asignan al mismo espacio dimensional empleado para el texto.
  • Audio: Las señales de sonido se convierten en incrustaciones comparables a imágenes y texto.
  • Mapas de profundidad: Los datos de profundidad se procesan y también dan como resultado vectores.

Por lo tanto, cualquier pista (texto, imagen, audio, profundidad) se puede comparar con cualquier otra empleando métricas de similitud vectorial como la similitud de coseno. Si una muestra de audio riendo y una imagen de la cara de un sospechoso están "cerca" en este espacio, podemos inferir alguna correlación (por ejemplo, la misma identidad).

Etapa 1 - Recopilación de pistas de la escena del crimen

Antes de analizar la evidencia, necesitamos recopilarla. El crimen en Gotham dejó rastros que pueden estar ocultos en imágenes, audio, textos e incluso datos de profundidad. Organicemos estas pistas para alimentar nuestro sistema.

¿Qué tenemos?

El Comisionado Gordon nos envió los siguientes archivos que contienen evidencia recopilada de la escena del crimen en cuatro modalidades diferentes:

Descripción y modalidad de la pista

a) Imágenes (2 fotos)

  • crime_scene1.jpg, crime_scene2.jpg → Fotos tomadas de la escena del crimen. Muestra rastros sospechosos en el suelo.
  • suspect_spotted.jpg → Imagen de la cámara de seguridad que muestra una silueta huyendo de la escena.

b) Audio (1 grabación)

  • joker_laugh.wav → Un micrófono cerca de la escena del crimen capturó una risa siniestra.

c) Texto (1 mensaje)

  • Riddle.txt, note2.txt → Se encontraron algunas notas misteriosas en el lugar, posiblemente dejadas por el criminal.

d) Profundidad (1 mapa de profundidad)

  • depth_suspect.png → Una cámara de seguridad con un sensor de profundidad capturó a un sospechoso en un callejón cercano.
  • jdancing-depth.png → Una cámara de seguridad con un sensor de profundidad capturó a un sospechoso bajando por la estación de metro.

Estas pruebas están en diferentes formatos y no pueden analizar directamente de la misma manera. Necesitamos transformarlos en incrustaciones, vectores numéricos que permitan la comparación intermodal.

Organización de archivos

Antes de comenzar a procesar, debemos cerciorarnos de que todas las pistas estén organizadas correctamente en el directorio data/ para que la canalización funcione sin problemas.

Estructura de directorios esperada:

Código para verificar la organización de pistas

Antes de continuar, cerciorémonos de que todos los archivos necesarios estén en la ubicación correcta.

Ejecución del archivo

Salida esperada (si todos los archivos son correctos):

Salida esperada (si falta algún archivo):

Este script ayuda a prevenir errores antes de comenzar a generar incrustaciones e indexarlas en Elasticsearch.

Etapa 2 - Organización de la evidencia

Generación de incrustaciones con ImageBind

Para unificar las pistas, necesitamos transformarlas en incrustaciones, representaciones vectoriales que capturen el significado de cada modalidad. Usaremos ImageBind, un modelo de Meta AI que genera incrustaciones para diferentes tipos de datos (imágenes, audio, texto y mapas de profundidad) dentro de un espacio vectorial compartido.

¿Cómo funciona ImageBind?

Para comparar diferentes tipos de evidencia (imágenes, audio, texto y mapas de profundidad), necesitamos transformarlos en vectores numéricos usando ImageBind. Este modelo permite convertir cualquier tipo de entrada al mismo formato de incrustación, lo que permite búsquedas multimodales entre modalidades.

A continuación se muestra un código optimizado (src/embedding_generator.py) para generar incrustaciones para cualquier tipo de entrada empleando los procesadores apropiados para cada modalidad:

Un tensor es una estructura de datos fundamental en el aprendizaje automático y el aprendizaje profundo, especialmente cuando se trabaja con modelos como ImageBind. En nuestro contexto:

Aquí, el tensor representa los datos de entrada (imagen, audio o texto) convertidos a un formato matemático que el modelo puede procesar. Específicamente:

  • Para imágenes: El tensor representa la imagen como una matriz multidimensional de valores numéricos (pixeles organizados por canales de altura, anchura y color).
  • Para audio: El tensor representa las ondas sonoras como una secuencia de amplitudes a lo largo del tiempo.
  • Para texto: El tensor representa palabras o tokens como vectores numéricos.

Probar la generación de incrustación:

Probemos nuestra generación de incrustación con el siguiente código. Almacénelo en 02-stage/test_embedding_generation.py y ejecútelo con este comando:

Resultado esperado:

Ahora, la imagen se transformó en un vector de 1024 dimensiones.

Etapa 3: Almacenamiento y búsqueda en Elasticsearch

Ahora que generamos las incrustaciones para la evidencia, necesitamos almacenarlas en una base de datos vectorial para permitir búsquedas eficientes. Para ello, emplearemos Elasticsearch, que soporta vectores densos (dense_vector) y permite búsquedas de similitud.

Este paso consta de dos procesos principales:

  • Indexación de las incrustaciones → Almacena los vectores generados en Elasticsearch.
  • Búsqueda de similitudes → Recupera los registros más similares a una nueva evidencia.

Indexación de la evidencia en Elasticsearch

Cada pieza de evidencia procesada por ImageBind (imagen, audio, texto o profundidad) se convierte en un vector de 1024 dimensiones. Necesitamos almacenar estos vectores en Elasticsearch para habilitar futuras búsquedas.

El siguiente código (src/elastic_manager.py) crea un índice en Elasticsearch y configura la asignación para almacenar las incrustaciones.

Ejecución de la indexación

Ahora, indexemos una evidencia para probar el proceso.

Salida esperada en Elasticsearch (resumen del documento indexado):

Para indexar todas las pruebas multimodales, ejecute el siguiente comando de Python:

Ahora, la evidencia se almacena en Elasticsearch y está lista para recuperar cuando sea necesario.

Verificación del proceso de indexación

Luego de ejecutar el script de indexación, verifiquemos si toda nuestra evidencia se almacenó correctamente en Elasticsearch. Puedes usar las herramientas de desarrollo de Kibana para ejecutar algunas consultas de verificación:

1. Primero, verifique si se creó el índice:

2. Luego, verifique el recuento de documentos por modalidad:

3. Finalmente, examine la estructura del documento indexado:

Resultados esperados:

  • Debe existir un índice denominado 'multimodal_content'.
  • Alrededor de 7 documentos distribuidos en diferentes modalidades (visión, audio, texto, profundidad).
  • Cada documento debe contener: incrustación, modalidad, descripción, metadatos y campos content_path.

Este paso de verificación garantiza que nuestra base de datos de evidencia esté configurada correctamente antes de proceder con las búsquedas de similitud.

Búsqueda de evidencia similar en Elasticsearch

Ahora que la evidencia fue indexada, podemos realizar búsquedas para encontrar los registros más similares a una nueva pista. Esta búsqueda emplea la similitud vectorial para devolver los registros más cercanos en el espacio de incrustación.

El código siguiente realiza esta búsqueda.

Prueba de la búsqueda: uso de audio como consulta para resultados multimodales

Ahora, probemos la búsqueda de evidencia empleando un archivo de audio sospechoso. Necesitamos generar una incrustación para el archivo de la misma manera y buscar incrustaciones similares:

Salida esperada en el terminal:

Ahora, podemos analizar la evidencia recuperada y determinar su relevancia para el caso.

Más allá del audio: exploración de búsquedas multimodales

Invertir los roles: cualquier modalidad puede ser una "pregunta"

En nuestro sistema RAG multimodal , cada modalidad es una consulta de búsqueda potencial. Vayamos más allá del ejemplo de audio y exploremos cómo otros tipos de datos pueden iniciar investigaciones.

1. Búsqueda por texto (descifrar la nota del criminal)

Escenario: Encontró un mensaje de texto cifrado y desea encontrar evidencia relacionada.

Resultados esperados:

2. Búsqueda de imágenes (seguimiento de la escena del crimen sospechosa)

Escenario: Una nueva escena del crimen (crime_scene2.jpg) debe comparar con otras pruebas.

Salida:

3. Búsqueda de mapas de profundidad (búsqueda 3D)

Escenario: Un mapa jdancing-depth.png de profundidad () revela patrones de escape de imágenes.

Salida

¿Por qué importa esto?

Cada modalidad revela conexiones únicas:

  • Texto → Patrones lingüísticos del sospechoso.
  • Imágenes → Reconocimiento de ubicaciones y objetos.
  • Reconstrucción de escenas en profundidad → 3D .

Ahora, tenemos una base de datos de evidencia estructurada en Elasticsearch, lo que nos permite almacenar y recuperar evidencia multimodal de manera eficiente.

Resumen de lo que hicimos:

  • Incrustaciones multimodales almacenadas en Elasticsearch.
  • Realizó búsquedas de similitud, encontrando evidencia relacionada con nuevas pistas.
  • Probó la búsqueda empleando un archivo de audio sospechoso, cerciorar de que el sistema funcione correctamente.

Siguiente paso: Emplearemos un LLM (Large Language Model) para analizar la evidencia recuperada y generar un reporte final.

Etapa 4 - Conectando los puntos con el LLM

Ahora que la evidencia fue indexada en Elasticsearch y se puede recuperar por similitud, necesitamos un LLM (Large Language Model) para analizarla y generar un reporte final para enviar al Comisionado Gordon. El LLM será responsable de identificar patrones, conectar pistas y sugerir un posible sospechoso en función de la evidencia recuperada.

Para esta tarea, usaremos GPT-4 Turbo, formulando un aviso detallado para que el modelo pueda interpretar los resultados de manera eficiente.

Integración de LLM

Para integrar el LLM en nuestro sistema, creamos la clase LLMAnalyzer (src/llm_analyzer.py), que recibe la evidencia recuperada de Elasticsearch y genera un informe forense empleando esta evidencia como contexto de solicitud.

Ajuste de temperatura en el análisis LLM:

Para nuestro sistema de análisis forense, empleamos una temperatura moderada de 0,5. Se eligió esta configuración equilibrada porque:

  • Representa un término medio entre las salidas deterministas (demasiado rígidas) y las altamente aleatorias;
  • A 0,5, el modelo mantiene suficiente estructura para proporcionar conclusiones forenses lógicas y justificables;
  • Esta configuración permite que el modelo identifique patrones y establezca conexiones mientras se mantiene dentro de parámetros razonables de análisis forense;
  • Equilibra la necesidad de resultados consistentes y confiables con la capacidad de generar análisis perspicaces.

Este ajuste moderado de temperatura ayuda a garantizar que nuestro análisis forense sea confiable y perspicaz, evitando conclusiones demasiado rígidas y demasiado especulativas.

Ejecución del análisis de evidencia

Ahora que tenemos la integración de LLM, necesitamos un script que conecte todos los componentes del sistema. Este script:

  • Busca evidencia similar en Elasticsearch.
  • Analice la evidencia recuperada empleando el LLM para generar un reporte final.

Código: Script de análisis de evidencia

Salida esperada de LLM

Conclusión: Caso resuelto

Con todas las pistas recopiladas y analizadas, el sistema RAG multimodal identificó a un sospechoso: The Joker.

Al combinar imágenes, audio, texto y mapas de profundidad en un espacio vectorial compartido usando ImageBind, el sistema pudo detectar conexiones que fueron imposibles de identificar manualmente. Elasticsearch garantizó búsquedas rápidas y eficientes, mientras que el LLM sintetizó la evidencia en un reporte claro y concluyente.

Sin embargo, el verdadero poder de este sistema va más allá de Gotham City. La arquitectura RAG multimodal abre las puertas a numerosas aplicaciones del mundo real:

  • Vigilancia urbana: Identificación de sospechosos en función de imágenes, audio y datos de sensores.
  • Análisis forense: Correlacionar evidencia de múltiples fuentes para resolver crímenes complejos.
  • Recomendación multimedia: Crear sistemas de recomendación que comprendan contextos multimodales (por ejemplo, sugerir música basada en imágenes o texto).
  • Tendencias en redes sociales: Detección de temas de tendencia en diferentes formatos de datos.

Ahora que aprendió a construir un sistema RAG multimodal, ¿por qué no probarlo con sus propias pistas?

¡Comparte tus descubrimientos con nosotros y ayuda a la comunidad a avanzar en el campo de la IA multimodal!

Agradecimientos especiales

Me gustaría agradecer a Adrian Cole por su valiosa contribución y revisión durante el proceso de definición de la arquitectura de implementación de este código.

Referencias

Preguntas frecuentes

¿Qué es un RAG multimodal?

El RAG multimodal es un método que permite a los sistemas de IA combinar información de diferentes formatos (como imágenes, videos y audio) para obtener respuestas más ricas y precisas.

¿Cómo implementar el GAR multimodal?

Para implementar un RAG multimodal, se emplean comúnmente tres estrategias: espacio vectorial compartido, modalidad de conexión a tierra única y recuperación separada

¿Te ha sido útil este contenido?

No es útil

Algo útil

Muy útil

Contenido relacionado

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo