¿Cómo crear un modelo de clasificación de texto avanzado con PyTorch?
Lanzarse al mundo del procesamiento de lenguaje natural utilizando PyTorch nunca ha sido tan accesible y excitante. En este módulo, exploramos cómo construir un modelo avanzado para clasificar textos con las herramientas proporcionadas por PyTorch y Torch Text. Nos adentraremos en el uso de nn.module y Torch Text para estudiar un modelo de clasificación de texto, entrenarlo y finalmente implementarlo en una plataforma como Jogging Face. Desde la instalación de dependencias hasta la clasificación de textos, este recorrido educativo te dará las bases para comenzar.
¿Qué es Torch Text y cómo se instala?
Torch Text es una poderosa librería parte de la suite de PyTorch, dirigida al procesamiento de texto. Provee diversas herramientas para ajustar textos y prepararlos para modelos dentro del marco de PyTorch. Facilita la creación de vocabularios, la tokenización y manejo de datasets reales. Además, PyTorch ofrece librerías especializadas como Torch Audio y Torch Vision para trabajar con audio y visión computacional, respectivamente, marcando así su versatilidad.
Para instalar Torch Text junto con una versión específica de Portal Locker (necesaria para su funcionamiento), utilizamos Google Colab:
El flag --upgrade asegura que obtengamos la última versión disponible.
¿Cómo importar y gestionar datasets en Torch Text?
Torch Text incluye un amplio conjunto de datasets para pruebas y entrenamiento de modelos de procesamiento de lenguaje natural. Un ejemplo importante de estos datasets es DBpedia, un dataset de alta calidad compuesto por artículos y entradas de Wikipedia en inglés.
Para utilizar un dataset en Torch Text:
Importar las dependencias necesarias:
import torch
import torchtext
Acceder al dataset DBpedia:
from torchtext.datasets import DBpedia
DBpedia es altamente conveniente para probaturas en clasificación de textos y es conocido por su alta curaduría e información detallada. Otros datasets disponibles incluyen AGnews y Colag, entre muchos otros, facilitando variadas aplicaciones como traducción automática y modelado de lenguaje.
¿Cómo se entrena un modelo de clasificación de texto con DBpedia?
Una vez hemos cargado el dataset, la meta es entrenar un modelo para la clasificación múltiple. DBpedia se utiliza aquí para clasificar el texto en una de las 14 etiquetas disponibles, tales como referencias a un atleta, compañía o pueblos. Aquí entran en juego las maravillas del procesamiento de textos: determinar la temática de un documento de manera automática. Sin duda, una herramienta poderosa para startups y grandes compañías.
Motivación para profundizar en PyTorch y sus librerías
PyTorch, con sus manos extendidas en múltiples librerías, ofrece recursos avanzados para el aprendizaje máquina y aplicaciones IA. Aprender a utilizar tools como Torch Text expande tus habilidades en ciencia de datos y desarrollo de modelos, contribuyendo a tu desarrollo profesional. ¡Recuerda seguir explorando y experimentando! Las posibilidades son tan vastas como tu curiosidad te lo permita.
Clasificación de Texto con PyTorch y TorchText en Google Colab
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