Clasificación de Nombres con Naive Bayes en Python
Clase 19 de 26 • Curso de Algoritmos de Clasificación de Texto
Contenido del curso
- 4

Modelos Marcovianos Latentes en PLN: Fundamentos y Aplicaciones
10:18 - 5

Matemáticas de Cadenas de Markov y su Aplicación en Modelos Latentes
08:43 - 6

Modelos Marcovianos Latentes: Etiquetado Gramatical Automático
13:25 - 7

Implementación de Modelos Marcovianos Latentes en Python con Google Colab
07:51 - 8

Entrenamiento de Modelos Marcobianos Latentes en Python
12:19
- 9

Decodificación de Secuencias con el Algoritmo de Viterbi
07:19 - 10

Cálculo de Probabilidades en el Algoritmo de Viterbi
09:08 - 11

Implementación del Algoritmo de Viterbi en Python con NumPy
14:45 - 12

Implementación del Algoritmo Viterbi para Modelos Ocultos de Markov
17:50 - 13

Implementación de Modelos Ocultos de Markov en NLTK y Python
12:55
- 21

Funcionamiento Matemático del Clasificador Naive Bayes
10:44 - 22

Preparación de Datos para Modelo Naive Bayes en Python
07:43 - 23

Implementación del Algoritmo Naive Bayes en Python con spaCy
17:02 - 24

Implementación del Método Predict en Naive Bayes Clasificador
13:40 - 25

Métricas de Evaluación en Modelos de Clasificación: Accuracy, Precision y Recall
07:32 - 26

Clasificación de Sentimientos con Reviews de Amazon
07:02
¿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!