Capítulo 07 · Generación · 7 min

Elegir la siguiente palabra

Temperature, top-k, top-p. El arte de convertir una distribución de probabilidades en texto.

Generar no es elegir siempre el máximo

Un modelo entrenado produce una distribución de probabilidad. Pero una distribución no es una frase. Hay que convertirla en un token.

La opción más simple sería tomar siempre el token más probable. Funciona para tareas cerradas, pero produce texto rígido, repetitivo, a veces bloqueado. Para escribir, explicar o explorar, necesitamos un poco de variación.

Juega con la temperature: a 0, el modelo es determinista y repetitivo; a 1.5, se vuelve creativo hasta volverse incoherente. Top-k y top-p cortan la cola de candidatos improbables sin tocar a los probables.

Temperatura

La temperatura controla la forma de la distribución antes del muestreo.

  • Temperatura baja: los tokens probables se vuelven aún más dominantes.
  • Temperatura alta: la distribución se aplana y deja entrar opciones menos probables.

No cambia lo que el modelo sabe. Cambia cuánto riesgo aceptamos al elegir.

Top-k

Top-k corta la distribución sobre todo el vocabulario — a menudo 100.000 tokens o más — y conserva solo los k más probables. Si k = 5, todo lo que no esté en el top 5 queda imposible.

Es simple y eficaz, pero rígido: a veces el modelo solo tiene dos buenas opciones; a veces tiene treinta. Top-k no lo sabe.

Top-p

Top-p, o nucleus sampling, conserva tokens hasta alcanzar una probabilidad acumulada p.

Si el modelo está muy seguro, el núcleo puede contener uno o dos tokens. Si está indeciso, se abre para incluir más candidatos.

Top-p adapta el tamaño de la lista al nivel de incertidumbre del modelo.

En la práctica, top-p ≈ 0.9 es el valor que más se recomienda, y el que traen por defecto muchas configuraciones open source. Ojo: las grandes APIs suelen dejarlo en 1.0 y te hacen pilotar con la temperatura — si quieres el efecto top-p, hay que pedirlo explícitamente.

Por qué esto importa

Los parámetros de muestreo explican por qué dos respuestas del mismo modelo pueden diferir aunque el prompt sea idéntico.

También explican por qué un ajuste malo puede degradar un buen modelo:

  • temperatura demasiado baja → texto plano, repetitivo
  • temperatura demasiado alta → respuestas incoherentes
  • top-k demasiado pequeño → falta de diversidad
  • top-p demasiado alto → demasiada cola rara

Tres parámetros más que conocer

Más allá de temperatura / top-k / top-p, hay otros ajustes que aparecen en casi todas las APIs.

Las penalizaciones de repetición. Todas penalizan los tokens que ya aparecieron en la salida, para romper bucles sin tener que subir la temperatura — pero no confundas las dos familias, sus escalas no tienen nada que ver. La repetition penalty del ecosistema open source (HuggingFace, llama.cpp) divide las puntuaciones de los tokens ya vistos: vale 1 cuando está desactivada, y se ajusta normalmente entre 1.05 y 1.2. Las frequency penalty y presence penalty de OpenAI, en cambio, restan un valor: van de −2 a +2, valen 0 por defecto, y rara vez se pasa de 1. Poner una frequency penalty a 1.2 creyendo aplicar una repetition penalty da un resultado muy distinto del esperado.

Stop sequences. Una lista de cadenas de caracteres que, si aparecen en la salida, paran la generación al instante. Imprescindible para usos estructurados: en un diálogo formateado, paras en <|im_end|> o \n\nUser: para impedir que el modelo siga la conversación solo.

Beam search. En vez de muestrear estocásticamente, mantienes en paralelo las k mejores secuencias parciales en cada paso, y al final eliges la que maximiza la probabilidad global. El resultado es más "liso" pero a menudo menos natural. Se usa en traducción automática y reconocimiento de voz, mucho menos en generación creativa.

Lo siguiente

Hasta ahora hemos visto un modelo que predice texto. Pero un asistente debe hacer algo más: seguir instrucciones, rechazar ciertas peticiones, adoptar un tono útil. Eso no aparece automáticamente con el pre-entrenamiento.

Hace falta alinearlo.

Actualizado el