Diarização de falantes no telefone: um deep dive
Como rodamos diarização de falantes ponta a ponta em tempo real em um envelope de 4 W — sem subir um único segundo de áudio.
O problema
Diarização responde "quem falou e quando". É a diferença entre um transcript que é um muro de texto e um que é uma conversa. Sem diarização, "vamos lançar" não pertence a ninguém; com ela, aterrissa em um nome concreto e vira ação.
O pipeline
- VAD (detecção de atividade vocal) — porta de tudo o que vem depois. Só gastamos ciclos quando há fala de verdade. Nosso VAD é uma CNN de 200 KB sobre log-mel, rodando a cada 10 ms.
- Embedding de falante — extrai um vetor de 192 dim por segmento vozeado. Usamos um modelo da família ECAPA-TDNN destilado para 12 MB int8.
- Clusterização online — aglomerativa com refinamento. Novas evidências atualizam rótulos passados.
- Suavização — alternâncias menores que 400 ms são fundidas para não cintilar a UI.
O que é difícil no mobile
- O modelo de embedding precisa caber, no mesmo envelope de memória, junto com o modelo de ASR e o summarizer LLM.
- A clusterização precisa ser incremental — não dá para reagrupar a reunião inteira a cada passo. Usamos um clusterizador aglomerativo online com memória constante e distância cosseno.
- A UI não pode cintilar enquanto rótulos são refinados. Animamos a troca com cross-fade de 200 ms em vez de trocar o texto.
- Fala sobreposta (duas pessoas ao mesmo tempo) quebra a suposição de rótulo único. Rotulamos essas regiões com o falante dominante e marcamos o segmento como "overlap" para que o resumo a jusante baixe o peso.
Onde aterrissamos
Um modelo de embedding de 12 MB, algoritmo de clusterização em streaming com janela de 6 s e visão de transcript que anima trocas de rótulo em vez de pular. Latência mediana ponta a ponta até o primeiro rótulo: 950 ms no iPhone 15 Pro, 1,6 s no Pixel 8a.
O que ainda dói
- Vozes parecidas — mesma tessitura, mesmo sotaque, mesmo gênero — confundem o embedding nos primeiros ~30 segundos. Aparece na UI como "ainda aprendendo as vozes".
- Crosstalk em salas barulhentas degrada bruscamente. Estamos testando um pequeno pré-estágio de separação de fontes no dispositivo.