Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

NLP desde cero, Unidad 7 — Modelos estadísticos de lenguaje, 7.2 — Uso práctico de modelos n-gram ·

Predicción de texto

Predicción de texto: Uso práctico de modelos n-gram

Introducción

La predicción de texto es una tarea fundamental en el procesamiento del lenguaje natural (NLP) que tiene aplicaciones en diversos campos, desde recomendación de productos hasta asistentes virtuales. La técnica de n-grams proporciona una forma poderosa y efectiva para predecir las palabras siguientes basándose en el contexto anterior. En esta unidad, exploraremos cómo implementar modelos de predicción de texto utilizando n-grams, discutiremos errores comunes a evitar y finalmente proporcionaremos un checklist accionable.

Explicación principal con ejemplos

Concepto básico: N-grams

Un n-gram es una secuencia de n unidades contiguas en el texto. En el contexto de la predicción de texto, normalmente se utilizan n-grams de dos o tres palabras (bigramas y trigramas) para predecir la siguiente palabra en una oración.

Implementación práctica

Para implementar un modelo de predicción de texto basado en n-grams, podemos seguir estos pasos:

  1. Preprocesamiento del texto: Normalizar el texto, eliminar ruido innecesario y tokenizarlo.
  2. Construcción de bigramas/trigramas: Crear una lista de todas las secuencias de palabras que se pueden formar con el texto preprocesado.
  3. Cálculo de probabilidades condicionales: Usar la fórmula de probabilidad condicional para calcular cuán probable es que una palabra siga a otra.

Aquí te presento un ejemplo simple en Python:

from collections import Counter

# Texto preprocesado y tokenizado
text = "Este es un ejemplo de texto para el procesamiento del lenguaje natural. Este texto muestra cómo funciona la predicción de texto."

# Convertir a una lista de palabras
words = text.split()

# Crear bigramas (pares de palabras)
bigrams = zip(words[:-1], words[1:])

# Calcular frecuencias de los bigramas
bigram_counts = Counter(bigrams)

# Calcular probabilidades condicionales
total_words = len(words) - 1
conditional_probabilities = {k: v / total_words for k, v in bigram_counts.items()}

print("Probabilidades condicionales:")
for (word1, word2), prob in conditional_probabilities.items():
    print(f"P({word2} | {word1}) = {prob:.4f}")

Ejemplo de uso

Supongamos que queremos predecir la siguiente palabra después del bigrama "procesamiento del". Podemos hacerlo así:

def predict_next_word(prev_words, probabilities):
    # Formar bigrama
    bigram = (prev_words[-1], prev_words[-2])
    
    # Obtener probabilidad condicional
    if bigram in conditional_probabilities:
        return max(probabilities[bigram].items(), key=lambda x: x[1])[0]
    else:
        return "otro"  # Padrón si no hay datos disponibles

# Predecir la siguiente palabra después de "procesamiento del"
prev_words = ["procesamiento", "del"]
predicted_word = predict_next_word(prev_words, conditional_probabilities)
print(f"La palabra predicha es: {predicted_word}")

Errores típicos / trampas

  1. Dataset insuficientemente grande: Los modelos de n-grams pueden fallar si el conjunto de datos utilizado para entrenarlos es pequeño o no contiene suficientes ocurrencias del bigrama en cuestión.
  2. Falta de contexto profundo: N-grams solo consideran el contexto inmediato, lo que puede resultar en predicciones incorrectas si la secuencia de palabras requiere un contexto más amplio.
  3. Sesgos en los datos: Si el dataset contiene sesgos, estos se reproducirán en las predicciones del modelo.

Checklist accionable

  1. Preprocesa adecuadamente tu texto: Normaliza y limpia tus datos antes de construir n-grams.
  2. Usa un conjunto de datos suficientemente grande: Asegúrate de tener una cantidad significativa de ocurrencias para cada bigrama o trigram.
  3. Implementa el preprocesamiento adecuado: Incluye tokenización, eliminación de stopwords y stemming si es necesario.
  4. Verifica la calidad del dataset: Asegúrate de que tu dataset no contenga sesgos que afecten negativamente a tus predicciones.
  5. Evalúa el modelo con métricas adecuadas: Usa precisión, recall y F1-score para evaluar el rendimiento del modelo.

Cierre

La predicción de texto utilizando modelos basados en n-grams es una técnica poderosa pero que requiere atención a detalles específicos como la calidad del conjunto de datos. Al seguir las prácticas recomendadas y evitar los errores comunes, puedes mejorar significativamente el rendimiento de tus modelos.

Siguientes pasos

  • Expande tu modelo: Considera usar trigramas en lugar de bigramas para aumentar el contexto.
  • Mira a Deep Learning: Enfoquémonos en modelos como RNN y LSTMs, que pueden considerar un contexto más amplio.
  • Implementa Word Embeddings: Utiliza Word2Vec o GloVe para representaciones mejoradas de las palabras.

¡Hasta la próxima!

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).