top of page
HRS Blog.png

Mantente informado con nuestro boletín semanal

Recibe las últimas publicaciones de nuestro blog, consejos exclusivos diseñados para potenciar tu presencia online y las novedades más relevantes del mundo del SEO y el marketing digital, todo directamente en tu bandeja de entrada. Mantente actualizado y no te pierdas ninguna oportunidad para optimizar tus proyectos. ¡Es fácil, rápido y gratuito!

Recibe nuestro mejor contenido

Foto del escritorKevin Anderson

¿Cómo Implementar un Sistema Multimodal RAG con Python?

La inteligencia artificial multimodal está transformando la forma en que procesamos y analizamos datos. En esta guía, exploraremos cómo desarrollar un sistema de Generación Aumentada por Recuperación (RAG) multimodal, capaz de trabajar con texto, imágenes y otros formatos. Combinaremos conceptos fundamentales con ejemplos prácticos en Python, optimizados para principiantes y expertos.


Tabla de contenidos


Cómo Implementar un Sistema Multimodal RAG con Python
Cómo Implementar un Sistema Multimodal RAG con Python

¿Qué es RAG?

La Generación Aumentada por Recuperación (RAG) mejora las respuestas de los modelos de lenguaje al proporcionarles un contexto relevante de forma dinámica. Por ejemplo, si necesitas recordar un dato específico de una reunión reciente, un sistema RAG puede buscar automáticamente en las transcripciones para proporcionar la información adecuada.


¿Qué es RAG?
¿Qué es RAG? - Towards Data Science

¿Qué es RAG Multimodal?

El sistema RAG estándar utiliza solo texto como entrada y contexto. Sin embargo, RAG Multimodal (MRAG) amplía esta capacidad, permitiendo procesar datos como imágenes, gráficos, audio y videos. Esto permite análisis más ricos e inferencias más sofisticadas.


¿Qué es RAG Multimodal? - Towards Data Science
¿Qué es RAG Multimodal? - Towards Data Science

Casos de Uso de MRAG

  • Asistentes virtuales enriquecidos: Analizan texto, imágenes y gestos en videollamadas.

  • Investigación médica: Combinan datos textuales con imágenes de resonancias o gráficos de laboratorio.

  • Análisis empresarial: Integran tablas, presentaciones y transcripciones.


Niveles de Implementación de MRAG

Los sistemas MRAG pueden implementarse en tres niveles principales:


Nivel 1: Traducir modalidades a texto

  • Descripción: Convierte datos no textuales (grabaciones, imágenes, tablas) en texto legible para incluirlos en una base de conocimiento.

  • Ventajas: Fácil de implementar, no requiere modelos avanzados.

  • Limitaciones: Puede perder detalles críticos al traducir imágenes o gráficos a texto.


MRAG: Nivel 1
MRAG: Nivel 1 Traducir modalidades a texto

Nivel 2: Recuperación basada en texto + Modelos LLM Multimodales (MLLM)

  • Descripción: Utiliza descripciones textuales para la recuperación, pero procesa el contenido original con un modelo multimodal como GPT-4 Vision.

  • Ventajas: Conserva la riqueza de los datos originales.

  • Limitaciones: Requiere un modelo multimodal avanzado.


MRAG: Nivel 2
MRAG: Nivel 2 Recuperación basada en texto + Modelos LLM Multimodales (MLLM)

Nivel 3: Recuperación multimodal + MLLM

  • Descripción: Utiliza embeddings multimodales para realizar búsquedas en un espacio vectorial compartido por texto e imágenes.

  • Ventajas: Ofrece búsquedas precisas y resultados optimizados.

  • Limitaciones: Mayor complejidad en el entrenamiento y la infraestructura.


MRAG: Nivel 3 Recuperación multimodal + MLLM
MRAG: Nivel 3 Recuperación multimodal + MLLM

Implementación de un Sistema MRAG en Python

A continuación, veremos cómo construir un sistema básico de MRAG que responde preguntas utilizando texto e imágenes.


Paso 1: Preparar Datos y Librerías

Cargamos fragmentos de texto, imágenes y sus embeddings preprocesados con un modelo como CLIP.

# Importar librerías necesarias
import json
from transformers import CLIPProcessor, CLIPTextModelWithProjection
from torch import load

# Cargar datos textuales e imágenes
with open('data/text_content.json', 'r', encoding='utf-8') as f:
    text_content_list = json.load(f)

with open('data/image_content.json', 'r', encoding='utf-8') as f:
    image_content_list = json.load(f)

# Cargar embeddings multimodales
text_embeddings = load('data/text_embeddings.pt')
image_embeddings = load('data/image_embeddings.pt')

Esto asegura que tenemos una base de datos lista para realizar búsquedas.


Paso 2: Realizar Búsqueda Vectorial

Convertimos la consulta del usuario en un embedding y calculamos similitudes con los datos de texto e imágenes.

# Generar embedding para la consulta
query = "¿Qué es la función de pérdida contrastiva en CLIP?"
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch16")
model = CLIPTextModelWithProjection.from_pretrained("openai/clip-vit-base-patch16")

inputs = processor(text=[query], return_tensors="pt", padding=True)
query_embed = model(**inputs).text_embeds

# Calcular similitudes y ordenar resultados
from torch import matmul, argsort
from torch.nn.functional import softmax

# Similitudes para texto
text_similarities = matmul(query_embed, text_embeddings.T)
text_scores = softmax(text_similarities / 0.25, dim=1)
sorted_indices = argsort(text_scores, descending=True)[0][:5]
top_text_results = [text_content_list[i] for i in sorted_indices]

# Similitudes para imágenes
image_similarities = matmul(query_embed, image_embeddings.T)
image_scores = softmax(image_similarities / 0.25, dim=1)
sorted_indices_images = argsort(image_scores, descending=True)[0][:5]
top_image_results = [image_content_list[i] for i in sorted_indices_images]

print(top_text_results)
print(top_image_results)

Paso 3: Generar Respuesta con MLLM

Con los resultados relevantes, creamos un prompt para un modelo multimodal como GPT-4 Vision o LLaMA.


# Crear el prompt con texto e imágenes
text_context = "\n".join(
    f"Título: {text['article_title']}\nSección: {text['section']}\nContenido: {text['text']}\n"
    for text in top_text_results
)

image_context = "\n".join(
    f"Título: {image['article_title']}\nSección: {image['section']}\nRuta: {image['image_path']}\n"
    for image in top_image_results
)

prompt = f"""
Consulta: {query}
Fragmentos textuales:
{text_context}

Fragmentos de imágenes:
{image_context}

Por favor, genera una respuesta precisa basada en la información proporcionada.
"""

Enviamos este prompt al modelo MLLM:

import ollama

response = ollama.chat(
    model='llama3.2-vision',
    messages=[{'role': 'user', 'content': prompt}]
)

print(response['message']['content'])

El modelo utiliza tanto texto como imágenes para generar una respuesta concisa y bien fundamentada.


Conclusión

Los sistemas MRAG representan una evolución significativa en la inteligencia artificial, permitiendo combinar datos en diversos formatos para aplicaciones avanzadas. Aunque este ejemplo cubre los fundamentos, las posibilidades son prácticamente ilimitadas con optimizaciones adicionales como:


  • Uso de rerankers para refinar los resultados.

  • Entrenamiento de embeddings personalizados para dominios específicos.

  • Integración con herramientas de visualización y análisis.




Contacta con House of the rising SEO
¡Contáctanos!

Este enfoque puede aplicarse en investigación, educación, medicina y más. Si deseas explorar implementaciones avanzadas o compartir tus ideas, ¡déjanos un comentario!

bottom of page