Većina kašnjenja u živom prijevodu otpada na čekanje: na tok, na sljedeću riječ, na rečenicu. Jedan dio na koji možete utjecati jest način latencije: manje kašnjenja ili manje revizija.
Slušatelj koji čita živi prijevod vidi svaki redak nekoliko sekundi nakon što ga je govornik izgovorio. Taj razmak nije jedno kašnjenje nego nekoliko njih, nanizanih u lanac, a većina je oblik čekanja. Kad znate koje je čekanje koje, način latencije postaje lak izbor, a programeru koji gradi čitač pokazuje što prikazati i kada.
Prije brojki korisna je jedna usporedba: ljudski simultani tumač obično govori dvije do četiri sekunde iza govornika. Tumači taj razmak zovu ear-voice span, a s jezicima u kojima se glagol nalazi na kraju ne bore se čekanjem glagola, nego ga predviđaju ili rečenicu dijele na dijelove koji mogu stajati sami za sebe. Sekunda ili dvije kašnjenja nisu greška softvera; otprilike je to ono što čini vrlo dobar čovjek.
Svaka live transkripcija na VocalStacku prolazi kroz iste faze, istim redom, i svaka čeka onu prije sebe.
Izvorni tekst čitatelj gotovo dobiva dok se izgovara. Prijevod stiže sekundu ili dvije kasnije, a izgovorena rečenica dolazi nakon svog prijevoda, zato glasovni isječak uvijek stiže zadnji. Prvi vidljivi učinak lanca, međutim, pojavljuje se mnogo prije bilo kojeg glasa: sam tekst se pomiče.
Prvo što ljudi primijete u živom transkriptu jest da se najnovije riječi miču. Fraza se pojavi, promijeni i slegne. To je rad faze nacrta, a postoji iz razloga koji vrijedi za svaki sustav za prepoznavanje govora.
Prepoznavatelj riječ potvrđuje gledajući što slijedi nakon nje. „Kosa” i „kosa” zvuče isto dok se ne čuje okolni kontekst, a završni glas može pripadati ovoj riječi ili sljedećoj. Dok nema zvuka desno od riječi, njezin pravopis je pogađanje, pa su najnovije riječi u svakom živom transkriptu uvijek najmanje sigurne. Nacrt je jednostavno to pogađanje prikazano ranije umjesto da bude skriveno.
Svaki nacrt u potpunosti zamjenjuje živi rep: riječi čuli od posljednje potvrde, koje se još mijenjaju. Potvrda je konačna. Nikad se ne mijenja, nosi vremenske oznake na razini riječi, a potvrde su numerirane bez praznina tako da čitatelj može zamijetiti ako je jednu propustio.
Za programera to je jedino pravilo koje realtime API stalno naglašava: prikaži svaki potvrđeni segment, zatim najnoviji nacrt iza njih, a nacrt očisti kad stigne potvrda. Dodavanje nacrta umjesto njihove zamjene daje dupliran, treperav tekst; potvrda jednostavno pojede rep. WebSocket vodič gradi čitač upravo oko toga.
Za domaćina pomicanje teksta cijena je niskog kašnjenja. Prikazivanje riječi prije nego što je fraza gotova upravo je ono što transkript čini živim. Prijevod si, međutim, ne može priuštiti taj trik, jer se riječ može pogoditi iz pola fraze, ali se prijevod ne može.
Redoslijed riječi razlog je zašto prijevod ne može držati korak s nacrtom. Njemački glagol može stajati na kraju svoje klauzule, a japanski stavlja glagol na kraj. Svaki prevoditelj treba cijelu klauzulu prije nego što je vjerno prenese. Prijevod riječ po riječ slušatelju daje odlomke koje mora razriješiti kad se klauzula zatvori. Njemački je tumače odavno natjerao da čekaju glagol, mnogo prije nego što je softver to pokušao.
VocalStack zato prevodi rečenice, a ne segmente. Rečenice su podrazumijevano uključene, pa server, kad su one uključene, sastavlja potvrde u rečenicu i prevodi cijelu rečenicu. Dok je rečenica otvorena, njezin prijevod je privremen; kad se zatvori, prijevod je konačan. Čitač drži jedan unos po rečenici i zamjenjuje ga kako stižu ažuriranja.
Govor čeka još duže. Izgovara se samo zatvorena rečenica, jer bi se rečenica koja se još mijenja sintetizirala pri svakoj reviziji. Duga rečenica izgovara se u dijelovima, pa prvi može krenuti dok se ostali još izrađuju.
Kad su rečenice isključene, svaka potvrda dobiva vlastiti okvir prijevoda. Taj put ništa ne čeka, ali cijele rečenice čitaju se mnogo bolje.
Sva ta čekanja mjere se od trenutka kad zvuk stigne do VocalStacka. Za mnoge prijenose zvuk je već kasnio kad je stigao.
Kad je izvor stream, a ne mikrofon, zvuk već kasni prije nego što se išta transkribira. Zaostaje za rubom uživo, najnovijim trenutkom koji je stream objavio.
Običan HTTP audio stream, kakav objavljuje većina internetskih radijskih postaja, obično kasni jednu do tri sekunde. Server održava burst buffer: nekoliko sekundi nedavnog zvuka, poslanih odjednom da se plejer novog slušatelja može pokrenuti bez zastoja. Svaki slušatelj, uključujući VocalStack, počinje toliko unatrag. HLS je gori: njegove playliste pokreću klijenta tri segmenta iza ruba uživo, što u praksi znači nekoliko sekundi do pola minute, ovisno o duljini segmenta. Standardni DASH obično je u istom rasponu kao HLS; samo njegova varijanta niske latencije ide znatno ispod. Stanični „uživo” stream može biti uživo na način na koji je i pismo „aktualno”.
Ove brojke su približne i pripadaju streamu, a ne transkripciji: nijedna postavka na VocalStackovoj strani ne može ih vratiti. Ako te sekunde za događaj nešto znače, zvuk u fazu uvedite s mikrofona ili enkodera, a ne s javnog streama. Kašnjenje streama fiksirano je prije nego što VocalStack čuje ijednu riječ; način latencije je ono što zaista možete pomaknuti.
Način latencije radi jednu stvar: određuje ravnotežu između kašnjenja i točnosti. Postavka se nalazi pod Advanced kad se live transkripcija stvara, a na kartici Speed dok ona radi. Tamo oznaka glasi AUTO, SPEED ili ACCURACY (Fast se pojavljuje kao SPEED). Preko API-ja, session.update mijenja je usred streama.
Kompromis je onaj koji nazivi sugeriraju. Fast izbacuje tekst ranije, ali ga više revidira; Accuracy treba malo duže i manje ga revidira. Publika koja sjedi i čita prevedene titlove rijetko primijeti dodatnu sekundu, ali primijeti riječi koje se stalno mijenjaju. Zato je Accuracy često ljubaznija postavka, sve dok grafikon kašnjenja ostaje ravan. Auto otkriva što radi: redak koji je ubrzao da bi zatvorio razmak nosi značku FAST MODE u transkriptu domaćina, uz napomenu da je točnost tu možda niža.
Bez obzira na način, transkripcija mora biti spremna prije prve riječi, a njezina priprema jedino je kašnjenje koje lanac plaća samo jednom.
Na nekim paketima live transkripcija treba nekoliko sekundi da se pokrene. Koliko ovisi o paketu: redak Start-up speed na stranici s cijenama kreće se od hladnog starta do 15 sekundi na pay as you go do uvijek zagrijanog na Enterpriseu.
Preko API-ja čekanje se vidi kao okviri session.loading dok se sesija pokreće, pa session.ready; klijent šalje zvuk tek nakon toga. Slušatelj koji u međuvremenu otvori poveznicu vidi "Live. The first line appears in a moment." Kad transkripcija radi, ovo kašnjenje je iza vas, a jedino pitanje koje ostaje jest koliko preostalog kašnjenja nosite.
Dok live transkripcija radi, kartica Speed domaćina pokazuje što se sve ovo zbraja: trenutačni razmak između govornika i teksta, uz oznaku načina pored njega, te grafikon tog razmaka kroz snimku s prosjekom i vrhom. U samom transkriptu redak koji je stigao slušateljima kasno nosi značku s brojem sekundi između trenutka kad je izgovoren i trenutka kad je stigao.
Grafikon koji ostaje nizak i raven znači da način odgovara zvuku. Grafikon koji raste znači da lanac zaostaje. Na Accuracy to može biti trenutak za prijelaz na Auto, koji žrtvuje dio točnosti za brzinu dok se razmak ne zatvori.
Programeri dobivaju jedan broj umjesto toga. Kad se realtime sesija završi, session.done nosi stats.realtimeFactor, odnosno transkribirani zvuk podijeljen s vremenom utrošenim na njegovu transkripciju. Jedno upozorenje o konvenciji: u literaturi o prepoznavanju govora real-time factor obično znači obrnuto, vrijeme obrade podijeljeno s trajanjem zvuka, gdje je niže bolje. VocalStack ga prikazuje obrnuto, pa je ovdje više bolje: živa sesija je blizu 1, a ispod 1 znači da je zvuk stigao brže nego što ga je lanac mogao transkribirati.
Nijedna od ovih sekundi nije tajanstvena. Neke pripadaju streamu, neke riječi koja čeka sljedeću riječ, neke rečenici koju prijevod treba, a ostatak načinu latencije koji ste odabrali. API referenca ima detalje okvir po okvir, a demo na početnoj stranici pokazuje cijeli lanac u radu.