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.
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
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
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 Transformertorch
- Clona el repositorio o descarga los archivos:
git clone <tu-repositorio>
cd miscogpt- Instala las dependencias:
pip install -r requirements.txt- Asegúrate de tener un archivo
input.txtcon el texto de entrenamiento.
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
Ejecuta el script de entrenamiento:
python train.pyDurante 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
Una vez entrenado el modelo, genera texto nuevo:
python generate.pySalida 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.
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)
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 profundosblock_size = 256
n_embd = 384
n_head = 6
n_layer = 6En generate.py, modifica el parámetro max_new_tokens:
generated_ids = model.generate(context, max_new_tokens=1000) # Para generar 1000 caracteresModifica 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)- Aprendizaje: Entender la arquitectura Transformer desde cero
- Generación de texto: Crear texto en el estilo de un autor específico
- Experimentación: Probar diferentes hiperparámetros y arquitecturas
- Investigación: Base para proyectos más complejos de NLP
Solución: Ejecuta python train.py primero para entrenar y guardar el modelo.
Solución: Reduce batch_size o n_embd en train.py, o usa CPU cambiando:
device = 'cpu'Solución:
- Aumenta
max_iterspara 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)
Solución: Verifica que los hiperparámetros en train.py y generate.py sean idénticos.
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
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
Este proyecto es de código abierto y está disponible para fines educativos.
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.
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
- Ruiz Lite, Joaquín. "el MOTOR de la INTELIGENCIA ARTIFICIAL"
- Attention Is All You Need
- Language Models are Unsupervised Multitask Learners (GPT-2)
- PyTorch Documentation
¡Feliz entrenamiento! 🚀