beam search decoding
Beam search er en afkodningsstrategi, der til hvert tidspunkt holder styr på de k mest sandsynlige sekvenser (beams) og udvælger den endelige sekvens med højest samlet sandsynlighed.
Kort fortalt
Beam search er en smartere måde at generere tekst på, hvor man ikke bare vælger det mest sandsynlige ord hver gang, men holder flere muligheder åbne for at finde en bedre samlet sætning.
- Kategori
- teknik
- Niveau
- øvet
Betydninger
1- 1
En afkodningsalgoritme for autoregressive sekvensmodeller, hvor man ved hvert tidskridt bevarer de k sekvenser med højest samlet log-sandsynlighed, og til sidst vælger den sekvens med højest sandsynlighed.
- Ved maskinoversættelse bruges beam search med k = 5 til at generere den mest sandsynlige oversættelse. — common practice
- Beam search kan kombineres med længdenormalisering for at undgå bias mod korte sætninger. — common practice
Hvornår bruges det
Beam search bruges primært i sekvensgenereringsmodeller som sprogmodeller, maskinoversættelse og billedtekstgenerering. Beam-width k (typisk 1-10) balancerer kvalitet og beregningstid: større k giver bedre resultater men er langsommere.
Kodeeksempel
def beam_search(model, start_token, k=5, max_len=50):
beams = [(start_token, 0.0)] # (sequence, log_prob)
for _ in range(max_len):
candidates = []
for seq, score in beams:
if seq[-1] == stop_token:
candidates.append((seq, score))
continue
probs = model.predict_next(seq)
for token, prob in probs.items():
candidates.append((seq + [token], score + math.log(prob)))
beams = sorted(candidates, key=lambda x: x[1], reverse=True)[:k]
return beams[0][0]En simpel implementation af beam search til en autoregressiv model med en forudsigelsesfunktion predict_next.
Oprindelse
Termen 'beam search' kommer fra kunstig intelligens og søgealgoritmer. 'Beam' (stråle) refererer til, at man kun ser på et smalt sæt af lovende stier gennem søgerummet.
Afledte ord
2Kilder
2- Sequence to Sequence Learning with Neural Networks (2014)
- Attention Is All You Need (2017)