Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Échantillonnage, température et top-k

Après cette leçon: Je peux choisir le jeton suivant par décodage glouton, température et top-k.

Leçon de 55 min1 commandeLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Pourquoi la même question reçoit une autre réponse

L’échantillonnage est la façon dont un modèle de langage choisit son jeton suivant à partir de ses probabilités. La température et le top-k sont les réglages qui façonnent ce choix. C’est pourquoi la même consigne peut donner un texte différent à chaque fois.

Les nombres du modèle ne changent pas entre deux réponses. Seul le choix change.

À la fin de cette leçon

Remarque

Je peux choisir le jeton suivant par décodage glouton, température et top-k.

Mots-clés

MotCe que ça veut direExemple
Décodage gloutonprendre toujours le jeton le plus probable
Échantillonnagetirer un jeton au hasard selon sa probabilité
Températureun nombre qui divise les scores avant le softmax0.5
Top-kgarder seulement les k jetons les plus probablesk = 2
Graineun nombre de départ qui fait se répéter les tirages
Consignele texte que le modèle prolonge (prompt en anglais)

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le décodage glouton prend toujours le premier jeton

Après « le bus est », notre modèle inventé donne des scores à quatre mots suivants. Le softmax les change en probabilités.

Le décodage glouton prend toujours le jeton le plus probable, ici plein. Il donne le même texte à chaque fois. Sur un long texte, il finit souvent par se répéter, car l’étape la plus probable peut ramener au même endroit.

Exemple travaillé : des scores aux probabilités

Mot suivantScoree puissance le scoreProbabilité
plein320,090,644
parti27,390,237
ici12,720,087
bleu01,000,032

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

La température durcit ou aplatit le choix

L’échantillonnage tire un jeton au hasard, chacun selon sa probabilité. Plein sort donc environ 64 fois sur 100, et bleu environ 3 fois.

La température change d’abord ces chances. On divise chaque score par elle, puis on applique le softmax. Sous 1, le premier jeton devient encore plus probable. Au-dessus de 1, les chances s’égalisent et les mots rares sortent plus souvent.

Exemple travaillé : trois températures

Mot suivantTempérature 0,5Température 1Température 2
plein0,8650,6440,455
parti0,1170,2370,276
ici0,0160,0870,167
bleu0,0020,0320,102

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Mille tirages à deux températures

Commande
docker exec jupyter python3 -c "import numpy as np; s = np.array([3, 2, 1, 0]); print([np.bincount(np.random.default_rng(7).choice(4, size=1000, p=np.exp(s / t) / np.exp(s / t).sum()), minlength=4).tolist() for t in (1.0, 0.5)])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le top-k et la graine

Le top-k garde seulement les k jetons les plus probables et répartit de nouveau leurs chances pour qu’elles fassent 1. Avec k = 2, ici et bleu ne peuvent jamais sortir.

Un tirage au hasard part d’une graine. La même graine donne les mêmes tirages, une nouvelle graine en donne d’autres. Voilà pourquoi une consigne peut donner des textes différents, et pourquoi une graine fixe rend un test répétable.

Exemple travaillé : top 2 à température 1

Mot suivantProbabilitéGardé ?Réparti de nouveau
plein0,644oui0,644 / 0,881 = 0,731
parti0,237oui0,237 / 0,881 = 0,269
ici0,087non0
bleu0,032non0

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Échantillonner avec une température et une graine

Code: python
import math
import random

mots = ["plein", "parti", "ici", "bleu"]
scores = [3, 2, 1, 0]      # les scores du modèle après « le bus est »
temperature = 1.0
graine = 1

puissances = []
for s in scores:
    puissances.append(math.exp(s / temperature))
total = sum(puissances)
probas = []
for p in puissances:
    probas.append(p / total)
print("probabilités :", [round(p, 3) for p in probas])

random.seed(graine)
tirages = random.choices(mots, weights=probas, k=8)
print("huit tirages :", tirages)
# Mettez graine à 2, puis cliquez sur Exécuter : autres tirages, mêmes probabilités.
# Puis mettez temperature à 0.3. Que deviennent les tirages ?

Une erreur fréquente

Attention

Beaucoup pensent qu’un modèle donne une nouvelle réponse parce qu’il a changé d’avis ou appris de vous. Ses nombres sont les mêmes. La différence vient du tirage au hasard, donc une graine fixe et les mêmes réglages donnent le même texte.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.