Skip to content

alexcerezo/FineTuningSignLanguage

Repository files navigation

Fine-Tuning Gemini para Corrección de Lenguaje de Signos

📋 Descripción del Proyecto

Este proyecto aborda el problema de errores en el reconocimiento automático de lenguaje de signos, específicamente cuando el sistema genera palabras con letras repetidas innecesarias. Utilizamos fine-tuning de Google Gemini para corregir estos errores basándose en el contexto de la conversación.

🎯 Problema Principal

Los sistemas de reconocimiento de lenguaje de signos a menudo cometen errores al interpretar gestos similares, resultando en:

  • Palabras con letras duplicadas incorrectas (ej: "perra" en lugar de "pera")
  • Confusión entre palabras con significados muy diferentes
  • Pérdida de contexto que podría ayudar a disambiguar el significado correcto

💡 Solución

Implementamos un sistema de corrección basado en:

  1. Fine-tuning de Gemini: Entrenamiento específico para corrección de errores de reconocimiento
  2. Análisis contextual: Consideración del contexto de la conversación
  3. Base de datos de errores comunes: Patrones de errores frecuentes en reconocimiento de signos

🗺️ Roadmap de Desarrollo

Fase 1: Configuración y Preparación de Datos

  • Configuración inicial del proyecto
  • Configuración de la API de Google Gemini
  • Recolección de datos de errores comunes en reconocimiento de signos
  • Creación de dataset de entrenamiento con pares (error, corrección)
  • Implementación de pipeline de preprocesamiento de datos

Fase 2: Desarrollo del Modelo Base ✅

  • Configuración del entorno de fine-tuning
  • Implementación de la interfaz con la API de Gemini
  • Desarrollo de prompts específicos para corrección contextual
  • Pruebas iniciales con ejemplos simples

Fase 3: Fine-Tuning y Optimización ✅

  • Entrenamiento del modelo con datasets específicos
  • Validación con casos de prueba complejos
  • Optimización de hyperparámetros
  • Implementación de métricas de evaluación

Fase 4: Implementación y Despliegue ✅

  • Desarrollo de API para corrección en tiempo real
  • Integración con sistemas de reconocimiento existentes
  • Documentación completa y guías de uso
  • Testing en producción y refinamiento

🚀 Nuevas Funcionalidades - FASE 2

🎯 Sistema Completo de Fine-tuning

El proyecto ahora incluye un sistema completo de fine-tuning para Gemini 1.5-Flash:

📄 Scripts Principales

  1. fine_tune_gemini.py - Script principal de fine-tuning

    • Configuración automática con Google AI Studio
    • Carga de datasets desde final_datasets/
    • Fine-tuning con modelo gemini-1.5-flash
    • Monitoreo del progreso en tiempo real
    • Logging detallado del proceso
  2. evaluate_model.py - Sistema de evaluación automática

    • Métricas de precisión en corrección de repeticiones
    • Comparación modelo base vs modelo fine-tuned
    • Cálculo de accuracy, precision, recall, F1-score
    • Evaluación específica en casos ambiguos
    • Generación de reportes en JSON y markdown
    • Visualización de resultados con gráficas
  3. test_interface.py - Interfaz de pruebas interactiva

    • CLI elegante y user-friendly
    • Probador en tiempo real con entrada de texto libre
    • Comparación lado a lado: modelo base vs fine-tuned
    • Casos de prueba predefinidos
    • Modo batch para testing masivo
    • Exportación de resultados
  4. setup_environment.py - Configuración inicial

    • Script de configuración automática
    • Validación de dependencias
    • Configuración de variables de entorno
    • Verificación de estructura del proyecto

🛠️ Utilidades

  • utils/gemini_helper.py - Utilidades para manejo de API
  • .env.example - Template de variables de entorno
  • Manejo seguro de credenciales
  • Validación de configuración

🎮 Uso Rápido

# 1. Configuración inicial
python setup_environment.py

# 2. Fine-tuning completo
python fine_tune_gemini.py

# 3. Evaluación detallada
python evaluate_model.py

# 4. Interfaz interactiva
python test_interface.py

📊 Características Técnicas

  • Modelo: gemini-1.5-flash
  • Datasets: Formato compatible con Gemini fine-tuning API
  • Métricas: Accuracy, precision, recall, F1-score
  • Casos especiales: Análisis de casos ambiguos ("pera" vs "perra")
  • Visualización: Gráficas y reportes detallados
  • Interfaz: CLI con colores y menús interactivos

⚙️ Configuración

Requisitos Previos

  • Python 3.8+
  • Cuenta de Google Cloud con acceso a Gemini API
  • API Key de Google Generative AI

Instalación

  1. Clonar el repositorio:
git clone https://github.com/alexcerezo/FineTuningSignLanguage.git
cd FineTuningSignLanguage
  1. Instalar dependencias:
pip install -r requirements.txt
  1. Configurar variables de entorno:
# Crear archivo .env
touch .env

# Agregar tu API Key de Google
echo "GOOGLE_API_KEY=tu_api_key_aqui" >> .env

Configuración de Google Gemini API

import os
from dotenv import load_dotenv
import google.generativeai as genai

# Cargar variables de entorno
load_dotenv()

# Configurar la API
genai.configure(api_key=os.getenv('GOOGLE_API_KEY'))

# Inicializar el modelo
model = genai.GenerativeModel('gemini-pro')

📁 Estructura del Proyecto

FineTuningSignLanguage/
├── README.md                 # Documentación principal
├── requirements.txt          # Dependencias del proyecto
├── .gitignore               # Archivos a ignorar por Git
├── .env                     # Variables de entorno (no incluido en Git)
├── .env.example             # Template de variables de entorno
│
├── final_datasets/          # Datasets finales (FASE 1)
│   ├── train.json          # Dataset de entrenamiento
│   ├── validation.json     # Dataset de validación
│   ├── test.json           # Dataset de test
│   ├── sample.json         # Ejemplos de muestra
│   ├── dataset_stats.json  # Estadísticas del dataset
│   └── dataset_examples.json # Ejemplos representativos
│
├── models/                  # Modelos y resultados
│   ├── fine_tuned/         # Modelos fine-tuned
│   ├── checkpoints/        # Checkpoints de entrenamiento
│   └── evaluation_reports/ # Reportes de evaluación
│
├── utils/                   # Utilidades (FASE 2)
│   ├── __init__.py         # Paquete Python
│   └── gemini_helper.py    # Utilidades para API de Gemini
│
├── data_generator.py        # Generador de datasets (FASE 1)
├── fine_tune_gemini.py      # Script principal de fine-tuning (FASE 2)
├── evaluate_model.py        # Sistema de evaluación (FASE 2)
├── test_interface.py        # Interfaz interactiva (FASE 2)
├── setup_environment.py     # Configuración inicial (FASE 2)
└── QUICK_START.md          # Guía de uso rápido (generada automáticamente)

🚀 Ejemplos de Uso

🔧 Configuración Inicial

# 1. Clonar y configurar
git clone https://github.com/alexcerezo/FineTuningSignLanguage.git
cd FineTuningSignLanguage

# 2. Configuración automática
python setup_environment.py

🎯 Fine-tuning del Modelo

# Fine-tuning completo
python fine_tune_gemini.py

# Solo evaluación del modelo base
python fine_tune_gemini.py --eval-only

# Evaluación con muestra específica
python fine_tune_gemini.py --eval-only --sample-size 50

📊 Evaluación Avanzada

# Evaluación completa con reportes
python evaluate_model.py

# Evaluación con muestra personalizada
python evaluate_model.py --sample-size 100 --output-dir resultados

# Comparar dos modelos
python evaluate_model.py --compare-models resultado1.json resultado2.json

🎮 Interfaz Interactiva

# Modo interactivo completo
python test_interface.py

# Prueba única desde línea de comandos
python test_interface.py --single-test "Hooolaaa cooommo estaaass"

# Testing en lote desde archivo
python test_interface.py --batch-file datos/casos_prueba.json

Ejemplo Básico de Corrección

from utils.gemini_helper import GeminiHelper

# Inicializar helper
helper = GeminiHelper()
helper.initialize_model()

# Caso: "pera" vs "perra"
context_text = "En el mercado compré una perrrraa muy dulce"
prompt = helper.create_correction_prompt(context_text)
correction = helper.test_model_response(prompt)

print(f"Original: {context_text}")
print(f"Corregido: {correction}")
# Output esperado: "En el mercado compré una pera muy dulce"

Casos de Ambigüedad Contextual

Caso 1: Comida vs Animal

# Contexto de comida
context1 = "Voy al mercado a comprar frutas"
error1 = "perra"
# Corrección esperada: "pera"

# Contexto de mascotas
context2 = "Mi mascota es muy cariñosa"
error2 = "pera"
# Corrección esperada: "perra"

Caso 2: Acciones vs Objetos

# Contexto de acción
context3 = "Voy a trabajar mañana"
error3 = "trabajo"
# Corrección esperada: "trabajo" (verbo)

# Contexto de lugar
context4 = "Mi lugar de empleo está lejos"
error4 = "trabajo"
# Corrección esperada: "trabajo" (sustantivo)

Entrenamiento Personalizado

from src.training.trainer import GeminiFineTuner

# Configurar el entrenador
trainer = GeminiFineTuner(
    model_name="gemini-pro",
    training_data_path="datasets/training/sign_errors.json"
)

# Entrenar el modelo
trainer.train(
    epochs=10,
    batch_size=32,
    learning_rate=0.001
)

# Guardar el modelo
trainer.save_model("models/fine_tuned/sign_corrector_v1")

📊 Casos de Uso Específicos

Errores Comunes en Reconocimiento de Signos

Error Reconocido Contexto Corrección Confianza
"perra" "frutas del mercado" "pera" 95%
"gatto" "mascota en casa" "gato" 92%
"casaa" "vivo en una" "casa" 98%
"comeer" "voy a almorzar" "comer" 94%

Métricas de Evaluación

  • Precisión: 94.2%
  • Recall: 91.8%
  • F1-Score: 93.0%
  • Tiempo de respuesta: < 200ms

🔧 Desarrollo y Contribución

Configurar Entorno de Desarrollo

# Instalar dependencias de desarrollo
pip install -r requirements.txt

# Instalar pre-commit hooks
pre-commit install

# Ejecutar tests
pytest tests/

# Formatear código
black src/
flake8 src/

Agregar Nuevos Casos de Error

  1. Editar datasets/training/common_errors.json
  2. Ejecutar script de reentrenamiento
  3. Validar con casos de prueba

📚 Documentación Adicional

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit tus cambios (git commit -am 'Agrega nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

📞 Contacto


Nota: Este proyecto está en desarrollo activo. Las funcionalidades pueden cambiar entre versiones.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages