Diarización de hablantes en tiempo real a escala
July 20, 2025
•min read
Ingeniería
Figura 1: Separación de flujos de audio en tiempo real
El problema del “cocktail party”
Los humanos somos muy buenos concentrándonos en una sola voz dentro de una sala ruidosa. A las computadoras les cuesta.
En una llamada VoIP monocanal (habitual en telefonía heredada), el agente y el cliente quedan mezclados en un único flujo.
Para construir un agente de IA que sepa cuándo interrumpir, necesitas saber quién está hablando.
La arquitectura
1. Embeddings a nivel de frame
Troceamos el audio en ventanas de 500 ms y las pasamos por un codificador ligero (SpeechBrain ECAPA-TDNN).
Salida: un vector de 192 dimensiones que describe el “timbre” de ese fragmento.
2. Arquitectura híbrida
Dejamos atrás la diarización puramente interna (Pyannote) en favor de un enfoque híbrido:
- Diarización externa: ingerimos segmentos ya diarizados desde APIs de alto rendimiento (como Google speech-to-text u OpenAI).
- Verificación interna: ejecutamos localmente nuestra verificación ECAPA-TDNN de 192 dimensiones para “revalidar” y vincular identidades a perfiles de voz conocidos.
3. Restricciones de latencia
Las APIs en la nube resuelven el mapa de “¿quién habló y cuándo?”.
IdentityCall se encarga de la verificación “¿es este el agente X?”.
- Presupuesto: 50 ms de tiempo de procesamiento por frame para la verificación.
- Optimización: ejecutamos el codificador en ONNX Runtime sobre GPU, cuantizado a INT8.
Gestión del solapamiento
La parte más difícil es el “habla solapada” (aproximadamente el 10-15% de una llamada).
Los modelos estándar eligen al hablante “más fuerte”.
Nosotros usamos diarización multietiqueta, que asigna dos etiquetas de hablante a un mismo intervalo temporal si el embedding sugiere una mezcla.
Conclusión
Una buena diarización es el requisito previo de una buena transcripción. Si atribuyes el “Hola” del agente al cliente, todo tu contexto arranca roto.
Tags: