Die meeste vertraging in regstreekse vertaling is wag: vir die stroom, vir die volgende woord, vir die sin. Die een deel wat jy beheer, is die vertragingsmodus: minder vertraging, of minder hersienings.
’n Luisteraar wat ’n regstreekse vertaling lees, sien elke reël ’n paar sekondes nadat die spreker dit gesê het. Daardie gaping is nie een vertraging nie, maar verskeie, wat langs ’n ketting bymekaar optel, en die meeste daarvan is ’n vorm van wag. As jy weet watter wag watter is, word die vertragingsmodus ’n maklike keuse, en dit vertel ’n ontwikkelaar wat ’n leser moet weergee, en wanneer.
’n Nuttige maatstaf voor die syfers: ’n menslike gelyktydige tolk praat gewoonlik twee tot vier sekondes agter die spreker. Tolke noem daardie gaping die oor-stem-span, en hulle hanteer tale wat die werkwoord aan die end plaas nie deur op die werkwoord te wag nie, maar deur dit te antisipeer, of deur die sin in stukke te verdeel wat op hulle eie kan staan. ’n Sekonde of twee vertraging is nie ’n gebrek in sagteware nie; dit is ongeveer wat ’n baie goeie mens doen.
Elke regstreekse transkripsie op VocalStack gaan deur dieselfde stadiums, in dieselfde volgorde, en elkeen wag vir die een voor dit.
Die teks in die oorspronklike taal bereik ’n leser amper net soos dit gepraat word. Die vertaling volg ’n sekonde of twee later, en die gesproke sin kom ná sy vertaling, daarom kom ’n stemopname altyd laaste aan. Die ketting se eerste sigbare effek kom egter lank voor enige stem: die teks self beweeg.
Die eerste ding wat mense in ’n regstreekse transkripsie opmerk, is dat die nuutste woorde beweeg. ’n Frase verskyn, verander en setel. Dit is die konsepstadium aan die werk, en dit bestaan om ’n rede wat op elke spraakherkenner van toepassing is.
’n Herkenner sit ’n woord vas deur te kyk na wat daarna kom. "I scream" en "ice cream" klink dieselfde totdat die volgende woord arriveer; ’n slot-"s" kan by hierdie woord of by die volgende hoort. Totdat daar oudio regs van ’n woord is, is die spelling daarvan ’n raaiwerk, so die nuutste woorde in enige regstreekse transkripsie is altyd die onseker een. ’n Konsep is eenvoudig daardie raaiwerk, vroeg getoon in plaas van versteek.
Elke konsep vervang die regstreekse stert heeltemal: die woorde wat sedert die laaste bevestiging gehoor is en nog verander. ’n Bevestiging is finaal. Dit verander nooit nie, dit dra woordvlak-tydsberekening, en bevestigings word sonder gapings genommer sodat ’n leser kan sien as een gemis is.
Vir ’n ontwikkelaar is dit die een reël wat die intydse API eis: weergee elke bevestigde segment, dan die nuutste konsep daarna, en maak die konsep leeg wanneer ’n bevestiging aankom. As konsepte bygevoeg word in plaas van vervang, ontstaan dubbele, flikkerende teks; die bevestiging verteer eenvoudig die stert. Die WebSocket-tutoriaal bou ’n leser presies hierom.
Vir ’n gasheer is teks wat beweeg die prys van lae vertraging. Woorde wys voordat die frase klaar is, is wat die transkripsie regstreeks laat voel. Die vertaling kan egter nie daardie truuk bekostig nie, want ’n woord kan uit ’n halwe frase geraai word, maar ’n vertaling kan nie.
Woordorde is die rede waarom vertaling nie by die konsep kan byhou nie. ’n Duitse werkwoord kan aan die end van sy bysin staan, en Japannees plaas die werkwoord laaste. Enige vertaler het die hele bysin nodig voordat hy dit getrou kan weergee. Woord-vir-woord vertaal gee ’n luisteraar fragmente wat herroep moet word wanneer die bysin sluit. Duits het tolke al lank voor sagteware dit probeer het, laat wag op die werkwoord.
VocalStack vertaal dus sinne, nie segmente nie. Sinne is standaard aangeskakel, en met hulle aan stel die bediener bevestigings in ’n sin saam en vertaal die hele sin. Solank die sin oop is, is die vertaling voorlopig; sodra hy sluit, is die vertaling finaal. ’n Leser hou een inskrywing per sin en vervang dit soos opdaterings aankom.
Spraak wag nog langer. Net ’n geslote sin word uitgespreek, want ’n sin wat nog verander, sou met elke hersiening weer gesintetiseer moet word. ’n Lang sin word in stukke uitgespreek, sodat die eerste kan speel terwyl die res gemaak word.
As sinne af is, kry elke bevestiging eerder sy eie vertalingsraam. Daardie pad wag vir niks nie, maar hele sinne lees baie beter.
Al hierdie wagte word gemeet vanaf die oomblik wat oudio VocalStack bereik. Vir baie uitsendings was die oudio al laat toe dit daar aankom.
Wanneer die bron ’n stroom eerder as ’n mikrofoon is, is die oudio al agter voordat enigiets getranskribeer word. Dit hink agter die regstreekse rand, die nuutste oomblik wat die stroom gepubliseer het.
’n Gewone HTTP-oudiostroom, die soort wat die meeste internetradiostasies publiseer, loop gewoonlik ’n sekonde of drie agter. Die bediener hou ’n uitbarstbuffer: ’n paar sekondes onlangse oudio, in een slag gestuur sodat ’n nuwe luisteraar se speler kan begin sonder om te hang. Elke luisteraar, VocalStack ingesluit, sluit so ver terug aan. HLS is erger: sy snitlyste begin ’n kliënt drie segmente agter die regstreekse rand, wat in die praktyk beteken verskeie sekondes tot ’n halwe minuut, na gelang van die segmentlengte. Standaard DASH beland gewoonlik in dieselfde reeks as HLS; net die variant met lae vertraging kom ver daaronder uit. ’n Stasie se "regstreekse" stroom kan regstreeks wees op dieselfde manier as ’n brief aktueel is.
Hierdie syfers is benaderd, en hulle behoort aan die stroom, nie aan die transkripsie nie: geen instelling aan VocalStack se kant kan hulle terugwin nie. As daardie sekondes vir ’n gebeurtenis saakmaak, voer die oudio vanaf ’n mikrofoon of ’n enkodeerder in eerder as vanaf ’n openbare stroom. Stroomvertraging is vas voordat VocalStack ’n woord hoor; die vertragingsmodus is wat jy werklik kan skuif.
Die vertragingsmodus doen een ding: dit stel die balans tussen vertraging en akkuraatheid. Die instelling staan onder Advanced wanneer ’n regstreekse transkripsie geskep word, en op die Speed-tab terwyl dit loop. Daar lees die merker AUTO, SPEED of ACCURACY (Fast verskyn as SPEED). Oor die API verander session.update dit terwyl die stroom loop.
Die ruil is die een wat die name aandui. Fast kry teks vroeër uit maar hersien meer daarvan; Accuracy neem ’n bietjie langer en hersien minder. ’n Gehoor wat sit en vertaalde onderskrifte lees, merk selde ’n ekstra sekonde op, maar merk wel woorde op wat aanhou verander. Accuracy is dus dikwels die vriendeliker instelling, solank die vertragingsgrafiek plat bly. Auto wys sy kaarte openlik: ’n reël wat dit versnel het om ’n gaping te sluit, dra ’n FAST MODE-kenteken in die gasheer se transkripsie, met ’n nota dat akkuraatheid daar laer kan wees.
Wat die modus ook al is, die transkripsie moet gereed wees voor die eerste woord, en dit gereed maak is die een vertraging wat die ketting net een keer betaal.
Op sommige planne neem ’n regstreekse transkripsie ’n paar sekondes om te begin. Hoe lank hang af van die plan: die Start-up speed-ry op die prysblad loop van ’n koue begin van tot 15 sekondes op Pay as you go tot altyd warm op Enterprise.
Oor die API verskyn die wag as session.loading-rame terwyl die sessie begin, dan ’n session.ready; die kliënt stuur eers daarna oudio. ’n Luisteraar wat intussen die skakel oopmaak, sien "Regstreeks. Die eerste reël verskyn binnekort." Sodra die transkripsie loop, is hierdie vertraging agter jou, en die enigste vraag wat oorbly, is hoeveel van die oorblywende vertraging jy saamdra.
Terwyl ’n regstreekse transkripsie loop, wys die gasheer se Speed-tab waarop dit alles neerkom: die huidige gaping tussen die spreker en die teks, met die modusmerker langs, en ’n grafiek van daardie gaping oor die opname heen met sy gemiddelde en piek. In die transkripsie self dra ’n reël wat laat by luisteraars uitgekom het, ’n kenteken met die aantal sekondes tussen wanneer dit gepraat is en wanneer dit aangekom het.
’n Grafiek wat laag en plat bly, beteken die modus pas by die oudio. ’n Stygende grafiek beteken die pyplyn raak agterstallig. Op Accuracy kan dit die oomblik wees om na Auto oor te skakel, wat ’n bietjie akkuraatheid vir spoed ruil totdat die gaping sluit.
Ontwikkelaars kry eerder ’n enkele getal. Wanneer ’n intydse sessie eindig, dra session.done stats.realtimeFactor, die getranskribeerde oudio gedeel deur die tyd wat aan die transkribeer daarvan spandeer is. Een konvensie-waarskuwing: in die spraakherkenningsliteratuur beteken realtime factor gewoonlik die omgekeerde, verwerkingstyd oor oudiotyd, waar laer beter is. VocalStack rapporteer dit andersom, so hier is hoër beter: ’n regstreekse sessie hou naby 1, en onder 1 beteken oudio het vinniger aangekom as wat die pyplyn dit kon transkribeer.
Geen van hierdie sekondes is geheimsinnig nie. Sommige behoort aan die stroom, sommige aan ’n woord wat op die woord ná dit wag, sommige aan die sin wat ’n vertaling nodig het, en die res aan die vertragingsmodus wat jy gekies het. Die API-verwysing het die raam-vir-raam-detail, en die demo op die tuisblad wys die ketting aan die werk.