Diarisation des locuteurs en temps réel à grande échelle
July 20, 2025
•min read
Ingénierie
Figure 1 : séparation des flux audio en temps réel
Le problème du « cocktail party »
Les humains sont très doués pour se concentrer sur une seule voix dans une pièce bruyante. Les ordinateurs peinent.
Dans un appel VoIP monocanal (courant en téléphonie héritée), l’agent et le client sont mélangés dans un seul flux.
Pour construire un agent d’IA qui sait quand interrompre, vous devez savoir qui parle.
L’architecture
1. Embeddings au niveau de la frame
Nous découpons l’audio en fenêtres de 500 ms et les passons dans un encodeur léger (SpeechBrain ECAPA-TDNN).
Sortie : un vecteur à 192 dimensions qui décrit le « timbre » de ce fragment.
2. Architecture hybride
Nous avons délaissé la diarisation purement interne (Pyannote) au profit d’une approche hybride :
- Diarisation externe : nous ingérons des segments déjà diarisés depuis des API à haut débit (comme Google speech-to-text ou OpenAI).
- Vérification interne : nous exécutons localement notre vérification ECAPA-TDNN de 192 dimensions pour « revérifier » et lier les identités à des profils vocaux connus.
3. Contraintes de latence
Les API cloud résolvent la carte du « qui a parlé et quand ? ».
IdentityCall se charge de la vérification « est-ce bien l’agent X ? ».
- Budget : 50 ms de temps de traitement par frame pour la vérification.
- Optimisation : nous exécutons l’encodeur dans ONNX Runtime sur GPU, quantifié en INT8.
Gérer les chevauchements
La partie la plus difficile, c’est la « parole superposée » (environ 10-15 % d’un appel).
Les modèles standard choisissent le locuteur « le plus fort ».
Nous utilisons la diarisation multi-étiquette, qui attribue deux étiquettes de locuteur à un même intervalle temporel si l’embedding suggère un mélange.
Conclusion
Une bonne diarisation est le préalable d’une bonne transcription. Si vous attribuez le « Bonjour » de l’agent au client, tout votre contexte démarre faussé.
Tags: