El análisis y curación manual de conjuntos de datos multimodales, compuestos por imágenes y sus descripciones textuales, es un proceso extremadamente tedioso y propenso a errores. Los investigadores y científicos de datos a menudo necesitan una forma eficiente y privada para evaluar la coherencia de estos pares antes de su uso en tareas de entrenamiento o análisis.
Este artículo presenta la implementación de una herramienta local basada en el modelo de lenguaje multimodal GME-Qwen2-VL-2B-Instruct. La solución calcula la puntuación de similitud entre una imagen y múltiples descripciones textuales candidatas, ordenándolas por relevancia. Un hallazgo crítico en su desarrollo fue que invocar el modelo directamente sin instrucciones específicas producía puntuaciones poco fiables. La corrección consistió en preprocesar el texto con un prompt orientado a la tarea (Find an image that matches the given text.) y configurar explícitamente el parámetro is_query=False al procesar la imagen, alineando así el modelo con su modo de funcionamiento óptimo para la búsqueda por similitud.
Características Principales
- Ejecución Local Completa: Todos los cálculos se realizan en el equipo local, garantizando la privacidad de los datos sensibles.
- Interfaz Gráfica Simple: Utiliza Streamlit para crear una interfaz web donde se puede cargar una imagen y pegar texto sin escribir código.
- Optimización para GPU de Consumo: Emplea precisión FP16 para reducir el uso de memoria VRAM y acelerar la inferencia.
- Visualización Clara: Muestra los resultados en una lista ordenada con barras de progreso normalizadas para una interpretación visual rápida.
Guía de Implementación y Uso
La configuración requiere un entorno con Python y una GPU con al menos 8GB de VRAM para un rendimiento adecuado.
Instalación
Clona el repositorio del proyecto e instala las dependencias listadas en el archivo requirements.txt utilizando el gestor de paquetes pip.
pip install -r requirements.txt
Lanzamiento de la Aplicación
Ejecuta el siguiente comando desde el directorio raíz del poryecto para iniciar el servidor de la aplicación web.
streamlit run application.py
La aplicación se abrirá en el navegador. El modelo se cargará automáticamente desde un repositorio en línea en el primer uso.
Proceso de Validación en la Interfaz
- Carga de Imagen: Utiliza el botón para seleccionar un archivo de imagen (JPG, PNG) de tu sistema local. La vista previa se mostrará en el panel izquierdo.
- Entrada de Textos: En el área de texto, introduce las descripciones candidatas, una por línea. Las líneas vacías se ignorarán automáticamente.
- Obtención de Resultados: Al pulsar el botón de cálculo, la herramienta procesará la solicitud y devolverá las descripciones ordenadas por su puntuación de similitud, de mayor a menor.
La puntuación se interpreta de la siguiente manera: valores superiores a 0.3 indican una alta correspondencia, entre 0.1 y 0.3 una correspondencia moderada, y por debajo de 0.1 una baja correspondencia o irrelevancia.
Integración en Flujos de Trabajo
Para el procesamiento por lotes, es posible automatizar la evaluación mediante un script. El siguiente ejemplo ilustra cómo recorrer un conjunto de imágenes y archivos de texto asociados, calculando la similitud para cada par.
import os
from pathlib import Path
from gme_evaluator import compute_cosine_similarity
def evaluate_dataset(image_dir, text_dir, output_file):
with open(output_file, 'w') as report:
for img_path in Path(image_dir).glob('*.jpg'):
txt_path = Path(text_dir) / (img_path.stem + '.txt')
if not txt_path.exists():
continue
with open(txt_path, 'r', encoding='utf-8') as f:
text_candidates = [line.strip() for line in f if line.strip()]
scores = compute_cosine_similarity(str(img_path), text_candidates)
best_match_idx = scores.index(max(scores))
report.write(f"{img_path.name}\t{txt_path.name}\t{best_match_idx}\t{scores[best_match_idx]:.4f}\n")
# Ejemplo de uso
evaluate_dataset(
image_dir='./data/raw_images',
text_dir='./data/candidate_texts',
output_file='./validation_report.tsv'
)
Este script genera un informe en formato TSV que identifica para cada imagen el índice de la descripción más similar y su puntuación, facilitando el filtrado automático de pares de baja calidad.
Aplicaciones Adicionales
- Filtrado de Datos para Entrenamiento: Puedes usar este método para limpiar datasets destinados a modelos de generación de imágenes a partir de texto (text-to-image) o descripción de imágenes.
- Moderación de Contenido: Detectar discrepancias graves entre imágenes y títulos/subtítulos en plataformas de contenido.
- Sistemas de Búsqueda por Contenido: Funcionar como un componente de ranking para sistemas de búsqueda de imágenes basados en consultas de texto.