Greedy decoding takes the single best token at every step; beam search keeps the k best partial sequences alive. A language model gives you a probability for every next token — these are two ways to turn that into a finished sentence.
Where you meet it
- Every call to a generative model —
generate()in HuggingFace Transformers defaults to greedy. - Machine translation, summarization, speech recognition — input-grounded tasks where beam search shines.
- The
num_beamsargument:1is greedy, anything higher is beam search.
What it does
It picks which sequence the model actually emits. The model only scores tokens; the decoding strategy searches the exploding tree of continuations and commits to one path. Greedy and beam are the two classic maximization strategies — both try to find the highest-probability sentence, they just search differently wide.
For creative text the high-probability path is the boring one — there you sample, not maximize.
How it works
Greedy is one line of logic: at each step take the argmax token, append it, repeat. Fast, but it commits early — a tempting first token can lock you into a path whose total probability is poor, and it can never take it back.
Beam search hedges. It keeps the k best partial hypotheses (the beam width). Each step it expands all of them by every possible token, scores each new sequence by its total log-probability, then prunes back to the k best. At the end it returns the highest-scoring complete sequence. A slightly weaker start can win if its continuation is strong.
# greedy = argmax at each step
for step in sentence:
next = argmax(model(tokens)) # local best only
# beam search, width k
beams = [[]]
for step in sentence:
cand = expand(beams) # extend each beam by every token
beams = top_k(cand, key=total_logprob) # keep k best
best = max(beams, key=total_logprob)
Greedy is exactly beam search with k = 1. Scores use log-probabilities so the products of per-token probabilities become stable sums.
Watch out
- Beam ≠ global optimum. It is still a heuristic — a wider, not exhaustive, search. Pruning can drop the true best sequence early.
- Longer = lower score. Each extra token multiplies in another probability, so raw scores favor short sequences. You need a length penalty / normalization to compare hypotheses of different lengths fairly.
- Bigger beams can get worse. For open-ended generation, maximizing probability yields bland, repetitive text — the high-probability path is generic. Larger beams amplify this.
- For creative text, don't maximize — sample. Use temperature, top-k, or nucleus (top-p) sampling instead; reserve beam search for input-grounded tasks like translation.
Go deeper
- HuggingFace Transformers — Generation strategies (greedy, beam, sampling)
- HuggingFace — How to generate text: decoding methods explained
- Stanford CS224n — NMT, seq2seq & beam search (lecture notes, PDF)
- Jurafsky & Martin, SLP3 — decoding & beam search (free draft)
- Holtzman et al. — The Curious Case of Neural Text Degeneration (nucleus sampling)
Greedy-Decoding nimmt in jedem Schritt das einzelne Top-Token; Beam Search hält die k besten Teilsequenzen am Leben. Ein Sprachmodell liefert für jedes nächste Token eine Wahrscheinlichkeit — das sind zwei Wege, daraus einen fertigen Satz zu machen.
Wo es vorkommt
- Bei jedem Aufruf eines generativen Modells —
generate()in HuggingFace Transformers ist standardmäßig greedy. - Maschinelle Übersetzung, Zusammenfassung, Spracherkennung — input-gebundene Aufgaben, in denen Beam Search glänzt.
- Das Argument
num_beams:1ist greedy, alles darüber ist Beam Search.
Was es tut
Es entscheidet, welche Sequenz das Modell tatsächlich ausgibt. Das Modell bewertet nur Tokens; die Decoding-Strategie durchsucht den explodierenden Baum der Fortsetzungen und legt sich auf einen Pfad fest. Greedy und Beam sind die zwei klassischen Maximierungs-Strategien — beide suchen den wahrscheinlichsten Satz, nur unterschiedlich breit.
Bei kreativem Text ist der hochwahrscheinliche Pfad der langweilige — dort wird gesampelt, nicht maximiert.
Wie es funktioniert
Greedy ist eine Zeile Logik: in jedem Schritt das argmax-Token nehmen, anhängen, wiederholen. Schnell, aber es legt sich früh fest — ein verlockendes erstes Token kann dich auf einen Pfad mit schlechter Gesamtwahrscheinlichkeit zwingen, ohne Rückweg.
Beam Search hält sich offen. Es behält die k besten Teil-Hypothesen (die Beam-Weite). Pro Schritt erweitert es alle um jedes mögliche Token, bewertet jede neue Sequenz nach ihrer Gesamt-Log-Wahrscheinlichkeit und kürzt auf die k besten. Am Ende gibt es die bestbewertete vollständige Sequenz zurück. Ein etwas schwächerer Start gewinnt, wenn die Fortsetzung stark ist.
# greedy = argmax pro Schritt
for step in sentence:
next = argmax(model(tokens)) # nur lokales Optimum
# Beam Search, Weite k
beams = [[]]
for step in sentence:
cand = expand(beams) # jeden Beam um jedes Token erweitern
beams = top_k(cand, key=total_logprob) # k beste behalten
best = max(beams, key=total_logprob)
Greedy ist exakt Beam Search mit k = 1. Gerechnet wird mit Log-Wahrscheinlichkeiten, damit aus den Produkten der Token-Wahrscheinlichkeiten stabile Summen werden.
Worauf achten
- Beam ≠ globales Optimum. Es bleibt eine Heuristik — eine breitere, keine vollständige Suche. Das Pruning kann die wirklich beste Sequenz früh verwerfen.
- Länger = schlechterer Score. Jedes weitere Token multipliziert eine weitere Wahrscheinlichkeit hinein, rohe Scores bevorzugen also kurze Sequenzen. Du brauchst eine Length-Penalty / Normalisierung, um verschieden lange Hypothesen fair zu vergleichen.
- Größere Beams können schlechter werden. Bei offener Generierung liefert Wahrscheinlichkeits-Maximierung faden, wiederholten Text — der hochwahrscheinliche Pfad ist generisch. Breitere Beams verstärken das.
- Für kreative Texte nicht maximieren — sampeln. Stattdessen Temperature, Top-k oder Nucleus (Top-p) Sampling; Beam Search für input-gebundene Aufgaben wie Übersetzung reservieren.
Mehr dazu
- HuggingFace Transformers — Generation strategies (greedy, beam, sampling)
- HuggingFace — How to generate text: Decoding-Methoden erklärt
- Stanford CS224n — NMT, seq2seq & Beam Search (Lecture Notes, PDF)
- Jurafsky & Martin, SLP3 — Decoding & Beam Search (freier Entwurf)
- Holtzman et al. — The Curious Case of Neural Text Degeneration (Nucleus Sampling)