Realtime sprekerdiarisatie op schaal
July 20, 2025
•min read
Engineering
Figuur 1: audiostromen in realtime scheiden
Het “cocktailparty”-probleem
Mensen zijn er goed in om zich op één stem te concentreren in een rumoerige ruimte. Computers hebben er moeite mee.
In een monokanaals VoIP-gesprek (gebruikelijk in oudere telefonie) worden de agent en de klant samengevoegd tot één stroom.
Om een AI-agent te bouwen die weet wanneer die moet onderbreken, moet je weten wie er praat.
De architectuur
1. Embedding op frameniveau
We snijden de audio in vensters van 500 ms en halen ze door een lichte encoder (SpeechBrain ECAPA-TDNN).
Uitvoer: een 192-dimensionale vector die het “timbre” van dat fragment beschrijft.
2. Hybride architectuur
We stapten af van puur in-app diarisatie (Pyannote) en gingen over op een hybride aanpak:
- Externe diarisatie: we nemen vooraf gediariseerde segmenten in van API’s met hoge doorvoer (zoals Google speech-to-text of OpenAI).
- Interne verificatie: we draaien onze 192-dim ECAPA-TDNN-verificatie lokaal om te “dubbelchecken” en identiteiten te koppelen aan bekende stemprofielen.
3. Latentiebeperkingen
Cloud-API’s verzorgen de kaart van “wie sprak wanneer?”.
IdentityCall verzorgt de verificatie “is dit agent X?”.
- Budget: 50 ms verwerkingstijd per frame voor verificatie.
- Optimalisatie: we draaien de encoder in ONNX Runtime op GPU, gekwantiseerd naar INT8.
Omgaan met overlap
Het moeilijkste deel is “overlappende spraak” (ongeveer 10-15% van een gesprek).
Standaardmodellen kiezen de “luidste” spreker.
Wij gebruiken multilabel-diarisatie, waarbij twee sprekerlabels aan één tijdvak worden toegekend als de embedding op een mengeling wijst.
Conclusie
Goede diarisatie is de voorwaarde voor goede transcriptie. Als je het “Hallo” van de agent aan de klant toeschrijft, begint je hele context verkeerd.
Tags: