iabodas / app.py
Garabatos's picture
Update app.py
87333f6
import os
from datasets import Dataset
from transformers import GPT2Tokenizer, GPT2LMHeadModel, Trainer, TrainingArguments
# Formateamos las preguntas y respuestas en el formato adecuado
data = [
{
"input": "¿Cómo se conocieron Emmanuel y Rebeca?",
"output": "Rebeca y Emmanuel se conocieron en su primer día de trabajo cuando se estrecharon la mano..."
},
# Agrega más pares pregunta-respuesta aquí
]
# Crear el dataset
dataset = Dataset.from_dict({
'input': [entry['input'] for entry in data],
'output': [entry['output'] for entry in data]
})
# Cargar el tokenizer de GPT-2
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
# Asignar el token de padding al eos_token
tokenizer.pad_token = tokenizer.eos_token
# Tokenizar el dataset
def tokenize_function(examples):
return tokenizer(examples['input'], padding='max_length', truncation=True, max_length=512)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# Cargar el modelo GPT-2 Small
model = GPT2LMHeadModel.from_pretrained('gpt2')
# Configurar los parámetros de entrenamiento
output_dir = "./app"
training_args = TrainingArguments(
output_dir=output_dir, # Directorio para guardar el modelo
num_train_epochs=3, # Número de épocas (ajustable según el tamaño de tu dataset)
per_device_train_batch_size=2, # Tamaño del batch
per_device_eval_batch_size=2, # Tamaño del batch de evaluación
warmup_steps=500, # Número de pasos de calentamiento
weight_decay=0.01, # Decaimiento del peso
logging_dir='./logs', # Directorio para los logs
logging_steps=10,
save_steps=500, # Guardar el modelo cada 500 pasos
)
# Definir el trainer
trainer = Trainer(
model=model, # El modelo de GPT-2
args=training_args, # Los parámetros de entrenamiento
train_dataset=tokenized_datasets, # El dataset tokenizado
eval_dataset=tokenized_datasets, # El dataset de evaluación (puedes dividir tu dataset en entrenamiento y validación)
)
# Iniciar el entrenamiento
trainer.train()
# Guardar el modelo entrenado
trainer.save_model('./app/gpt2-small-finetuned')