Sofortantwort
Nucleus Sampling einfach erklärt
Sampling-Methode, die nur die wahrscheinlichsten Tokens bis zum Schwellenwert p nutzt.
- Kurz gesagt
- Dynamischer Kandidatenpool: Nur Tokens bis zur kumulativen Wahrscheinlichkeit p
- Typischer Einsatz
- Chat-Anwendungen, Kreatives Schreiben, Code-Generierung
- Wichtig zu wissen
- Standard-Methode für ChatGPT, Claude und die meisten Chat-LLMs
Nucleus Sampling im Überblick
Nucleus Sampling löst ein Problem der Textgenerierung: Wie wählt das Modell das nächste Wort?
Das Problem mit den Alternativen:
- Greedy: Nimmt immer das wahrscheinlichste Token → repetitiv, langweilig
- Top-k: Nimmt die Top-k Tokens → starr, ignoriert den Kontext
- Vollständiges Sampling: Alle Tokens → manchmal unsinnige Wörter
Nucleus Sampling (Top-p) als Lösung:
Kontext: "Die Hauptstadt von Frankreich ist ___"
Token-Wahrscheinlichkeiten:
Paris: 0.92
die: 0.03
eine: 0.02
bekanntlich: 0.01
... 0.02
Top-p = 0.95 → Kandidatenpool: {Paris (0.92), die (0.03)}
→ Fast immer "Paris", aber nicht zu 100 % deterministisch
Adaptivität in Aktion:
Kontext: "Mein Lieblings___"
Token-Wahrscheinlichkeiten:
essen: 0.15
film: 0.12
buch: 0.11
tier: 0.10
sport: 0.09
...
Top-p = 0.95 → Kandidatenpool: ~15 Tokens
→ Viel mehr Variation, weil der Kontext mehrdeutig ist
Technisch betrachtet
Algorithmus
def nucleus_sampling(logits, p=0.9, temperature=1.0):
# 1. Temperatur anwenden
scaled = logits / temperature
probs = softmax(scaled)
# 2. Absteigend sortieren
sorted_probs, sorted_indices = sort(probs, descending=True)
# 3. Kumulative Summe berechnen
cumsum = cumulative_sum(sorted_probs)
# 4. Alles über Schwellenwert p maskieren
mask = cumsum - sorted_probs > p
sorted_probs[mask] = 0
# 5. Neu normalisieren und samplen
sorted_probs = sorted_probs / sum(sorted_probs)
return sample(sorted_indices, sorted_probs)
Vergleich der Strategien
| Strategie | Pool-Größe | Adaptiv | Kreativität | Standard für |
|---|---|---|---|---|
| Greedy | 1 | Nein | Keine | Übersetzung |
| Top-k | k (fix) | Nein | Mittel | Ältere Modelle |
| Top-p | Variabel | Ja | Hoch | Chat-LLMs |
| Beam Search | k Beams | Nein | Keine | Summarization |