Kalbėtojų diarizacija realiu laiku dideliu mastu
July 20, 2025
•min read
Engineering
1 pav.: garso srautų atskyrimas realiu laiku
„Kokteilių vakarėlio” problema
Žmonės puikiai geba susikoncentruoti į vieną balsą triukšmingoje patalpoje. Kompiuteriams tai sunku.
Vienkanaliame VoIP skambutyje (įprastame senesnėje telefonijoje) agentas ir klientas sumaišomi į vieną srautą.
Kad sukurtumėte DI agentą, kuris žinotų, kada pertraukti, turite žinoti, kas kalba.
Architektūra
1. Kadro lygmens embeddingas
Garsą suskaidome į 500 ms langus ir juos leidžiame per lengvą koduotoją (SpeechBrain ECAPA-TDNN).
Rezultatas: 192 dimensijų vektorius, apibūdinantis to fragmento „tembrą”.
2. Hibridinė architektūra
Nutolome nuo grynai vidinės diarizacijos (Pyannote) link hibridinio požiūrio:
- Išorinė diarizacija: priimame iš anksto diarizuotus segmentus iš didelio pralaidumo API (pvz., Google speech-to-text ar OpenAI).
- Vidinė verifikacija: lokaliai vykdome savo 192 dimensijų ECAPA-TDNN verifikaciją, kad „dar kartą patikrintume” ir susietume tapatybes su žinomais balso profiliais.
3. Delsos apribojimai
Debesijos API tvarko „kas kada kalbėjo?” žemėlapį.
„IdentityCall” tvarko „ar tai agentas X?” verifikaciją.
- Biudžetas: 50 ms apdorojimo laiko vienam kadrui verifikacijai.
- Optimizavimas: koduotoją vykdome ONNX Runtime aplinkoje GPU, kvantuotą iki INT8.
Persidengimo tvarkymas
Sunkiausia dalis yra „persidengianti kalba” (maždaug 10–15 % skambučio).
Standartiniai modeliai renkasi „garsiausią” kalbėtoją.
Mes naudojame daugiaženklę diarizaciją, priskiriančią dvi kalbėtojų žymes tam pačiam laiko intervalui, jei embeddingas rodo mišinį.
Išvada
Gera diarizacija yra geros transkripcijos prielaida. Jei agento „Labas” priskirsite klientui, visas jūsų kontekstas pradeda griūti.
Tags: