Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiscoGPT

Python PyTorch License Status

Un modelo GPT simplificado implementado desde cero en PyTorch, inspirado en la arquitectura Transformer. Este proyecto implementa un modelo de lenguaje basado en caracteres capaz de generar texto después de entrenarse en un corpus.

📚 Código de referencia del libro "el MOTOR de la INTELIGENCIA ARTIFICIAL" de Joaquín Ruiz Lite Compra Ahora Este proyecto sirve como implementación práctica de los conceptos explicados en el libro.

📋 Descripción

MiscoGPT es una implementación educativa de un modelo tipo GPT que incluye:

  • Arquitectura Transformer: Con mecanismos de atención multi-cabezal
  • Tokenización por caracteres: Sistema simple de tokenización a nivel de carácter
  • Entrenamiento desde cero: Script completo de entrenamiento con validación
  • Generación de texto: Capacidad de generar texto nuevo basado en el modelo entrenado

🏗️ Arquitectura

El modelo implementa los siguientes componentes:

  • Head: Cabezal de auto-atención individual
  • MultiHeadAttention: Atención multi-cabezal paralela
  • FeedForward: Red neuronal feed-forward
  • Block: Bloque Transformer completo (atención + feed-forward)
  • MiscoGPT: Modelo completo con embeddings y capas apiladas

Hiperparámetros por defecto

batch_size = 64        # Tamaño del lote
block_size = 256       # Longitud de contexto
max_iters = 5000       # Iteraciones de entrenamiento
learning_rate = 3e-4   # Tasa de aprendizaje
n_embd = 384           # Dimensión de embeddings
n_head = 6             # Número de cabezales de atención
n_layer = 6            # Número de capas Transformer

📦 Requisitos

torch

🚀 Instalación

  1. Clona el repositorio o descarga los archivos:
git clone <tu-repositorio>
cd miscogpt
  1. Instala las dependencias:
pip install -r requirements.txt
  1. Asegúrate de tener un archivo input.txt con el texto de entrenamiento.

📖 Uso

1. Preparar datos

Coloca tu corpus de texto en un archivo llamado input.txt en el directorio raíz. El modelo aprenderá de este texto.

Ejemplo de contenido:

  • Obras literarias (Labordeta, Shakespeare, Cervantes, etc.)
  • Cualquier texto en español o inglés
  • Código fuente
  • Cualquier corpus de texto que desees que el modelo aprenda

2. Entrenar el modelo

Ejecuta el script de entrenamiento:

python train.py

Durante el entrenamiento verás:

Usando dispositivo: cuda
Vocabulario: 87 caracteres
Paso 0: Train Loss 4.5234, Val Loss 4.5123
Paso 500: Train Loss 2.1234, Val Loss 2.3456
...
Paso 4500: Train Loss 1.0234, Val Loss 1.2456
Entrenamiento finalizado.
Modelo guardado en misco_gpt.pt

Proceso de entrenamiento:

  • Carga el archivo input.txt
  • Tokeniza el texto a nivel de caracteres
  • Divide los datos en entrenamiento (90%) y validación (10%)
  • Entrena el modelo durante 5000 iteraciones
  • Evalúa la pérdida cada 500 pasos
  • Guarda el modelo entrenado en misco_gpt.pt

3. Generar texto

Una vez entrenado el modelo, genera texto nuevo:

python generate.py

Salida esperada:

Modelo cargado exitosamente.

--- Generando texto estilo Labordeta/Cervantes/Shakespeare ---

[Texto generado por el modelo...]

El script genera 500 caracteres de texto nuevo basándose en lo aprendido durante el entrenamiento.

📁 Estructura del Proyecto

miscogpt/
├── model.py          # Definición de la arquitectura del modelo
├── train.py          # Script de entrenamiento
├── generate.py       # Script de generación de texto
├── requirements.txt  # Dependencias del proyecto
├── input.txt         # Corpus de entrenamiento (no incluido)
└── misco_gpt.pt     # Modelo entrenado (generado después del entrenamiento)

🔧 Personalización

Modificar hiperparámetros

Edita train.py para ajustar los hiperparámetros:

batch_size = 64        # Aumenta para más estabilidad (requiere más memoria)
block_size = 256       # Aumenta para más contexto
max_iters = 5000       # Aumenta para más entrenamiento
learning_rate = 3e-4   # Ajusta si el modelo no converge
n_embd = 384           # Aumenta para mayor capacidad
n_head = 6             # Debe dividir a n_embd
n_layer = 6            # Aumenta para modelos más profundos

⚠️ Importante: Si modificas los hiperparámetros en train.py, debes actualizar los mismos valores en generate.py:

block_size = 256
n_embd = 384
n_head = 6
n_layer = 6

Generar más o menos texto

En generate.py, modifica el parámetro max_new_tokens:

generated_ids = model.generate(context, max_new_tokens=1000)  # Para generar 1000 caracteres

Proporcionar contexto inicial

Modifica la inicialización del contexto en generate.py:

# En lugar de empezar desde cero:
prompt = "En un lugar de la Mancha"
context = torch.tensor([encode(prompt)], dtype=torch.long, device=device)

🎯 Casos de Uso

  1. Aprendizaje: Entender la arquitectura Transformer desde cero
  2. Generación de texto: Crear texto en el estilo de un autor específico
  3. Experimentación: Probar diferentes hiperparámetros y arquitecturas
  4. Investigación: Base para proyectos más complejos de NLP

🐛 Solución de Problemas

Error: No se encuentra 'misco_gpt.pt'

Solución: Ejecuta python train.py primero para entrenar y guardar el modelo.

Error: CUDA out of memory

Solución: Reduce batch_size o n_embd en train.py, o usa CPU cambiando:

device = 'cpu'

El texto generado no tiene sentido

Solución:

  • Aumenta max_iters para entrenar más tiempo
  • Verifica que la loss de validación esté bajando
  • Asegúrate de tener suficiente texto de entrenamiento (mínimo 100KB recomendado)

Incompatibilidad de dimensiones

Solución: Verifica que los hiperparámetros en train.py y generate.py sean idénticos.

📊 Rendimiento

El rendimiento depende de:

  • Hardware: GPU recomendada (CUDA), CPU funciona pero es más lento
  • Tamaño del corpus: Más texto = mejor aprendizaje
  • Hiperparámetros: Modelos más grandes aprenden mejor pero son más lentos

Tiempos estimados (GPU NVIDIA RTX 3080):

  • Entrenamiento completo: ~5-10 minutos
  • Generación de 500 tokens: ~1-2 segundos

🤝 Contribuciones

Este es un proyecto educativo. Siéntete libre de:

  • Experimentar con diferentes arquitecturas
  • Agregar características nuevas (dropout, temperature sampling, etc.)
  • Mejorar la tokenización (usar BPE o WordPiece)
  • Implementar beam search o nucleus sampling

📝 Licencia

Este proyecto es de código abierto y está disponible para fines educativos.

📖 Libro de Referencia

Este código es la implementación de referencia para el libro:

"el MOTOR de la INTELIGENCIA ARTIFICIAL" Autor: Joaquín Ruiz Lite Ver más El libro explica de manera detallada los fundamentos de los modelos de lenguaje y la arquitectura Transformer, utilizando este código como ejemplo práctico para comprender cómo funcionan las redes neuronales que impulsan la inteligencia artificial moderna.

🙏 Agradecimientos

Inspirado en:

  • Libro "el MOTOR de la INTELIGENCIA ARTIFICIAL" de Joaquín Ruiz Lite Compra Ahora
  • "Attention Is All You Need" (Vaswani et al., 2017)
  • Proyecto nanoGPT de Andrej Karpathy
  • Arquitectura GPT de OpenAI

📚 Referencias


¡Feliz entrenamiento! 🚀

About

Un modelo GPT simplificado implementado desde cero en PyTorch, inspirado en la arquitectura Transformer. Es el código de referencia del libro "el MOTOR de la INTELIGENCIA ARTIFICIAL" de Joaquín Ruiz Lite. Este proyecto sirve como implementación práctica de los conceptos explicados en el libro.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages