Modelos Ocultos de Markov
“La realidad que ves no es la única realidad.” — Serial Experiments Lain
En el módulo 19 aprendimos que las cadenas de Markov describen secuencias donde el estado es visible: sabemos exactamente en qué estado estamos en cada momento. Pero muchos sistemas del mundo real no funcionan así. El clima real que experimenta Lain no se puede observar directamente — solo se ven sus consecuencias (¿trae paraguas o no?). El estado oculto genera las observaciones visibles, y nuestra tarea es razonar sobre lo invisible a partir de lo visible.
Eso es exactamente lo que resuelven los Modelos Ocultos de Markov (HMM).
Tres preguntas, un modelo
Un HMM bien definido permite responder tres tipos de preguntas fundamentales:
| Problema | Pregunta | Algoritmo |
|---|---|---|
| Evaluación | ¿Cuál es la probabilidad de que este modelo haya generado esta secuencia de observaciones? | Forward / Backward |
| Decodificación | Dada la secuencia de observaciones, ¿cuál es la secuencia de estados ocultos más probable? | Viterbi |
| Aprendizaje | Dados solo los datos de observaciones, ¿cómo ajustamos los parámetros del modelo? | Baum-Welch |
Contenido
| Sección | Tema | Idea clave |
|---|---|---|
| 20.1 | El problema y el modelo | Dos capas: estados ocultos + observaciones |
| 20.2 | Algoritmo Forward | Probabilidad de la secuencia en tiempo O(N²T) |
| 20.3 | Algoritmo Backward | Información futura; combinado con Forward → posteriors |
| 20.4 | Algoritmo de Viterbi | Secuencia de estados ocultos más probable |
| 20.5 | Baum-Welch | Aprender parámetros con EM |
| 20.6 | Aplicaciones | Reconocimiento de voz, NLP, bioinformática, finanzas |
Materiales y flujo de trabajo
| Paso | Material | Colab | Descripción |
|---|---|---|---|
| 1 | 20.1 El problema | — | HMM: dos capas, parámetros, ejemplo de Lain |
| 2 | 20.2 Forward | — | Evaluación de secuencias; traza completa |
| 3 | 20.3 Backward | — | Información hacia atrás; posteriors γ |
| 4 | Notebook 01 — Inferencia HMM | Implementar Forward, Backward, Viterbi; verificar contra traza | |
| 5 | 20.4 Viterbi | — | Decodificación; traza con backpointers |
| 6 | 20.5 Baum-Welch | — | Aprendizaje EM; una iteración completa |
| 7 | Notebook 02 — Baum-Welch | Convergencia, underflow, implementación en log-espacio | |
| 8 | 20.6 Aplicaciones | — | Cuatro dominios reales |
| 9 | Notebook 03 — Aplicaciones | POS tagging con HMM; Viterbi sobre oraciones reales |
Objetivos de aprendizaje
Al terminar este módulo podrás:
- Explicar la diferencia entre una cadena de Markov y un HMM, identificando las dos capas del modelo
- Escribir los parámetros completos de un HMM: π, A, B — y traducirlos a lenguaje natural
- Calcular manualmente la probabilidad de una secuencia de observaciones con el algoritmo Forward
- Calcular manualmente los valores β con el algoritmo Backward y verificar que coincide con Forward
- Combinar Forward y Backward para obtener las probabilidades posteriores γ_t(i)
- Ejecutar el algoritmo de Viterbi paso a paso, incluyendo el rastreo de backpointers
- Describir el ciclo E-M de Baum-Welch: qué calcula el E-paso y qué actualiza el M-paso
- Identificar el problema de underflow numérico y explicar por qué se usa log-espacio
- Aplicar HMMs a un dominio concreto (NLP, bioinformática, finanzas)
Prerrequisitos
| Concepto | Módulo |
|---|---|
| Probabilidad condicional, Bayes, distribuciones | 05 — Probabilidad |
| Cadenas de Markov, propiedad de Markov, distribución estacionaria | 19 — Cadenas de Markov |
Mapa conceptual
graph TD
A["Módulo 19: Cadenas de Markov"] --> B["HMM: estados ocultos + observaciones"]
B --> C["Tres problemas canónicos"]
C --> D["Evaluación: P(O|λ)"]
C --> E["Decodificación: secuencia más probable"]
C --> F["Aprendizaje: estimar λ"]
D --> G["Forward: α_t(i) — info pasada"]
D --> H["Backward: β_t(i) — info futura"]
G --> I["γ_t(i) = α·β / P(O|λ) — posterior"]
H --> I
E --> J["Viterbi: MAX en vez de suma"]
F --> K["Baum-Welch: EM con γ y ξ"]
K --> L["Aplicaciones: voz, NLP, bio, finanzas"]
Cómo ejecutar el script de imágenes
cd clase/20_hmm
python3 lab_hmm.py
Dependencias: numpy, matplotlib (ver requirements.txt).