¿Qué es el Sampling en un LLM?

Después de que softmax convierte los logits en probabilidades, el modelo tiene una lista enorme de tokens posibles, cada uno con su probabilidad. Ahora tiene que elegir uno.
Esa elección es el sampling (muestreo). Es el último paso antes de que veas una palabra aparecer en la pantalla.
El modelo no siempre elige la palabra más probable. Tiene varias estrategias de selección, y cada una produce un tipo de texto diferente.
Greedy Decoding: Siempre el Más Probable
Sección titulada «Greedy Decoding: Siempre el Más Probable»La forma más simple. El modelo mira todas las probabilidades y elige el token con el número más alto. Siempre. Sin excepción.
Si el token “París” tiene probabilidad 0.85 y el token “Lyon” tiene 0.10, el modelo elige “París”. Cada vez. Sin variación.
El problema es que produce texto repetitivo. En generaciones largas, el modelo tiende a caer en bucles donde repite las mismas frases o estructuras. Funciona bien para respuestas cortas y factuales. Funciona mal para todo lo demás.
Random Sampling: Muestreo Aleatorio
Sección titulada «Random Sampling: Muestreo Aleatorio»En vez de elegir siempre el más probable, el modelo muestrea de la distribución con probabilidades ponderadas. Si “París” tiene 0.85 de probabilidad, hay un 85% de posibilidades de que salga “París”. Pero hay un 10% de que salga “Lyon” y un 5% de que salga cualquier otra opción.
Esto introduce variación. El mismo prompt puede producir respuestas diferentes cada vez. Útil para texto creativo.
El riesgo es que si el vocabulario tiene 200.000 tokens y cada uno tiene aunque sea una probabilidad mínima, a veces el modelo elige tokens absurdos que no tienen sentido en el contexto. Por eso existen filtros.
Top-k: Solo los k Mejores
Sección titulada «Top-k: Solo los k Mejores»Top-k es un filtro. Le dices al modelo: solo puedes elegir entre los k tokens con mayor probabilidad. Ignora todos los demás.
Si k es 10, el modelo mira los 10 tokens más probables, redistribuye sus probabilidades para que sumen 1, y muestrea solo de esos 10.
Si k es 1, es equivalente a greedy decoding. Solo elige el primero.
La limitación de top-k es que es un número fijo. A veces los 10 tokens más probables son todos razonables. Otras veces solo 2 son razonables y los otros 8 son ruido. Top-k no distingue entre esas situaciones.
Top-p o Nucleus Sampling: Los que Sumen hasta p
Sección titulada «Top-p o Nucleus Sampling: Los que Sumen hasta p»Top-p es más adaptativo que top-k. En vez de elegir un número fijo de tokens, elige los tokens necesarios hasta que sus probabilidades sumen un porcentaje determinado.
Si p es 0.9, el modelo ordena los tokens de mayor a menor probabilidad y va sumando. Cuando la suma llega a 0.90, corta. Solo esos tokens entran en la selección.
Ejemplo concreto: Si la distribución es:
Paris: 0.70Lyon: 0.15Marsella: 0.08Burdeos: 0.04Niza: 0.02(resto): 0.01Con top-p de 0.90, el modelo selecciona París (0.70), Lyon (0.15) y Marsella (0.08) porque 0.70 + 0.15 + 0.08 = 0.93, que ya supera 0.90. Burdeos y el resto quedan fuera.
La ventaja es que si un token tiene probabilidad 0.99, top-p solo selecciona ese token. Y si la distribución está más repartida, selecciona más tokens automáticamente. Se adapta al contexto.
Este método fue propuesto en el paper The Curious Case of Neural Text Degeneration (Holtzman et al., 2020).
Temperatura y Sampling Trabajan Juntos
Sección titulada «Temperatura y Sampling Trabajan Juntos»Primero se aplica la temperatura para ajustar la distribución de probabilidades. Después se aplica el filtro de sampling (top-k o top-p) para limitar las opciones. Finalmente se muestrea de las opciones que quedan.
Son pasos distintos que se combinan. La temperatura cambia la forma de la distribución. El sampling decide de qué parte de esa distribución se elige.
La recomendación de OpenAI en su documentación es usar temperatura o top-p, pero no ajustar ambos al mismo tiempo. Si usas temperatura para controlar la aleatoriedad, deja top-p en 1.0. Si usas top-p, deja temperatura en 1.0.
Parámetros Reales de las APIs
Sección titulada «Parámetros Reales de las APIs»En la API de OpenAI:
temperature: de 0.0 a 2.0, por defecto 1.0top_p: de 0.0 a 1.0, por defecto 1.0top_k: no está disponible en la API de OpenAI
En otras APIs como Google Gemini o modelos open source, top-k sí está disponible y suele tener un valor por defecto de 40 o 50.
La Cadena Completa
Sección titulada «La Cadena Completa»Para que quede claro cómo encaja todo en el proceso de generación de tokens:
- El modelo genera logits (números brutos, uno por cada token del vocabulario).
- Los logits se dividen por la temperatura.
- Los logits ajustados pasan por softmax para convertirse en probabilidades.
- Se aplica el filtro de sampling (top-k, top-p o ninguno).
- Se elige un token de las opciones restantes según sus probabilidades.
- Ese token aparece en tu pantalla.
- Se repite desde el paso 1 para el siguiente token.
Verifica el Proceso
Sección titulada «Verifica el Proceso»import mathimport random
logits = [5.0, 3.0, 2.0, 1.5, 0.5, 0.1]tokens = ["Paris", "Lyon", "Marsella", "Burdeos", "Niza", "Toulouse"]
# Paso 1: temperaturatemp = 0.7ajustados = [l / temp for l in logits]
# Paso 2: softmaxexps = [math.exp(x) for x in ajustados]total = sum(exps)probs = [e / total for e in exps]
# Paso 3: top-p con p=0.9orden = sorted(zip(probs, tokens), reverse=True)acumulado = 0seleccion = []for prob, tok in orden: acumulado += prob seleccion.append((prob, tok)) if acumulado >= 0.9: break
# Mostrar resultadofor prob, tok in seleccion: print(f"{tok}: {prob:.4f}")Ejecuta este código y verás la selección final de tokens según top-p.
Qué pasa en la práctica
Sección titulada «Qué pasa en la práctica»- Si usas greedy decoding (temperatura 0), notarás que el modelo repite frases o cae en bucles después de varias oraciones.
- Activar top-p con un valor de 0.9 generalmente mejora la naturalidad sin perder coherencia.
- Los parámetros por defecto de las APIs son conservadores y funcionan bien para la mayoría de tareas.
Error común
Sección titulada «Error común»Creer que el modelo siempre elige “el mejor” token. No existe el mejor token. El modelo elige según probabilidades, y el sampling determina cuánto riesgo tomar.
Si te interesa cómo ejecutar modelos de IA directamente en el navegador sin depender de APIs externas, puedes leer sobre IA local con WebGPU.