Perplexity
La perplejidad es la entropía cruzada de un modelo aplicada a un texto y elevada a una potencia. Cómo calcularla, comparar modelos de forma justa y dónde se utiliza la métrica más allá de la puntuación.
La perplejidad es una métrica que mide lo bien que un modelo probabilístico predice una secuencia y se calcula como la exponencial de la log-verosimilitud negativa media que el modelo asigna a cada token siguiente real. Cuanto menor sea el valor, mejor. Una perplejidad de 10 significa que, en promedio, el modelo tiene tanta incertidumbre como si eligiera uniformemente entre 10 opciones en cada paso; por eso suele interpretarse el valor como un factor de ramificación efectivo. Frederick Jelinek, Robert Mercer, Lalit Bahl y James Baker la introdujeron en IBM en 1977 para medir la dificultad de las tareas de reconocimiento del habla, y sigue siendo la métrica intrínseca estándar para el modelado del lenguaje. Por ejemplo, GPT-2 de OpenAI, con 1.500 millones de parámetros, alcanzó una perplejidad de 17,48 en la referencia WikiText-103 en 2019 sin haberse entrenado con ella.
La palabra también designa dos cosas sin relación entre sí. Perplexity AI es una empresa de motores de búsqueda con IA, y t-SNE tiene un hiperparámetro de perplejidad que establece aproximadamente cuántos vecinos considera cada punto cuando t-SNE crea un mapa 2D de datos de alta dimensionalidad.
Cálculo de la perplejidad#
Para una secuencia de N tokens, perplejidad = exp(-(1/N) x suma de log p(token_i | todos los tokens anteriores)). La cantidad dentro de la exponencial es la entropía cruzada entre el texto y las predicciones del modelo, la misma función de pérdida que se utiliza para entrenar modelos de lenguaje grandes (LLMs). Con logaritmos naturales, la base es e; con logaritmos en base 2, es 2, y ambos dan la misma perplejidad. La pérdida de entropía cruzada de PyTorch utiliza logaritmos naturales y promedia los tokens por defecto, así que la perplejidad de un modelo de lenguaje es simplemente exp(loss).
import math
# Probability the model assigned to each correct next token
token_probs = [0.50, 0.25, 0.80, 0.40]
# Cross-entropy is the average negative log-likelihood, in nats
cross_entropy = -sum(math.log(p) for p in token_probs) / len(token_probs)
print(f"Cross-entropy: {cross_entropy:.3f}, perplexity: {math.exp(cross_entropy):.2f}")
# A model that spreads probability evenly over 10 tokens has perplexity 10
uniform = -sum(math.log(0.1) for _ in token_probs) / len(token_probs)
print(f"Uniform perplexity: {math.exp(uniform):.2f}")Las cuatro probabilidades dan una entropía cruzada de 0,805 nats y una perplejidad de 2,24, por lo que el modelo se comporta como si eligiera entre unos dos tokens con la misma probabilidad en cada paso. El caso uniforme confirma esta interpretación como factor de ramificación: asignar una probabilidad de 0,1 a cada token correcto da exactamente 10.
Los documentos largos requieren cuidado. Un modelo con una ventana de contexto fija puntúa el texto por fragmentos, y los tokens al principio de un fragmento sin solapamiento apenas tienen contexto, lo que aumenta la perplejidad. Una evaluación con ventana deslizante solapa los fragmentos para que cada token reciba tanto contexto anterior como permita el modelo, a costa de más cómputo.
Comparación equitativa de modelos#
La perplejidad solo se puede comparar entre modelos evaluados con el mismo texto y la misma tokenización. Un modelo con un vocabulario más amplio divide el texto en menos tokens, que son más difíciles de predecir, por lo que su perplejidad por token no se puede comparar directamente con la de un modelo que utiliza tokens más pequeños. Normalizar la verosimilitud logarítmica total por el número de bytes o caracteres —y expresarla en bits por byte o bits por carácter— elimina esa dependencia.
Los datos de prueba tampoco deben estar presentes en los datos de entrenamiento. Un modelo que ya ha visto un pasaje le asigna una probabilidad inusualmente alta, así que esta forma de fuga de datos hace que la perplejidad parezca mejor que el rendimiento real. El mismo efecto impulsa los ataques de inferencia de pertenencia, que señalan como probables datos de entrenamiento los textos con una perplejidad sospechosamente baja.
La perplejidad mide la predicción del siguiente token en un texto fijo. Los modelos conversacionales pasan por ajuste de instrucciones y aprendizaje por refuerzo a partir de comentarios humanos (RLHF) para seguir solicitudes y adaptarse a las preferencias humanas, así que se comparan mediante referencias de tareas y valoraciones de preferencias humanas.
Usos más allá de la comparación de modelos#
La selección de datos es una de sus principales aplicaciones. La canalización CCNet, publicada por investigadores de Facebook AI en 2019, puntuó páginas de Common Crawl con un modelo de lenguaje entrenado con Wikipedia y las dividió por perplejidad en tercios superior, intermedio e inferior; el tercio de menor perplejidad se consideró el texto de mayor calidad. Muchas canalizaciones de preentrenamiento filtran los datos web de forma similar, como parte de la limpieza de datos a escala web. Los detectores de texto generado por IA, como GPTZero, también puntúan la perplejidad, ya que el texto muestreado de un modelo de lenguaje suele ser más predecible que la escritura humana.
La fórmula se aplica a cualquier modelo entrenado con entropía cruzada. Los modelos de clasificación Ultralytics YOLO26 se entrenan con la pérdida de entropía cruzada media, así que exp(pérdida de validación) es la perplejidad de las etiquetas de clase reales. Una pérdida de validación de 0,35 equivale a una perplejidad de aproximadamente 1,42, lo que significa que, en una imagen promedio, el modelo reparte su confianza como si dudara entre unas 1,4 clases.










