szó jelentését keresi. A DICTIOUS-ban nem csak a
szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a
szót egyes és többes számban mondani. Minden, amit a
szóról tudni kell, itt található. A
szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. A
és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.
Kiejtés
Főnév
Viterbi-algoritmus
- (matematika)
Viterbi-algoritmus
A **Viterbi-algoritmus** egy dinamikus programozási módszer, amelyet leggyakrabban rejtett Markov-modell (HMM) esetén alkalmaznak a legvalószínűbb állapotsorozat meghatározására. Az algoritmus hatékonyan találja meg a maximális valószínűségű úton alapuló megoldást, és széles körben használják olyan területeken, mint például a természetes nyelvfeldolgozás, beszédfelismerés és bioinformatika.
Probléma
Egy **rejtett Markov-modellben** adott:
- **Állapotok** (\(S\)): A rendszer állapotainak halmaza (\(s_1, s_2, \ldots, s_n\)).
- **Megfigyelések** (\(O\)): Egy megfigyelés-sorozat (\(o_1, o_2, \ldots, o_T\)).
- **Állapotátmeneti valószínűségek** (\(A\)): Az \(a_{ij}\) valószínűség, hogy \(s_i\) állapotból \(s_j\)-be lépünk: .
- **Megfigyelési valószínűségek** (\(B\)): Az \(b_j(o_t)\) valószínűség, hogy az \(o_t\) megfigyelést látjuk az \(s_j\) állapotban: .
- **Kezdeti valószínűségek** (\(\pi\)): Az állapotok kezdeti eloszlása: .
Feladat: Találjuk meg a legvalószínűbb állapotsorozatot (\(S^*\)), amely maximalizálja \(P(S | O)\)-t.
Működése
- Inicializáció:
A kezdő állapotok valószínűségének kiszámítása:
- Rekurzió:
A maximális valószínűségi úton keresztüli értékek kiszámítása időben haladva:
Ahol \(\delta_t(j)\) a maximális valószínűség, hogy a \(t\)-edik időpillanatban az állapot \(s_j\).
- Nyomkövetés (traceback):
Egy külön nyomkövetési mátrix (\(\psi_t(j)\)) tárolja az optimális előző állapotokat:
- Visszavezetés:
Az utolsó időpillanatból indulva követjük az állapotok sorozatát az optimális útvonal mentén.
Pszeudokód
VITERBI(O, S, π, A, B):
1. Inicializáció:
for j in S:
δ = π * B]
ψ = 0
2. Rekurzió:
for t = 2 to T:
for j in S:
δ = max(δ * A) * B]
ψ = argmax(δ * A)
3. Visszavezetés:
S_T = argmax(δ)
for t = T-1 to 1:
S_t = ψ
4. return (S_1, S_2, ..., S_T)
Példa
Bemenet
- **Állapotok**: \(S = \{\text{Sunny, Rainy}\}\)
- **Megfigyelések**: \(O = \)
- **Kezdeti valószínűségek**:
- **Állapotátmeneti mátrix**:
Kimenet
A legvalószínűbb állapotsorozat: \(\)
Python implementáció
import numpy as np
def viterbi(observations, states, start_prob, trans_prob, emit_prob):
T = len(observations) # Megfigyelések hossza
N = len(states) # Állapotok száma
# Inicializáció
delta = np.zeros((T, N))
psi = np.zeros((T, N), dtype=int)
path = np.zeros(T, dtype=int)
# Kezdeti lépés
for j in range(N):
delta = start_prob * emit_prob]
psi = 0
# Rekurzió
for t in range(1, T):
for j in range(N):
probabilities = * trans_prob for i in range(N)]
delta = max(probabilities) * emit_prob]
psi = np.argmax(probabilities)
# Nyomkövetés
path = np.argmax(delta)
for t in range(T-2, -1, -1):
path = psi]
return path
# Példa használat
states =
observations = # Megfigyelések:
start_prob =
trans_prob = , ]
emit_prob = , ]
# Legvalószínűbb állapotsorozat
state_path = viterbi(observations, states, start_prob, trans_prob, emit_prob)
print("Legvalószínűbb állapotsorozat:", for s in state_path])
Előnyök
- **Pontosság**: Garantáltan megtalálja a legvalószínűbb állapotsorozatot.
- **Hatékonyság**: Az algoritmus időbonyolultságú, ahol a megfigyelések száma, pedig az állapotok száma.
Hátrányok
- **Méretkorlát**: Nagy állapot- vagy megfigyelési halmaz esetén magas memóriaigény.
- **HMM-feltételek**: Csak Markov-feltételeket kielégítő rendszerekben alkalmazható.
Alkalmazások
- **Beszédfelismerés**: Hangokhoz tartozó szavak felismerése.
- **Természetes nyelvfeldolgozás**: Szófajok elemzése (POS tagging).
- **Bioinformatika**: Génsorozatok elemzése és összehasonlítása.
Fordítások