067 — Reconocimiento automático del habla
Parte: 05 — Lenguaje, visión, audio e IA multimodal
Nivel: avanzado · Horas estimadas: 6
Laboratorio: perception · Estado: EXECUTABLE_CORE
🎯 Propósito
Comprender reconocimiento automático del habla dentro de la evolución de la inteligencia artificial, implementar un experimento mínimo verificable y distinguir qué parte constituye evidencia frente a una afirmación todavía no comprobada.
📚 Resultados de aprendizaje
Al finalizar podrás:
- Explicar reconocimiento automático del habla usando los conceptos
ASR,espectrograma,transcripción,WER. - Ejecutar el laboratorio con una semilla explícita y revisar su contrato JSON.
- Identificar al menos un supuesto, una limitación y un riesgo de aplicación.
- Comparar el enfoque con la etapa anterior de la ruta de aprendizaje.
- Producir una evidencia reproducible y una conclusión que no exceda los datos.
🧩 Conceptos centrales
ASR, espectrograma, transcripción, WER
🗺️ Ubicación en el mapa de la IA
El reconocimiento automático del habla (ASR) fue durante décadas el banco de pruebas del modelado secuencial probabilístico (HMM + modelos de mezclas), luego de las redes recurrentes con CTC (que ya viste en OCR, clase 063) y hoy de los transformers encoder-decoder entrenados a escala masiva (Whisper, 2022). El ASR convierte la modalidad audio en texto y con ello conecta todo lo anterior de esta parte con la voz: es la entrada de los asistentes conversacionales, del subtitulado accesible (clase 072) y el complemento exacto de la síntesis de voz (clase 068).
📖 Fundamentos
🎙️ Del aire a los números
El micrófono convierte presión sonora en una señal continua que se muestrea (16 000 muestras/s es el estándar en ASR) y cuantiza (16 bits). Un segundo de voz son 16 000 números: demasiado crudo y redundante para modelar directamente. El primer paso es extraer una representación tiempo-frecuencia.
📊 Espectrogramas y MFCC
- Ventanas: la señal se corta en tramas de ~25 ms con salto (hop) de 10 ms — la voz es aproximadamente estacionaria a esa escala.
- FFT por trama: energía en cada frecuencia → espectrograma (matriz tiempo × frecuencia).
- Escala mel: los filtros se espacian según la percepción humana (más resolución en graves); con log de la energía → log-mel espectrograma, la entrada estándar de los modelos neuronales actuales (Whisper usa 80 bandas mel).
- MFCC: una transformada coseno discreta sobre el log-mel decorrelaciona los coeficientes; los primeros 12–13 describen la envolvente espectral (el "timbre" de cada fonema). Eran la entrada estándar de la era HMM-GMM.
🔗 El problema de alineación y CTC
Un audio de 3 s son ~300 tramas, pero la transcripción tiene ~10 palabras: no se sabe qué
trama corresponde a qué letra. CTC (Graves et al., 2006) resuelve la alineación igual
que en OCR: la red emite una distribución por trama sobre el alfabeto más el blanco ∅,
y la pérdida suma la probabilidad de todas las alineaciones que colapsan a la
transcripción correcta (algoritmo forward-backward, programación dinámica). CTC asume
independencia condicional entre tramas, por eso suele combinarse con un modelo de lenguaje
externo durante la decodificación (beam search).
🌐 Whisper: ASR como seq2seq a escala
Whisper (Radford et al., 2022) abandona CTC: un transformer encoder-decoder recibe el log-mel y genera el texto token a token, como una traducción audio→texto. Sus claves:
- Entrenado con 680 000 horas de audio-texto recolectadas de la web (supervisión débil), multilingüe y multitarea (transcribir, traducir, detectar idioma) con tokens especiales de control.
- Robusto a acentos, ruido y dominios sin fine-tuning — la escala y diversidad del corpus sustituyen la adaptación manual.
- Costo: decodificación autoregresiva (más lenta que CTC) y alucinaciones: en silencios o música puede generar texto plausible que nadie dijo.
📏 WER: la métrica del ASR
WER = (S + D + I) / N
con S sustituciones, D borrados, I inserciones (alineación de Levenshtein a nivel de palabra) y N las palabras de la referencia. Ojo: WER puede superar el 100 % (inserciones en exceso). Un WER global esconde estructura: los sistemas comerciales muestran WER significativamente peor para acentos regionales, hablantes no nativos y voces infantiles — la equidad se mide por subgrupo de hablantes, no en promedio.
🧮 Ejemplo trabajado
Referencia (N = 6): el modelo transcribe la voz humana
Hipótesis del ASR: el modelos transcribe voz humana ya
Alineación óptima:
el modelo transcribe la voz humana —
el modelos transcribe — voz humana ya
OK S OK D OK OK I
S = 1 (modelo→modelos), D = 1 (falta "la"), I = 1 (sobra "ya")
WER = (1 + 1 + 1) / 6 = 0.5 → 50 %
Nota cómo un error morfológico mínimo ("modelos") cuenta igual que inventar una palabra: WER es ciego a la gravedad semántica. Por eso en dominios críticos (medicina, justicia) se complementa con revisión de términos clave.
Tramas de un audio. Un clip de 2 s a 16 kHz con ventana de 25 ms y hop de 10 ms
produce 1 + (2000 − 25)/10 ≈ 198 tramas; con 80 bandas mel, la entrada del modelo es
una matriz de 198 × 80.
📊 Propiedades y comparación
| Era / sistema | Modelo acústico | Alineación | Datos típicos | Límite |
|---|---|---|---|---|
| HMM-GMM (1990s–2010s) | Mezclas gaussianas sobre MFCC | Estados HMM | 100–1 000 h transcritas | Pipeline complejo, frágil |
| RNN + CTC (2013–) | Red recurrente fin-a-fin | CTC (todas las alineaciones) | 1 000–10 000 h | Independencia condicional; necesita LM |
| Transformer seq2seq (Whisper, 2022) | Encoder-decoder sobre log-mel | Atención (implícita) | 680 000 h (supervisión débil) | Lento (autoregresivo); alucina en silencio |
flowchart LR
A[Onda de audio<br/>16 kHz] --> B[Tramas 25 ms<br/>hop 10 ms]
B --> C[FFT + filtros mel<br/>+ log]
C --> D[Log-mel espectrograma<br/>T x 80]
D --> E{Decodificación}
E -->|CTC| F[Distribución por trama<br/>+ colapso de blancos]
E -->|seq2seq| G[Decoder autoregresivo<br/>token a token]
F --> H[Texto]
G --> H
H --> I[Evaluación WER<br/>S+D+I sobre N]
I --> J[Análisis por subgrupo<br/>de hablantes]
⚠️ Errores conceptuales frecuentes
- "El ASR oye palabras." El modelo ve energía tiempo-frecuencia; "oír" la palabra correcta depende tanto del modelo de lenguaje implícito como de la acústica — por eso inventa palabras plausibles ante audio degradado.
- "WER 5 % significa que el 95 % de las transcripciones son correctas." WER es una tasa de error por palabra, no por transcripción: con frases de 20 palabras y errores independientes, casi dos tercios de las frases tendrían algún error.
- "Un buen WER promedio implica un sistema justo." Los errores se concentran en acentos y voces subrepresentadas en el entrenamiento; sin desglose por subgrupo, el promedio oculta a quién falla.
- "Whisper no puede equivocarse si el audio está en silencio." Al contrario: la decodificación autoregresiva sobre silencio o música es el caso típico de alucinación — texto fluido que nadie pronunció.
- "Más horas de audio siempre arreglan el dominio." Si tu dominio (jerga médica, radio de aviación) no está en el corpus, la escala general no lo cubre: hace falta adaptación con datos del dominio y léxico específico.
🚀 Del aprendizaje a la operación
Un ASR en producción añade: detección de actividad de voz (VAD) para no transcribir silencio, streaming con latencia parcial (transcripción incremental), diarización (¿quién habla?), puntuación y normalización inversa de números/fechas, métricas por subgrupo de hablantes y por término crítico, y un umbral de confianza que derive a transcripción humana cuando el costo del error lo exija (actas legales, indicaciones médicas).
🧪 Laboratorio
python lab.py
El laboratorio llama a ai_evolution.labs.run_lab("perception"). Esta
decisión evita 183 implementaciones divergentes: cada clase tiene un entrypoint
propio, pero los motores didácticos se prueban como una biblioteca común.
🔍 Evidencia esperada
- tipo de laboratorio y semilla;
- entradas o decisiones observables;
- resultado estructurado;
- lista
evidencecon hechos que pueden inspeccionarse; - lista
limitationsque impide presentar la demo como producción.
📓 Notebooks
- 📓
notebook.ipynb: recorrido guiado con la materia resumida. - ✍️
notebook_student.ipynb: ejercicios para resolver. - ✅
notebook_solution.ipynb: solución de referencia explicada.
📝 Evaluación
| Criterio | Peso |
|---|---|
| Comprensión conceptual | 25 % |
| Ejecución reproducible | 25 % |
| Interpretación basada en evidencia | 25 % |
| Riesgos, límites y mejora propuesta | 25 % |
Consulta assessment.md para preguntas y criterio de aceptación.
⚠️ Errores comunes
| Síntoma | Causa probable | Corrección |
|---|---|---|
| El código corre, pero no hay conclusión | Se confundió ejecución con aprendizaje | Explica qué demuestra y qué no demuestra |
| El resultado cambia sin explicación | No se registró semilla o configuración | Conserva semilla, versión y parámetros |
| Se promete uso real | Se extrapoló desde una demo educativa | Declara entorno, datos, límites y revisión humana |
| Se copia una métrica aislada | No existe baseline ni costo de error | Añade comparación y criterio de decisión |
❓ Preguntas frecuentes
¿Debo usar una API comercial?
No. El núcleo funciona localmente. Las extensiones LIVE se documentan por separado.
¿El laboratorio representa una implementación industrial?
No por sí solo. Enseña el contrato y el patrón; producción exige integración,
seguridad, observabilidad, pruebas y operación.
¿Dónde profundizo?
Revisa las especializaciones enlazadas en el README raíz y la ruta siguiente.
🔗 Referencias
- Jurafsky, D. y Martin, J. H. Speech and Language Processing (3e), cap. de Automatic Speech Recognition — web.stanford.edu/~jurafsky/slp3 — uso: desarrollo extendido del tema
- Graves, A. et al. (2006). "Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks" (ICML 2006) — cs.toronto.edu/~graves/icml_2006.pdf — uso: referencia consultada en su fuente original
- Radford, A. et al. (2022). "Robust Speech Recognition via Large-Scale Weak Supervision" (Whisper) — arXiv:2212.04356 — uso: fuente primaria del mecanismo estudiado
- Repositorio oficial de Whisper (OpenAI) — github.com/openai/whisper — uso: referencia consultada en su fuente original
- Documentación de librosa (análisis de audio: espectrogramas, MFCC) — librosa.org/doc — uso: referencia consultada en su fuente original
- Mozilla Common Voice (corpus abierto multilingüe de voz) — commonvoice.mozilla.org — uso: referencia consultada en su fuente original
📜 Papers que fundamentan esta clase
Bloque generado por
python scripts/link_papers_to_classes.py. La fuente espapers/catalog/papers.json.
| Paper | Año | Qué desbloqueó | Miniatura |
|---|---|---|---|
| P06 · Aprendizaje de secuencia a secuencia con redes neuronales | 2014 | Una única red aprende a mapear secuencias de longitud variable a secuencias de longitud variable, de extremo a extremo. | notebook |
Cada ficha explica el problema anterior, la matemática mínima, los límites y los errores de atribución más frecuentes. Para leerlas con método: cómo leer un paper de IA · anexos matemáticos.
📚 Bibliografía de apoyo
Bloque generado por
python scripts/link_sources_to_classes.py. Cada obra lleva su localizador verificado ensources/bibliography.json.
Los papers dicen de dónde salió el mecanismo. Estas obras lo desarrollan con el espacio que una clase no tiene: teoría completa, demostraciones y ejercicios.
| Obra | Edición | Localizador | Papel en esta clase |
|---|---|---|---|
| Jurafsky, Daniel y Martin, James H. — Speech and Language Processing | 2.ª (la 3.ª circula como borrador abierto sin ISBN) · 2009 | ISBN 9780131873216 · web de la obra | citada en las referencias de esta clase · obra de referencia de la parte 05 |
⬅️ Clase anterior
066 — Embeddings semánticos y similitud
➡️ Siguiente clase
068 — Síntesis de voz y clonación responsable
📝 Evaluación completa
❓ Preguntas
- Define reconocimiento automático del habla sin usar una marca o framework como definición.
- Explica la relación entre ASR, espectrograma, transcripción, WER.
- Ejecuta
lab.pydos veces con la misma semilla. ¿Qué debe conservarse? - Identifica una afirmación permitida y una afirmación exagerada sobre el resultado.
- Propón una prueba negativa o un caso límite.
🏆 Reto verificable
Amplía el resultado del laboratorio con una clave student_extension que incluya:
- el supuesto que estás probando;
- una medición o comprobación;
- la conclusión;
- una limitación.
✅ Criterio de aceptación
- [ ]
lab.pytermina con código 0. - [ ] El resultado contiene
kind,seed,evidenceylimitations. - [ ] La extensión no modifica el comportamiento de otras clases.
- [ ] La interpretación referencia datos impresos por el laboratorio.
- [ ] Se declara al menos un riesgo o condición de no uso.