Ingeniería LLM · Media · 15 min

Muestreo top-p (nucleus)

El parámetro top_p de Ollama descarta los tokens improbables antes de elegir. Implementa ese filtro.

Escribe topP(probs, p). probs es un objeto { token: probabilidad } que suma 1. Devuelve un array de { token, prob }:

1. ordena los tokens de más a menos probable; 2. quédate con el conjunto más pequeño cuyo acumulado sea >= p; 3. renormaliza esas probabilidades para que sumen 1.

No modifiques probs. PROBS contiene la distribución de ejemplo para el siguiente token.

Retos 0/5

  • Con p = 0,8 se queda con los tres tokens más probables
  • Renormaliza: suman 1 y ' the' vale 0,42 / 0,82
  • Con p bajo queda un solo token con probabilidad 1
  • Ordena una entrada desordenada y no la modifica
  • Con p = 1 conserva todos los tokens

function topP(probs, p) {
  const sorted = Object.entries(probs).sort((a, b) => b[1] - a[1]);
  // conserva tokens hasta que la probabilidad acumulada llegue a p
  // después divide cada probabilidad conservada entre su suma
  return sorted.map(([token, prob]) => ({ token, prob }));
}

console.log(topP(PROBS, 0.8));
La consola aparece aquí (console.log).

Para profundizar: la referencia de Hugging Face (en inglés) →

¿Esto en producción, con tus datos? Hablemos 15 minutos →