Construir un modelo de clasificación de texto con datos reales requiere algo más que conocer PyTorch: necesitas saber cómo procesar lenguaje natural y conectar todo a un dataset confiable. Aquí aprenderás cómo usar PyTorch, nn.Module y TorchText para clasificar artículos de Wikipedia en 14 categorías distintas, entrenar tu modelo y publicarlo en Hugging Face.
Qué librerías de PyTorch necesitas para procesar texto
El ecosistema de PyTorch es amplio y cada librería tiene un propósito específico. Para trabajar con lenguaje natural, la pieza clave es TorchText, que ofrece funciones, objetos y clases pensadas para preparar texto antes de alimentarlo a un modelo.
Dentro del proyecto open source de PyTorch encuentras también otras herramientas que vale la pena explorar:
TorchText: procesamiento de texto, tokenización y vocabularios.
TorchAudio: manejo de archivos y señales de audio.
TorchVision: imágenes, video y tareas de visión por computador.
¿Qué es TorchText? Es la librería oficial de PyTorch para procesar texto. Te da datasets listos, tokenizadores y utilidades para construir vocabularios sin escribir todo desde cero.
Cómo instalar TorchText y Portalocker en Google Colab
El entorno de trabajo es Google Colab, y antes de importar nada necesitas instalar dos paquetes [00:50]. La razón es simple: Colab no trae por defecto la versión más reciente de TorchText, y Portalocker es una dependencia obligatoria para descargar los datasets.
La instalación se hace con dos comandos clave:
Instalar Portalocker en una versión mayor a la 2.00.
Instalar TorchText con el flag upgrade para forzar la versión más actualizada.
El flag upgrade le indica a pip que reemplace la versión que Colab instalaría por defecto. Sin esto, te arriesgas a usar una versión antigua incompatible con los datasets más nuevos.
Una vez instalado, importas las librerías con import torch e import torchtext. Verifica siempre la versión instalada; al momento de esta clase la más actualizada es la 0.15.1 [02:50].
Qué es DBpedia y por qué usarlo para clasificar texto
El dataset que usaremos se llama DBpedia y se obtiene directamente desde torchtext.datasets [01:50]. Es un conjunto curado, de alta calidad, formado por entradas reales de Wikipedia en inglés.
¿Qué es DBpedia? Es un dataset de clasificación de texto basado en artículos de Wikipedia en inglés, organizado en 14 categorías como atletas, compañías o pueblos. Se usa para entrenar modelos de clasificación múltiple.
La ventaja de trabajar con datasets oficiales de TorchText es que ya vienen estructurados y limpios, lo que te ahorra horas de preprocesamiento.
Qué otros datasets ofrece TorchText
DBpedia no es la única opción. La librería incluye varios datasets útiles según la tarea que quieras resolver:
AG News: clasificación de noticias, muy popular para benchmarks.
DBpedia: clasificación multiclase con 14 etiquetas.
Datasets para machine translation y modelado de lenguaje.
Puedes usarlos para entrenar desde cero, afinar modelos o simplemente probar arquitecturas nuevas sin preocuparte por la calidad de los datos.
Cómo funciona la clasificación múltiple con 14 etiquetas
El objetivo del modelo es recibir un texto y predecir a cuál de las 14 categorías pertenece. Si le pasas un fragmento de Wikipedia, el modelo te dirá si habla sobre un atleta, una compañía, un pueblo, una película, entre otros.
Esto se conoce como clasificación multiclase: a diferencia de la clasificación binaria (sí/no), aquí el modelo elige una entre varias opciones posibles. Para que funcione, necesitas:
Tokenizar el texto y convertirlo en números.
Construir un vocabulario que mapee palabras a índices.
Definir una arquitectura con nn.Module que produzca 14 salidas.
Entrenar, evaluar y guardar el modelo.
¿Por qué importa tokenizar antes de entrenar? Los modelos no entienden palabras, solo números. Tokenizar convierte cada palabra en un identificador único que el modelo puede procesar matemáticamente.
El último paso del flujo será subir el modelo entrenado a Hugging Face, la plataforma estándar para compartir modelos de machine learning con la comunidad.
Con las dependencias listas y el dataset cargado, ya tienes la base para empezar a procesar el texto. ¿Qué categoría te gustaría que tu modelo identifique primero cuando lo pruebes? Cuéntame en los comentarios.
Y si quiero utilizar un custom dataset? Ya saben, no quiero entrenar modelos con dataset de PyTorch si no uno propio, por ejemplo un dataset que clasifique entre 5 niveles de enojo.
Y que tenga mis datos en csv, train.csv, validation.csv, test.csv ?
Cómo puedo adaptar todo esto para utilizar mis propios datos?
No sé si ya has resuelto esa duda, pero la documentación de Pytorch te dice cómo. Puedes usar la clase "TensorDataset" que está en torch.utils.data y ponerlo como TensorDataset(inputs, labels) o crear tu propia clase con la clase Dataset (requiere que la definas y heredes las propiedades de torch.utils.data.Dataset). Con eso ya solo pasas los datos a un DataLoader y puedes iterar para el entrenamiento. Las inferencias las realizas pasando directamente las entradas al modelo o también con un DataLoader.
Documentación:
Para realizar una clasificación de texto en machine learning, el proceso comienza con la preparación de datos, que involucra varios pasos, como la recolección de los datos de texto, su preprocesamiento, la representación en un formato adecuado para modelos (normalmente como vectores numéricos) y la división de los datos en conjuntos de entrenamiento y prueba. Aquí te doy un resumen de los pasos clave:
### 1. **Recolección de datos:**
- Datos etiquetados son fundamentales para tareas de clasificación. Algunos datasets populares para la clasificación de texto incluyen:
- **IMDB Reviews** (clasificación de sentimientos).
- **20 Newsgroups** (clasificación de noticias).
- **SpamAssassin** (detección de spam).
### 2. **Preprocesamiento de texto:**
- **Limpieza**: Eliminar puntuación, dígitos, URLs, y otros elementos irrelevantes.
- **Tokenización**: Separar el texto en palabras o tokens (puede ser palabra o n-gramas).
- **Lematización/Stemming**: Reducir palabras a su forma base o raíz.
- **Stop words removal**: Eliminar palabras comunes (como "el", "de", "la" en español) que no aportan mucho a la clasificación.
### 3. **Representación de texto (Features):**
El texto necesita ser convertido a un formato numérico que el modelo pueda procesar. Algunas de las técnicas más utilizadas son:
- **Bag of Words (BoW)**: Representación de los textos en forma de conteos de palabras.
- **TF-IDF (Term Frequency-Inverse Document Frequency)**: Ajusta los conteos de palabras en función de su frecuencia en otros documentos, ponderando la importancia.
- **Word embeddings**: Representar las palabras como vectores de una manera que capture el contexto, como en **Word2Vec** o **GloVe**.
- **Modelos preentrenados** como **BERT** o **GPT** que generan representaciones numéricas sofisticadas.
### 4. **División de datos:**
Dividir los datos en conjuntos de:
- **Entrenamiento**: Aproximadamente el 80% de los datos se usa para entrenar el modelo.
- **Prueba**: El otro 20% se usa para evaluar el modelo.
- **Validación (opcional)**: A veces se reserva un 10% de los datos de entrenamiento para ajuste de hiperparámetros.
### 5. **Entrenamiento y evaluación:**
- **Entrenamiento**: Aplicar el modelo de clasificación de texto (como Naive Bayes, SVM, Redes Neuronales, etc.).
- **Evaluación**: Usar métricas como la **precisión**, **recall**, **f1-score** y la **matriz de confusión** para medir el desempeño del modelo.
### Ejemplo en PyTorch
Si estás usando PyTorch, podrías emplear una red neuronal o un modelo más simple con embeddings preentrenados para resolver la clasificación.
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.model\_selection import train\_test\_split
\# Supongamos que tienes tus datos listos en X (textos) y y (etiquetas)X\_train, X\_test, y\_train, y\_test = train\_test\_split(X, y, test\_size=0.2, random\_state=42)
\# Aquí puedes usar un modelo de embeddings preentrenado o construir una red simple
classTextClassifier(nn.Module):  def \_\_init\_\_(self, vocab\_size, embed\_dim, num\_classes):  super(TextClassifier, self).\_\_init\_\_()  self.embedding = nn.Embedding(vocab\_size, embed\_dim)  self.fc = nn.Linear(embed\_dim, num\_classes)  def forward(self, x):  embeds = self.embedding(x)  out = self.fc(embeds.mean(1)) # Agregar pooling si es necesario  return out\# Crear el modelo, función de pérdida y optimizador
model = TextClassifier(vocab\_size=5000, embed\_dim=64, num\_classes=2)criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.001)
\# Entrenamiento simplificado
for epoch inrange(10):  model.train()  optimizer.zero\_grad()  output = model(X\_train) # Asegúrate que X\_train esté tokenizado y vectorizado  loss = criterion(output, y\_train)  loss.backward()  optimizer.step()  print(f'Epoch {epoch+1}, Loss: {loss.item()}')
Para los que están viendo este clase en el 2026 es importante hacer una reinstalación de la versión de torch que viene por defecto en google colab ya que hace conflicto con la la ultima versión de torchtext que es la 0.18.0, para eso en la primera celda donde el profesor instala las dependencias, vamos a cambiar su contenido por lo siguiente:
Luego también es mejor usar otro dataset distinto al propuesto a la clase ya que ese dataset actualmente cambio la URL y genera problema al obtenerlo, es mejor trabajar con AG_NEWS, ya con esos cambios podemos correr la segunda celda sin problema y seguir con las clases.
■ Resumen:
En esta clase se cargará un dataset, pero hagamos doble click en el dataset para entender el poder que tiene.
DBpedia es un proyecto que extrae datos estructurados de la Wikipedia y los hace disponibles en la web de manera que pueden ser consultados y enlazados a otros datos, facilitando el acceso a información semántica. La idea principal detrás de DBpedia es permitir que los datos de Wikipedia sean consultados a través de un formato estandarizado como el RDF (Resource Description Framework), y se puedan realizar consultas utilizando SPARQL (SPARQL Protocol and RDF Query Language) Es como SQL pero un poco más cmplejo.
DBpedia actúa como una base de conocimiento basada en la web que puede ser utilizada para:
Recuperación de información: Consultar datos extraídos de Wikipedia de manera más eficiente.
Enlazado de datos: Conectar y enriquecer otros datos a través de la información estructurada de Wikipedia.
Aplicaciones de IA: Integrar información de Wikipedia en sistemas inteligentes, como chatbots y motores de recomendación