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.
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
Implementamos un sistema de corrección basado en:
- Fine-tuning de Gemini: Entrenamiento específico para corrección de errores de reconocimiento
- Análisis contextual: Consideración del contexto de la conversación
- Base de datos de errores comunes: Patrones de errores frecuentes en reconocimiento de signos
- 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
- 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
- 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
- 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
El proyecto ahora incluye un sistema completo de fine-tuning para Gemini 1.5-Flash:
-
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
-
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
-
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
-
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
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
# 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- 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
- Python 3.8+
- Cuenta de Google Cloud con acceso a Gemini API
- API Key de Google Generative AI
- Clonar el repositorio:
git clone https://github.com/alexcerezo/FineTuningSignLanguage.git
cd FineTuningSignLanguage- Instalar dependencias:
pip install -r requirements.txt- Configurar variables de entorno:
# Crear archivo .env
touch .env
# Agregar tu API Key de Google
echo "GOOGLE_API_KEY=tu_api_key_aqui" >> .envimport 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')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)
# 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 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 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# 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.jsonfrom 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"# 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"# 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)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")| 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% |
- Precisión: 94.2%
- Recall: 91.8%
- F1-Score: 93.0%
- Tiempo de respuesta: < 200ms
# 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/- Editar
datasets/training/common_errors.json - Ejecutar script de reentrenamiento
- Validar con casos de prueba
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agrega nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
- Autor: Alex Cerezo
- Email: [tu-email@ejemplo.com]
- GitHub: @alexcerezo
Nota: Este proyecto está en desarrollo activo. Las funcionalidades pueden cambiar entre versiones.