Saltar al contenido principal
Volver a todos los artículos
IA Práctica5 min de lectura

Fine-Tuning: Cómo dejé de pagar a OpenAI y creé mi propio clasificador con un modelo pequeño

Te cuento mi experiencia real afinando un modelo de lenguaje pequeño para una tarea de clasificación muy específica. Una guía práctica para ahorrar costes, ganar velocidad y tener control total sobre tu IA.

No necesitas un martillo pilón para clavar un clavo

Llevo años construyendo productos y, como muchos, me deslumbré con la potencia de los grandes modelos de lenguaje (LLMs) como GPT-4. Son increíbles, sí. Pero también son caros, lentos para ciertas tareas y, seamos sinceros, a veces son una caja negra que no controlas.

Mi problema era concreto: necesitaba clasificar miles de tickets de soporte de uno de mis SaaS en categorías muy específicas y de nicho. Piensa en cosas como `Error de facturación en plan anual`, `Duda sobre integración con API v2`, `Sugerencia de UI para el dashboard`. Un modelo general como GPT-3.5-Turbo lo intentaba, pero a menudo fallaba en los matices, confundiendo categorías sutiles. El coste de las llamadas a la API empezaba a ser un problema y la latencia no era ideal.

La solución no fue un modelo más grande, sino uno más pequeño y especializado. Te cuento cómo lo hice.

El porqué de los modelos pequeños

Antes de entrar en el barro técnico, déjame ser claro sobre por qué este camino es tan potente para emprendedores y equipos pequeños:

* Coste: Después del entrenamiento inicial (que puedes hacer gratis en Google Colab), el coste de inferencia en tu propio servidor es prácticamente cero. Compara eso con los miles de dólares que puedes gastar en llamadas a la API. * Velocidad: Un modelo pequeño y optimizado alojado en tu propia infraestructura puede responder en milisegundos. Adiós a la latencia de la API de un tercero. * Control y Privacidad: Tus datos (en mi caso, los tickets de mis clientes) nunca abandonan tu sistema. No dependes de que la API de un tercero esté activa o de sus políticas de privacidad. * Especialización: Un modelo pequeño afinado para UNA tarea específica a menudo supera a un modelo gigante de propósito general en esa misma tarea. Es un especialista contra un generalista.

Mi Kit de Herramientas

No reinventé la rueda. Me apoyé en el increíble ecosistema de código abierto que existe hoy en día.

* El Modelo: Elegí `distilbert-base-uncased`. Es una versión más pequeña y rápida de BERT, perfecta para empezar. Mantiene alrededor del 97% del rendimiento de BERT siendo un 40% más pequeño y un 60% más rápido. Ideal. * El Framework: La librería `transformers` de Hugging Face es el estándar de facto. Hace que todo el proceso, desde la carga de datos hasta el entrenamiento, sea ridículamente sencillo. * Los Datos: El componente más crucial. Recopilé a mano unos 2,500 tickets de soporte y los etiqueté en mis 8 categorías. Creé un simple archivo CSV con dos columnas: `texto` y `etiqueta`.

El Proceso, Paso a Paso (Sin Paja)

Aquí está el resumen práctico de lo que hice. No necesitas un doctorado en IA para seguirlo.

1. Preparación del Entorno

Lo primero es instalar las librerías necesarias. Con `pip` es un momento.


pip install transformers datasets torch

2. Carga y Preparación de Datos

Usé la librería `datasets` de Hugging Face para cargar mi CSV. Esta librería es una maravilla porque se integra perfectamente con `transformers`.


from datasets import load_dataset

Importante: mis etiquetas de texto (`Error de login`, etc.) las convertí a números (0, 1, 2...). Es un requisito para el entrenamiento.

3. Tokenización

Esto es simplemente convertir el texto en una secuencia de números que el modelo pueda entender. `AutoTokenizer` se encarga de todo.


from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained('distilbert-base-uncased')

def tokenize_function(examples): return tokenizer(examples['texto'], padding='max_length', truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True) ```

4. Entrenamiento

Aquí es donde ocurre la magia. Gracias a la API `Trainer` de Hugging Face, el código es sorprendentemente corto.


from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer

Tras unas pocas horas en una GPU de Google Colab, el entrenamiento estaba listo.

Resultados y Lecciones Aprendidas

Los resultados fueron espectaculares. Con solo 2,500 ejemplos, alcancé una precisión superior al 96% en mi conjunto de datos de prueba. El modelo era rápido, barato de ejecutar y, lo más importante, entendía perfectamente el matiz de *mi* negocio.

Mis lecciones clave:

1. Los datos son el rey: Un dataset pequeño pero de alta calidad y muy específico para tu problema es oro puro. Vale más que millones de ejemplos genéricos. 2. Empieza pequeño: No te dejes llevar por el hype. Para tareas de clasificación, un modelo como DistilBERT es a menudo más que suficiente. Es una herramienta pragmática. 3. El tooling es tu mejor amigo: Hugging Face ha hecho que este proceso sea accesible para cualquier desarrollador. No hay excusa para no intentarlo.

Dejé de pagar una factura mensual considerable a OpenAI para esta tarea y la reemplacé con una solución propia, más rápida y precisa. Eso, para un emprendedor, no es solo una victoria técnica, es una victoria de negocio.

Así que la próxima vez que te enfrentes a una tarea de NLP, pregúntate: ¿necesito un martillo pilón o me basta con un martillo de precisión que puedo construir yo mismo?

Escrito por Samuel Moreno

Socio y Desarrollador en Sinergia Barcelona.