Concepts d'IA en Python

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

Exécuter le code →
main.py
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.

  1. Modifiez les entrées ou les poids et prédisez la sortie avant d'exécuter.
  2. Affichez les valeurs intermédiaires pour suivre chaque étape du calcul.
  3. Résolvez les défis liés ci-dessous pour implémenter l'idée vous-même.
Exécuter dans l’IDE Python →

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.

Tous les défis