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 ·

Generación simple

Generación simple de texto utilizando modelos n-gram

Introducción

La generación simple de texto es una técnica fundamental dentro del procesamiento del lenguaje natural (NLP). Permite crear textos nuevos a partir de un corpus existente, usando modelos basados en n-grams. Este método es especialmente útil para generar continuaciones de frases o completar fragmentos de texto que podrían ser utilizados en aplicaciones como chatbots, escritura creativa automatizada o generación de contenido personalizado.

Explicación principal con ejemplos

Un modelo n-gram se basa en predecir la siguiente palabra en una frase o documento dado un contexto de tamaño n. Por ejemplo, un modelo de bigramas (o 2-grams) tomará una palabra y predice la próxima. Para un trigramas (3-grams), considerará dos palabras anteriores para predecir la siguiente.

Ejemplo de implementación

from collections import defaultdict
import random

def build_ngram_model(corpus, n=2):
    model = defaultdict(lambda: defaultdict(int))
    
    for i in range(len(corpus)-n):
        grams = tuple(corpus[i:i+n])
        next_word = corpus[i+n]
        model[grams][next_word] += 1
    
    return model

def generate_text(model, length=50, start='hola'):
    current_gram = tuple(start.split()[-(n-1):]) if n > 1 else (start,)
    generated_text = list(start.split())[:-(n-1)] + [current_gram[0]]
    
    for _ in range(length - len(generated_text)):
        next_word_options = model[current_gram]
        next_word = max(next_word_options, key=next_word_options.get)
        current_gram = tuple(current_gram[1:]) + (next_word,)
        generated_text.append(next_word)
    
    return ' '.join(generated_text)

# Ejemplo de uso
corpus = "hola mundo esto es un texto de ejemplo para demostrar la generación de texto a partir de n-grams"
n = 2
model = build_ngram_model(corpus, n=n)
generated_text = generate_text(model, length=50, start='hola')
print(generated_text)

Resultado esperado

El resultado será una cadena de texto que comienza con "hola" y sigue el patrón aprendido del corpus dado. Por ejemplo:

hola mundo esto es un texto de ejemplo para demostrar la generación de texto a partir de n-grams

Errores típicos / trampas

  1. Contexto inadecuado: El modelo puede generar frases que no tienen sentido o están descontextualizadas si el corpus utilizado es pequeño o insuficientemente variado.
  2. Vocabulario limitado: Si el vocabulario del modelo es muy limitado, las predicciones podrían ser repetitivas y predecibles.
  3. Sesgos en los datos: Los modelos n-grams pueden reflejar los sesgos presentes en el corpus de entrenamiento.

Checklist accionable

  1. Preprocesar correctamente el corpus para asegurar la calidad del modelo.
  2. Elige adecuadamente el tamaño n para maximizar la precisión y variedad de las predicciones.
  3. Verifica el balance de los datos para evitar overfitting y underfitting.
  4. Implementa técnicas de suavizado como Laplace para manejar palabras raras o inesperadas.
  5. Evaluación continua del modelo con nuevos datos para adaptarlo a diferentes contextos.

Siguientes pasos

  • Aprender sobre embeddings word2vec y fastText para mejorar la representación de palabras en el espacio vectorial.
  • Explorar modelos basados en Deep Learning como RNNs, LSTMs o Transformers para modelos más avanzados de generación de texto.
  • Investigar técnicas de regularización para prevenir overfitting en modelos con grandes conjuntos de datos.

Contacto

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