Clasificación de Nombres con Naive Bayes en Python
Clase 19 de 26 • Curso de Algoritmos de Clasificación de Texto
Resumen
¿Cómo realizar una clasificación de palabras usando NLTK en Google Colab?
La clasificación de palabras es una habilidad esencial en el procesamiento del lenguaje natural y lo puedes lograr fácilmente empleando Python y herramientas como NLTK. Este proceso comienza por la preparación de un notebook en Google Colab y la importación de las librerías principales: NLTK y random. ¿Te gustaría saber más? ¡Sigue leyendo!
¿Cómo importar un dataset en NLTK?
El primer paso es descargar un dataset crucial para la clasificación. Utilizaremos names
, un corpus de NLTK que contiene nombres masculinos y femeninos en inglés. Puedes acceder a él de la siguiente forma:
import nltk
import random
# Descarga e importa el dataset
nltk.download('names')
from nltk.corpus import names
¿Cómo construir una función de extracción de atributos?
Para empezar a clasificar, necesitas definir qué atributos vas a considerar. La última letra del nombre es un atributo básico, pero también puede ser muy revelador:
def attribute_extractor(word):
return {'last_letter': word[-1]}
¿Cómo crear y mezclar listas de nombres etiquetados?
Crear listas de nombres y sus etiquetas es un proceso fundamental. Aquí te muestro cómo hacer esto tanto para nombres masculinos como femeninos:
male_names = [(name, 'male') for name in names.words('male.txt')]
female_names = [(name, 'female') for name in names.words('female.txt')]
# Combina ambas listas
dataset = male_names + female_names
# Mezcla los datos para evitar sesgos
random.shuffle(dataset)
¿Cómo construir un modelo de clasificación básico?
Una vez definidas las listas, el siguiente paso es crear un modelo de clasificación utilizando la librería naivebayes
de NLTK:
# Clara las listas de atributos
featuresets = [(attribute_extractor(n), gender) for (n, gender) in dataset]
# Divide el conjunto de datos
train_set, test_set = featuresets[500:], featuresets[:500]
# Crea el clasificador Naive Bayes
classifier = nltk.NaiveBayesClassifier.train(train_set)
¿Cómo verificar el desempeño del modelo?
Una vez construido tu modelo, es esencial evaluar su precisión para determinar su efectividad:
# Verifica la precisión
print(nltk.classify.accuracy(classifier, test_set))
En nuestro ejemplo, la precisión oscila alrededor del 75%, lo cual puede no ser lo ideal, pero es un comienzo prometedor.
¿Cómo mejorar los atributos para una clasificación más precisa?
Mejorar el modelo implica definir atributos más complejos y precisos. Una nueva función de extracción de atributos puede considerar, además de la última letra, la primera letra u otras características más sofisticadas como el número de veces que una letra aparece en un nombre:
def enhanced_attribute_extractor(name):
features = {
'first_letter': name[0].lower(),
'last_letter': name[-1].lower(),
}
for letter in 'abcdefghijklmnopqrstuvwxyz':
features[f"count({letter})"] = name.lower().count(letter)
features[f"has({letter})"] = (letter in name.lower())
return features
Con esto, puedes reconstruir las listas de atributos y seguir el mismo procedimiento para el entrenamiento y evaluación del modelo.
¿Qué sigue después de la ingeniería de atributos?
Recuerda, la ingeniería de atributos es una tarea iterativa y creativa. Practica usando un dataset en español para aplicar lo aprendido y descubrir si las mismas técnicas funcionan igual al cambiar de idioma. Atrévete a experimentar y comparte tus resultados. ¡No olvides que cada intento es un aprendizaje para convertirte en un experto en procesamiento de lenguaje natural!