Skip to main content
Realtime sprekerdiarisatie op schaal

Realtime sprekerdiarisatie op schaal

July 20, 2025

9

min read

Engineering

Golfvorm van sprekerdiarisatie
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:

  1. Externe diarisatie: we nemen vooraf gediariseerde segmenten in van API’s met hoge doorvoer (zoals Google speech-to-text of OpenAI).
  2. 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:

DiarisatieAudioverwerkingMachine LearningRealtime