Comment les modèles de langage génèrent du texte : température et top-k en Python
Un modèle de langage produit un score (logit) pour chaque token suivant possible. Les réglages d'échantillonnage décident comment ces scores deviennent un choix ; la température contrôle le hasard et top-k ne garde que les meilleurs candidats.
Le concept en termes simples
Un modèle de langage produit un score (logit) pour chaque token suivant possible. Les réglages d'échantillonnage décident comment ces scores deviennent un choix ; la température contrôle le hasard et top-k ne garde que les meilleurs candidats.
Voyez comment un modèle de langage choisit le token suivant : layer normalization, température et échantillonnage top-k en Python pur.
Idées clés
- Une température inférieure à 1 rend la sortie plus prévisible ; supérieure à 1, plus créative.
- L'échantillonnage top-k retire les tokens improbables pour que le texte reste dans le sujet.
- Le texte est généré un token à la fois, chaque nouveau token étant réinjecté en entrée.
- La layer normalization garde les valeurs dans une plage stable à travers les nombreuses couches.
Quand l’utiliser ?
- Comprendre ce qui se passe à l'intérieur des réseaux de neurones et des bibliothèques d'IA.
- Apprendre l'idée avant de l'implémenter dans les défis correspondants.
- Se préparer aux cours d'apprentissage automatique, aux entretiens et aux projets.
À vous de jouer
Appuyez sur le dé pour tirer le mot suivant. Baissez la température ou top-k pour rendre le choix plus prévisible.
Code d’exemple
import math
import random
# Layer normalization rescales a vector to mean 0 and variance 1.
def layer_norm(x, eps=1e-5):
mean = sum(x) / len(x)
var = sum((v - mean) ** 2 for v in x) / len(x)
return [(v - mean) / math.sqrt(var + eps) for v in x]
print("layer norm:", [round(v, 3) for v in layer_norm([2.0, 4.0, 6.0, 8.0])])
# Next-token scores from a model; temperature and top-k shape the choice.
words = ["cat", "dog", "car", "sky"]
logits = [2.0, 1.5, 0.3, -1.0]
def probabilities(temperature=1.0, top_k=None):
scores = [l / temperature for l in logits]
if top_k: # keep only the k best scores
cutoff = sorted(scores, reverse=True)[top_k - 1]
scores = [s if s >= cutoff else -1e9 for s in scores]
exps = [math.exp(s - max(scores)) for s in scores]
return [e / sum(exps) for e in exps]
for t, k in [(1.0, None), (0.5, None), (1.0, 2)]:
print(f"temperature={t} top_k={k}:", [round(p, 2) for p in probabilities(t, k)])
random.seed(7)
print("sampled:", random.choices(words, weights=probabilities(0.8, 3), k=5))
Résultat attendu
layer norm: [-1.342, -0.447, 0.447, 1.342]
temperature=1.0 top_k=None: [0.54, 0.33, 0.1, 0.03]
temperature=0.5 top_k=None: [0.71, 0.26, 0.02, 0.0]
temperature=1.0 top_k=2: [0.62, 0.38, 0.0, 0.0]
sampled: ['cat', 'cat', 'dog', 'cat', 'cat']
Fonctionnement
layer_norm() ramène un vecteur à une moyenne de 0 et une variance de 1, comme le font les Transformers dans chaque bloc. probabilities() divise les logits par la température puis applique softmax, donc une température basse rend le meilleur mot plus probable. Top-k met presque à −∞ tous les scores hors des k meilleurs avant le softmax.
Modifiez les valeurs et exécutez le programme avec le compilateur Python en ligne CodeUtility, sans installation locale.
Exercices pratiques
Modifiez les entrées et testez les cas limites avant d’utiliser des données plus volumineuses.
- Modifiez les entrées ou les poids et prédisez la sortie avant d'exécuter.
- Affichez les valeurs intermédiaires pour suivre chaque étape du calcul.
- Résolvez les défis liés ci-dessous pour implémenter l'idée vous-même.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Normalisation de couche Normalisez chaque ligne vers une moyenne 0 et une variance 1, puis mettez à l'échelle et décalez, comme le fait chaque bloc Transformer. Moyen
- Échantillonnage avec température et top-k Choisissez le token suivant comme un modèle de langage : gardez les k logits les plus élevés, appliquez la température et échantillonnez. Moyen