Concetti di IA in Python

Come i modelli linguistici generano testo: temperature e top-k in Python

Un modello linguistico produce un punteggio (logit) per ogni possibile token successivo. Le impostazioni di campionamento decidono come quei punteggi diventano una scelta; la temperature controlla la casualità e top-k tiene solo i candidati migliori.

Il concetto in parole semplici

Un modello linguistico produce un punteggio (logit) per ogni possibile token successivo. Le impostazioni di campionamento decidono come quei punteggi diventano una scelta; la temperature controlla la casualità e top-k tiene solo i candidati migliori.

Guarda come un modello linguistico sceglie il token successivo: layer normalization, temperature e campionamento top-k in Python puro.

Idee chiave

  • Una temperature sotto 1 rende l'output più prevedibile; sopra 1 più creativo.
  • Il campionamento top-k elimina i token improbabili così il testo resta in tema.
  • Il testo si genera un token alla volta, e ogni nuovo token torna come input.
  • La layer normalization mantiene i valori in un intervallo stabile attraverso molti strati.

Quando si usa?

  • Capire cosa succede dentro le reti neurali e le librerie di IA.
  • Imparare l'idea prima di implementarla nelle sfide corrispondenti.
  • Prepararti a corsi di machine learning, colloqui e progetti.

Guardalo in azione

Premi il dado per estrarre la parola successiva. Abbassa temperature o top-k per rendere la scelta più prevedibile.

Codice di esempio

Esegui codice →
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))

Output previsto

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']

Come funziona

layer_norm() riscala un vettore a media 0 e varianza 1, come fanno i Transformer in ogni blocco. probabilities() divide i logit per la temperature e applica softmax, quindi una temperature bassa rende più probabile la parola migliore. Top-k porta quasi a −∞ tutti i punteggi fuori dai migliori k prima del softmax.

Modifica i valori ed esegui il programma nel compilatore Python online CodeUtility senza installare Python.

Esercizi pratici

Modifica gli input e verifica i casi limite prima di usare dataset più grandi.

  1. Cambia gli input o i pesi e prevedi l'output prima di eseguire.
  2. Stampa i valori intermedi per seguire ogni passo del calcolo.
  3. Risolvi le sfide collegate qui sotto per implementare l'idea da solo.
Esegui nell’IDE Python →

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide