Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Modelos de lenguaje, Unidad 3 — Evaluación de modelos de lenguaje, 3.1 — Perplejidad ·

Qué mide la perplejidad

Qué mide la perplejidad

Introducción

La perplejidad es una métrica crucial para evaluar los modelos de lenguaje, ya que proporciona un indicador cuantitativo de cómo bien un modelo puede predecir las secuencias de texto. Es particularmente útil en el contexto del procesamiento del lenguaje natural (NLP) y es fundamental para entender la eficacia de diferentes arquitecturas y técnicas utilizadas en modelos de lenguaje.

Explicación principal con ejemplos

La perplejidad mide cuánto "sorprendido" estaría un modelo al ver una secuencia de texto. Cuanto más sorprendido esté el modelo, mayor será su perplejidad y por ende, menor será su precisión en predecir la secuencia.

Fórmula

La fórmula para calcular la perplejidad \( P \) de un modelo \( M \) que genera una secuencia de tokens \( S = (s_1, s_2, ..., s_n) \) es:

\[ P(S) = 2^{-\frac{1}{n} \sum_{i=1}^{n} \log_2 P(s_i | s_{<i})} \]

donde:

  • \( n \) es el número total de tokens en la secuencia.
  • \( P(s_i | s_{<i}) \) es la probabilidad condicional del token \( i \) dado todos los tokens anteriores.

Ejemplo

Supongamos un modelo que genera las siguientes secuencias:

  1. Entrada: "El perro salió a jugar en el parque."
  2. Predicción del modelo: "El gato salió a jugar en el parque."

Si el modelo es capaz de predecir la probabilidad de cada token, por ejemplo:

  • \( P(\text{"gato"}) \) dado "El", "perro", "salío" y "a".
  • \( P(\text{"jugar"}) \) dado todo lo anterior, etc.

Podemos calcular la perplejidad del modelo al comparar las probabilidades reales con sus predicciones. Un valor más bajo de perplejidad indica que el modelo tiene una probabilidad alta para las secuencias observadas.

Bloque de código

A continuación se muestra un ejemplo simplificado en Python de cómo calcular la perplejidad usando PyTorch y un modelo pre-entrenado como GPT-2:

import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel

# Cargar el tokenizer y el modelo pre-entrenado
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

def calculate_perplexity(input_text):
    # Tokenizar la entrada
    input_ids = tokenizer.encode(input_text, return_tensors='pt')
    
    # Calcular las probabilidades de cada token en la secuencia
    with torch.no_grad():
        outputs = model(input_ids=input_ids)
        logits = outputs.logits
    
    # Extraer las probabilidades de los tokens siguientes y convertirlas a probabilidad normalizada
    next_token_logits = logits[:, :-1, :].contiguous().view(-1, tokenizer.vocab_size)
    next_token_probs = torch.softmax(next_token_logits, dim=-1).cpu()
    
    # Calcular la perplejidad
    log_probabilities = (torch.log(next_token_probs) * input_ids[0, 1:].eq(input_ids[0][:-1]).float()).sum() / len(input_ids[0][:-1])
    perplexity = torch.exp(-log_probabilities)
    
    return perplexity.item()

# Texto de prueba
test_text = "El perro salió a jugar en el parque."

# Calcular la perplejidad del modelo
perplexity_value = calculate_perplexity(test_text)
print(f"Perplejidad: {perplexity_value:.2f}")

Errores típicos / trampas

  1. Perplejidad sobreestimada: Una de las trampas más comunes es que la perplejidad se vuelve ineficaz cuando los modelos predecen secuencias fuera del dominio en el que fueron entrenados.
  1. Perplejidad no normalizada: Si no se utiliza una base logarítmica adecuada (generalmente log base 2 o natural log), las medidas de perplejidad pueden ser engañosas y no comparables.
  1. Comparación inadecuada entre modelos: La perplejidad puede variar significativamente dependiendo del tamaño del vocabulario, la longitud de las secuencias y los detalles específicos del entrenamiento. No se debe usar en forma isolada para evaluar el rendimiento de diferentes modelos.

Checklist accionable

  1. Entender el contexto: Analiza si la secuencia de texto es dentro o fuera del dominio de entrenamiento.
  2. Normalizar las métricas: Usa siempre una base logarítmica consistente (por ejemplo, log base 2).
  3. Comparar con modelos similares: Asegúrate de que los modelos a comparar sean similares en términos de arquitectura y dominio.
  4. Conseguir un rango adecuado: La perplejidad debe tener sentido dentro del contexto. Un modelo perfecto tendría una perplejidad de 1, pero este es extremadamente raro y depende mucho del tamaño del vocabulario.
  5. Validar manualmente: Asegúrate de que los valores de perplejidad sean intuitivamente coherentes con el rendimiento esperado del modelo.

Siguientes pasos

  • Aprender sobre evaluación humana: La perplejidad es una métrica técnica, pero la evaluación humana puede proporcionar un contexto más profundo y realista.
  • Explorar otros modelos de lenguaje: Compara la perplejidad con otros modelos populares en NLP para entender mejor las diferencias entre ellos.
  • Analizar casos específicos: Examina las secuencias donde el modelo tiene mayor o menor perplejidad para identificar patrones y mejorar el rendimiento.

Contacto

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