Viterbi
-
Upload
diego-pereira -
Category
Documents
-
view
383 -
download
3
Transcript of Viterbi
Viterbi
Método para o cálculo de uma seqüencia de estados oculta mais provável a partir de uma seqüência observada. Seqüência oculta conhecida como Caminho de Viterbi.
Viterbi Ilustração
pt: probabilidade de transição
pe: pobabilidade de emissão
pi: probabilidade inicial do estado oculto
Os estados e as probabilidades são conhecidos a priori.
Problema: qual a seqüência de estados ocultos (caminho) que maximiza pi * pe1 * pt1 * pe2 * pt2 * pe3?
x, y,z?
a b c
x, y, z?
x, y,z?pt1 pt2
pe1
pe2
pe3
pi
Viterbi
Exemplo: temos um conjunto de estados ocultos X = {x, y, z}, uma seqüência observada a -> b -> c e as seguintes relações de probabilidade:
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.25
Prob y: 0.25
Prob z: 0.50
Passo: 1
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.25
Prob y: 0.25
Prob z: 0.50
Passo: 1
x
y
z
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.25
Prob y: 0.25
Prob z: 0.50
Passo: 1
x
y
z
0.25 * 0.5 * 0.25
0.25 * 0.4 * 0
.4
0.5 * 0.2 *
0.2
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.25
Prob z: 0.50
Passo: 1
x
y
z
0.03125
0.04
0.02
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.25
Prob z: 0.50
Passo: 1
x
y
z
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.01
Prob y: 0.25
Prob z: 0.50
Passo: 1
x
y
z
0.25 * 0.25 * 0.25
0.25 * 0.2 * 0.4
0.5 * 0.8 * 0
.2
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.08
Prob z: 0.50
Passo: 1
x
y
z
0.0156
0.02
0.08
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.08
Prob z: 0.50
Passo: 1
x
y
z
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.08
Prob z: 0.04
Passo: 1
x
y
z0.0
0.04
0.0156
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.08
Prob z: 0.04
Passo: 1
x
y
z
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.04
Prob y: 0.08
Prob z: 0.04
Passo: 2
x
y
z
x
y
z
0.04 * 0.5 * 0.25
0.08 * 0.2 * 0.2
0.04 * 0.2 *
0.8
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.0064
Prob y: 0.08
Prob z: 0.04
Passo: 2
x
y
z
x
y
z
0.005
0.0032
0.0064
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.0064
Prob y: 0.0256
Prob z: 0.04
Passo: 2
x
y
z
x
y
z
0.0025
0.0032
0.0256
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.0064
Prob y: 0.0256
Prob z: 0.0064
Passo: 2
x
y
z
x
y
z
0.00250.0064
0.0
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.0064
Prob y: 0.0256
Prob z: 0.0064
Passo: 2
x
y
z
x
y
z
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.004
Prob y: 0.0256
Prob z: 0.0064
Passo: 3
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
0.0016
0.004
0.0
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.004
Prob y: 0.002
Prob z: 0.0064
Passo: 3
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
0.0008
0.00.002
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.004
Prob y: 0.002
Prob z: 0.004
Passo: 3
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
0.00080.004
0.0
Viterbi
pe a b cx 0.25 0.25 0.50y 0.40 0.20 0.40z 0.20 0.80 0.00
pt x y zx 0.50 0.25 0.25y 0.40 0.20 0.40z 0.20 0.80 0.00
pix 0.25y 0.25z 0.50
a b c
x
y
z
Prob x: 0.004
Prob y: 0.002
Prob z: 0.004
Passo: 3
x
y
z
x
y
z
x
y
z
x
y
z
x
y
z
Viterbi
# y: lista ordenada de estados observados# X: lista de estados ocultos# sp: probabilidade inicial de cada estado oculto (lista)# tp: probabilidade de transição entre estados ocultos (matriz)# ep: probabilidade de emissão entre estados ocultos e estados observados def viterbi(y, X, sp, tp, ep): T = {} # passo 1: inicializa mapeamento estados vs. probabilidades iniciais for state in X: ## estado probabilidade inicial T[state] = ([state], sp[state])
Viterbi
# passo 2: calcula melhores sequencias (> v_prob) # para cada estado oculto correspondente a cada estado observado for observed_state in y: U = {} for next_state in X: path = None probmax = 0 for state in X: (v_path, v_prob) = T[state] p = ep[state][observed_state] * tp[state][next_state] v_prob *= p if v_prob > probmax: path = v_path + [next_state] probmax = v_prob U[next_state] = (path, probmax) T = U
Viterbi
# passo 3: escolhe seqüência (caminho de viterbi) # com maior probabilidade path = None probmax = 0 for state in X: (v_path, v_prob) = T[state] if v_prob > probmax: path = v_path probmax = v_prob return (path, probmax)