En el mundo actual, la cantidad de información en línea es cada vez mayor y a menudo es difícil encontrar la información correcta y relevante en medio de todo el ruido. ¿Qué pasa si pudiéramos automatizar el proceso de clasificar textos para hacer más fácil la tarea de buscar información específica? En este tutorial, aprenderemos cómo hacer precisamente eso utilizando Python y la biblioteca Scikit-learn.
Requisitos previos
Antes de continuar, asegúrese de tener instalados los siguientes elementos:
- Python 3.x
- Scikit-learn
- Jupyter Notebook
Comenzando
En la mayoría de los casos, cuando trabajamos con texto, queremos clasificarlo en categorías específicas. Por ejemplo, podemos tener una lista de correos electrónicos y queremos separarlos en correos electrónicos personales y correos electrónicos de trabajo. O podemos tener noticias y queremos clasificarlas en categorías de entretenimiento, deportes y política. En este ejemplo, usaremos unos datos preexistentes de noticias y vamos a clasificarlos. Los datos de noticias supondremos que están almacenados en un directorio llamado `data`.
Importando las librerías requeridas
Primero, debemos importar las bibliotecas que necesitamos. Lo primero que haremos es importar Numpy y Scikit-learn para cargar los datos y crear nuestro modelo. También usaremos el módulo train_test_split para dividir nuestros datos en conjuntos de entrenamiento y prueba. Además, importaremos otras bibliotecas como pandas y matplotlib para ayudarnos a visualizar los resultados.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_files
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.model_selection import train_test_split
Carga de los datos
A continuación, cargamos los datos y los dividimos en conjunto de entrenamiento y prueba. Para esto, usamos el método `load_files` de Scikit-learn y especificamos la ruta de nuestro directorio con los datos. Luego, usamos `train_test_split` para dividir los datos.
dataset = load_files('data', decode_error='replace', random_state=45)
X_train, X_test, y_train, y_test = train_test_split(dataset.data, dataset.target, test_size=0.3, random_state=45)
Preprocesamiento de datos
A continuación, necesitamos realizar el preprocesamiento de datos para poder entrenar nuestro modelo. ‘CountVectorizer’ es una herramienta en scikit-learn que convierte colecciones de documentos en matrices de cuentas de tokens. Es una herramienta muy útil para la extracción de características de datos de texto. A continuación, creamos un objeto CountVectorizer y lo ajustamos a nuestro conjunto de entrenamiento.
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)
X_test_counts = count_vect.transform(X_test)
Entrenamiento del modelo
Ahora estamos listos para entrenar nuestro modelo. Multinomial Naive Bayes es una de las mejores técnicas para la clasificación de texto en múltiples categorías. Creamos una instancia de MultinomialNB y lo ajustamos al conjunto de entrenamiento que procesamos anteriormente.
nb = MultinomialNB()
nb.fit(X_train_counts, y_train)
Prueba del modelo
Ahora, evaluamos nuestro modelo con el conjunto de prueba. Para hacer esto, usamos el método ‘predict’ en nuestro objeto MultinomialNB y lo pasamos como argumento nuestra matriz sparse de datos de prueba (X_test_counts).
y_pred = nb.predict(X_test_counts)
Resultados
A continuación, presentamos los resultados obtenidos mediante la matriz de confusión y el informe de clasificación.
cm = confusion_matrix(y_test, y_pred)
cr = classification_report(y_test, y_pred, target_names=dataset.target_names)
print('Matriz de confusión:')
print(cm)
print('Informe de clasificación:')
print(cr)
Este tutorial cubrió los conceptos básicos de cómo utilizar Python y Scikit-learn para la clasificación de texto. Ahora debería ser capaz de aplicar estos conceptos a sus propios conjuntos de datos de texto y hacer predicciones en modelos de clasificación. Además, aquí hay algunos enlaces útiles para ayudarte a mejorar tus habilidades en el procesamiento de texto:
- Scikit-learn guía para trabajar con datos de texto.
- Una guía para la herramienta de procesamiento de lenguaje natural Python: NLTK.