Een taaldetector geeft altijd een antwoord, zelfs op een hoestbui. Laat detectie aan voor duidelijke of gemengde audio, en geef de taal op wanneer er één taal wordt gesproken over ruis of met een zwaar accent.
Elke transcriptie begint met een vraag die de lezer nooit ziet: welke taal is dit? Gaat die fout, dan werkt de rest van de pipeline hard aan vloeiende onzin. Dit artikel legt uit waar een taaldetector naar luistert, hoe detectie zich gedraagt bij live audio en bij bestanden, en wanneer je beter zelf de taal opgeeft.
Een taaldetector begrijpt niet wat er wordt gezegd. Hij kijkt naar het geluid zelf: de voorraad medeklinkers en klinkers, hoe lettergrepen worden beklemtoond, het ritme van de zinnen en de korte, veelvoorkomende woorden waar elke taal op leunt. Spaans heeft een eigen klinkerset en ritme; Nederlands en Duits delen veel, maar verschillen op een handvol klanken. Een paar seconden duidelijke spraak is meestal genoeg om ze uit elkaar te houden.
Veel herkenners doen dit als bijproduct van het herkennen van de woorden. Ze bepalen de taal aan de hand van het begin van de audio, als een kans voor elke taal die ze kennen. Twee dingen volgen uit dat ontwerp. De kansen tellen altijd op tot één, dus er is geen antwoord "geen taal": stilte, een hoestbui of een muziekstootje krijgt ook een taal, vaak met een zelfverzekerde score erbij. En de beslissing wordt genomen op basis van het begin, wat het slechtste voorbeeld is dat je kunt kiezen. Veel opnames beginnen met een begroeting, namen en plaatsnamen, die weinig taalsignaal dragen: "Good morning, Maria, welcome to Berlin" is bijna net zo Duits als Engels. Andere opnames beginnen met stilte of een hoestbui, en een detector die daarop moet beslissen, beslist toch, met zekerheid, op niets. Ook echte audio doet dit: een Roemeense preek die begint met kamergeluid en "Bună dimineața" kan met volle overtuiging als Italiaans "Buona domenica" worden gehoord.
De prijs van een fout antwoord is ook erger dan het lijkt. Een herkenner die in de verkeerde taal decodeert, spelt niet verkeerd; hij herschrijft. "For God so loved the world", als Roemeens gedecodeerd, werd "Forgot to love the world". Het Roemeense "mândria slujește", als Engels gedecodeerd, werd "Pride serves", een correcte vertaling van een zin die niemand had willen laten vertalen. De woorden zijn vloeiend en het transcript laat geen teken zien dat er iets mis is, en juist dat maakt de fout duur.
Vijf dingen misleiden detectors het vaakst:
Welke hiervan je treffen, hangt ervan af of de audio live binnenkomt of al in een bestand staat.
Bij een live transcriptie is er geen hele opname om naar te kijken. De audio komt binnen terwijl er wordt gesproken, en het transcript moet er tegelijk mee komen. Dus wordt de taal gedetecteerd terwijl de spreker praat, en gevolgd als hij van taal wisselt. Dit is wat de notitie onder de schakelaar Spoken language betekent wanneer je in het Dashboard een live transcriptie start: de taal van de spreker wordt automatisch gedetecteerd, en die mag op elk moment wisselen.
Een wisseling wordt bevestigd voordat ze wordt toegepast, zodat één rumoerig stukje het transcript niet naar een andere taal trekt. De zwakke plek is het begin: als de eerste woorden een rumoerige begroeting zijn, kan de eerste regel in de verkeerde taal verschijnen. Taal opgeven voorkomt dat.
Bestanden werken anders, omdat de hele opname al aanwezig is.
Een bestand is een makkelijker probleem: je hoeft de eerste seconden niet te vertrouwen. Bij een bestand wordt de taal bepaald uit de opname als geheel, zodat een rumoerige begroeting aan het begin het niet kan beslissen.
De taal van een bestand is nog steeds een werkhypothese, geen eindoordeel. Een opname die echt halverwege van taal verandert, zoals een interview dat in de tweede helft van Engels naar Roemeens overgaat, wordt gevolgd in plaats van geforceerd, en een opname die de hele tijd tussen talen wisselt, wordt ook aangepakt.
Een detector die eenmaal beslist en nooit terugkijkt, is op de verkeerde plek zeker van zichzelf.
Een detector helpt niet veel wanneer de hele opname rumoerig is. Detectie is de standaard omdat ze meestal goed is en je niets kost. Voor sommige opnames moet je de taal echter opgeven, en het Dashboard zegt welke: de gesproken taal opgeven verbetert de nauwkeurigheid bij rumoerige opnames en zware accenten.
Dit zijn de gevallen waarin detectie het minst te werken heeft. Ruis haalt de aanwijzingen weg waar een detector op rekent; een zwaar accent schuift ze naar een andere taal; een nauw verwant paar biedt er al weinig. Een Engelse spreker met een sterk Portugees accent in een galmende zaal is moeilijk te plaatsen aan de hand van het geluid alleen, en als de detector hem verkeerd plaatst, wordt Engelse spraak in het transcript Portugees zolang de fout duurt. De taal opgeven haalt de vraag weg, zodat alle inspanning naar de woorden gaat.
Een korte checklist:
De taal opgeven is een instelling van de transcriptie, niet van je account, dus je kunt het per opname bepalen. Alles hierboven komt neer op één API-optie.
spokenLanguage weglaten betekent detecteren; session.update tijdens de streamIn de API is spokenLanguage een taalcode zoals en; laat je hem weg, dan wordt de taal gedetecteerd. Hij staat in de settings van een bestands- of linktranscriptie en in de opties van een realtime sessie. Detectie en opgave dekken dezelfde 100 talen. Vertaling naar maximaal 10 daarvan is een aparte keuze, en die hangt niet af van welke taal is gedetecteerd of opgegeven. Hoe vertaling gelijke tred houdt met de spraak, wordt behandeld in Vertragingen bij live vertaling, uitgelegd.
{ "name": "Board meeting", "settings": { "spokenLanguage": "en", "speakerLabels": "auto" } }
Een realtime sessie neemt dezelfde optie bij het aanmaken, en je kunt die wijzigen terwijl er audio binnenkomt. Een session.update-tekstframe met een nieuwe spokenLanguage geldt vanaf dat moment voor de spraak; door hem op "" of "auto" te zetten, keert de sessie terug naar detectie, en een niet-ondersteunde code wordt genegeerd. Een bijschriftweergave met een taalknop kan de operator de taal laten opgeven op het moment dat hij een verkeerde eerste regel ziet, zonder opnieuw te verbinden.
{ "type": "session.update", "spokenLanguage": "ro" }
De lijst met codes, met hun namen, staat op GET /v1/languages, waarvoor geen sleutel nodig is. De volledige realtime flow, van het aanmaken van een sessie op je server tot het lezen van concepten en vastgelegde tekst, staat in Realtime transcriptie via een WebSocket, en de interactieve referentie staat op {{api}}/docs. In het Dashboard is dezelfde keuze de schakelaar Spoken language wanneer je een nieuwe transcriptie start, en API-sleutels vind je onder Developers.