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

 
 
 

Contributors

Languages