Didžioji tiesioginio vertimo delsos dalis – tai laukimas: srauto, kito žodžio, sakinio. Vienas dalykas, kurį galite valdyti, – delsos režimas: mažesnė delsa arba mažiau pataisymų.
Skaitytojas, žiūrintis tiesioginį vertimą, kiekvieną eilutę pamato kelias sekundes po to, kai kalbėtojas ją ištarė. Šis tarpas – ne vienas vėlavimas, o keli, susidedantys į grandinę, ir dauguma jų yra tam tikras laukimas. Žinant, kuris laukimas nuo ko priklauso, delsos režimą pasirinkti lengva, o kūrėjui, kuriantiems skaitytoją, aišku, ką vaizduoti ir kada.
Naudingas palyginimas prieš skaičius: žmogus sinchroninis vertėjas paprastai kalba dviem–keturiomis sekundėmis po kalbėtojo. Vertėjai tą tarpą vadina ausies–balso intervalu, o kalbose, kur veiksmažodis stovi sakinio gale, jie nelaukia veiksmažodžio, bet jį numato arba suskaido sakinį į dalis, kurios gali stovėti savarankiškai. Sekundė ar dvi vėlavimo nėra programinės įrangos trūkumas; tai maždaug tiek, kiek daro labai geras žmogus.
Kiekvienas tiesioginis transkribavimas VocalStack platformoje praeina tuos pačius etapus ta pačia tvarka, ir kiekvienas laukia prieš jį esančio.
Originalo kalbos tekstas pasiekia skaitytoją beveik tokį, kokį ištariama. Vertimas seka sekundę ar dvi vėliau, o kalbamas sakinys ateina po savo vertimo, todėl balso klipas visada pasirodo paskutinis. Pirmasis matomas grandinės efektas, tačiau, atsiranda gerokai anksčiau nei bet koks balsas: pats tekstas juda.
Pirmas dalykas, kurį žmonės pastebi tiesioginiame nuoraše, yra tai, kad naujausi žodžiai juda. Frazė pasirodo, keičiasi ir nusistovi. Tai juodraščio etapas, ir jis egzistuoja dėl priežasties, kuri galioja kiekvienam kalbos atpažintuvui.
Atpažintuvas žodį nusistato žiūrėdamas į tai, kas seka po jo. „I scream“ ir „ice cream“ skamba vienodai, kol neatėjo kitas žodis; galinis „s“ gali priklausyti šiam žodžiui arba kitam. Kol nėra garso žodžio dešinėje, jo rašyba yra spėjimas, todėl naujausi bet kurio tiesioginio nuorašo žodžiai visada yra mažiausiai patikimi. Juodraštis – tiesiog tas spėjimas, parodytas anksčiau, o ne paslėptas.
Kiekvienas juodraštis visiškai pakeičia gyvąją uodegą: žodžius, išgirstus nuo paskutinio patvirtinimo ir vis dar besikeičiančius. Patvirtinimas galutinis. Jis niekada nesikeičia, turi žodžių lygio laiko žymas, o patvirtinimai numeruojami be tarpų, kad skaitytojas galėtų pastebėti, jei praleido vieną.
Kūrėjui tai – viena taisyklė, kurios reikalauja realaus laiko API: atvaizduoti kiekvieną patvirtintą segmentą, tada paskutinį juodraštį po jų, o atėjus patvirtinimui juodraštį išvalyti. Juodraščių pridėjimas prie ankstesnių sukuria pasikartojantį, mirgantį tekstą; patvirtinimas tiesiog sunaudoja uodegą. WebSocket vadovėlis kaip tik ir kuria skaitytoją pagal šią taisyklę.
Šeimininkui judantis tekstas yra mažos delsos kaina. Žodžių rodymas dar prieš baigiant frazę ir yra tai, kas daro nuorašą gyvą. Tačiau vertimas to triuko negali sau leisti, nes žodį galima atspėti iš pusės frazės, o vertimo – negalima.
Žodžių tvarka – priežastis, kodėl vertimas negali sekti juodraščio. Vokiečių veiksmažodis gali stovėti sakinio pabaigoje, o japonų kalboje veiksmažodis visada paskutinis. Bet kuris vertėjas, norėdamas tiksliai perteikti, pirma turi visą sakinio dalį. Žodis po žodžio verčiant skaitytojas gauna fragmentus, kuriuos reikia perskaityti tik sakiniui pasibaigus. Vokiečių kalba interpretatoriams jau seniai privertė laukti veiksmažodžio, gerokai prieš tai, kai programinė įranga pradėjo tai bandyti.
Todėl VocalStack verčia sakinius, o ne segmentus. Sakiniai įjungti pagal numatytuosius nustatymus; su jais įjungtais serveris surenka patvirtinimus į sakinį ir išverčia visą jį. Kol sakinys atviras, jo vertimas laikinas; sakiniui užsidarius, vertimas tampa galutiniu. Skaitytojas laiko vieną įrašą kiekvienam sakiniui ir jį pakeičia atėjus naujinimams.
Kalbama dar ilgiau. Garsiai skaitomas tik uždaras sakinys, nes sakinys, kuris dar keičiasi, būtų iš naujo sintezuojamas kiekvieno pakeitimo metu. Ilgas sakinys skaitomas dalimis, todėl pirmoji dalis gali skambėti, kol kitos dar generuojamos.
Išjungus sakinius, kiekvienas patvirtinimas gauna savo vertimo kadrą. Šis kelias nieko nelaukia, bet visi sakiniai skaitosi gerokai geriau.
Visi šie laukimai matuojami nuo to momento, kai garsas pasiekia VocalStack. Daugeliui transliacijų garsas jau vėlavo, kai pasiekė.
Kai šaltinis yra srautas, o ne mikrofonas, garsas jau vėluoja, prieš dar bet ką transkribavus. Jis atsilieka nuo tiesioginio krašto – naujausio momento, kurį srautas jau paskelbė.
Paprastas HTTP garso srautas, toks, kokį publikuoja dauguma interneto radijo stočių, paprastai vėluoja sekundę ar tris. Serveris laiko išankstinio buferio: kelias sekundes naujausio garso, išsiųsto vienu kartu, kad naujo klausytojo grotuvas galėtų startuoti nesustodamas. Kiekvienas klausytojas, įskaitant VocalStack, prisijungia tiek atgal. HLS yra blogesnis: jo grojaraščiai klientą pradeda trimis segmentais už tiesioginio krašto, o tai praktikoje reiškia kelias sekundes iki pusės minutės, priklausomai nuo segmento ilgio. Įprastas DASH paprastai patenka į tą patį diapazoną kaip HLS; tik jo mažos delsos variantas nusileidžia gerokai žemiau. Stoties „tiesioginis“ srautas gali būti tiesioginis tik tokia prasme, kokia laiškas gali būti aktualus.
Šie skaičiai apytiksliai, ir jie priklauso srautui, o ne transkribavimui: joks VocalStack nustatymas jų neatgaus. Jei tos sekundės svarbios renginiui, garsą į etapą paduokite iš mikrofono ar kodavimo įrenginio, o ne iš viešo srauto. Srauto delsa nustatoma dar prieš tai, kai VocalStack išgirsta žodį; delsos režimas – tai, ką iš tikrųjų galite pakeisti.
Delsos režimas atlieka vieną dalyką: nustato pusiausvyrą tarp delsos ir tikslumo. Nustatymas yra po Advanced, kai kuriamas tiesioginis transkribavimas, o Speed skirtuke – kol jis veikia. Ten žetonas rodo AUTO, SPEED arba ACCURACY (Fast rodomas kaip SPEED). Per API session.update keičia režimą srauto metu.
Kompromisas toks, kokį sako pavadinimai. Fast tekstą išveda anksčiau, bet jo pakeičia daugiau; Accuracy šiek tiek užtrunka ilgiau ir keičia mažiau. Sėdintys žiūrovai, skaitantys išverstus subtitrus, retai pastebi papildomą sekundę, bet pastebi žodžius, kurie nuolat keičiasi. Todėl Accuracy dažnai yra švelnesnis nustatymas, jei delsos grafikas lieka lygus. Auto atskleidžia savo sprendimus: eilutė, kurią jis pagreitino, kad užpildytų spragą, šeimininko nuoraše turi žymą FAST MODE su pastaba, kad ten tikslumas gali būti mažesnis.
Bet kuriuo režimu transkribavimas turi būti paruoštas prieš pirmą žodį, o jo paruošimas – vienintelė delsa, kurią grandinė moka tik kartą.
Kai kuriuose planuose tiesioginis transkribavimas užtrunka kelias sekundes startuodamas. Kiek – priklauso nuo plano: eilutė „Start-up speed“ kainų puslapyje svyruoja nuo iki 15 sekundžių šalto paleidimo Pay as you go plane iki visada šilto Enterprise plane.
Per API laukimas matomas kaip session.loading kadrai, kol sesija startuoja, o paskui session.ready; klientas garsą siunčia tik po jo. Klausytojas, kuris tuo metu atidaro nuorodą, mato „Tiesiogiai. Pirmoji eilutė pasirodys netrukus.“ Kai transkribavimas jau veikia, ši delsa lieka praeityje, ir lieka tik klausimas, kiek likusios delsos tenka nešti.
Kol tiesioginis transkribavimas veikia, šeimininko Speed skirtukas rodo, kiek visa tai iš viso prideda: dabartinį tarpą tarp kalbėtojo ir teksto, šalia – režimo žetoną, ir įrašo metu to tarpo grafiką su vidurkiu ir piku. Nuorašo eilutėje, kuri klausytojams pasiekė pavėluotai, yra žymė su sekundžių skaičiumi tarp to, kada ji buvo ištarta, ir kada pasiekė.
Grafikas, kuris lieka žemas ir lygus, reiškia, kad režimas tinka garsui. Kylantis grafikas reiškia, kad procesas atsilieka. Su Accuracy tai gali būti momentas pereiti į Auto, kuris dalį tikslumo iškeičia į greitį, kol tarpas užsidaro.
Kūrėjai gauna vieną skaičių. Kai realaus laiko sesija baigiasi, session.done pateikia stats.realtimeFactor – perrašyto garso trukmę, padalintą iš laiko, praleisto jį transkribuojant. Įspėjimas dėl konvencijos: kalbos atpažinimo literatūroje realaus laiko faktorius paprastai reiškia atvirkštinį dydį – apdorojimo laiką, padalintą iš garso trukmės, kur mažesnis yra geresnis. VocalStack rodo atvirkščiai, todėl čia didesnis yra geresnis: tiesioginė sesija būna arti 1, o mažiau nei 1 reiškia, kad garsas atkeliavo greičiau, nei procesas galėjo jį transkribuoti.
Nė viena iš šių sekundžių nėra paslaptinga. Dalis priklauso srautui, dalis – žodžiui, laukiančiam kito žodžio, dalis – sakiniui, kurio vertimui reikia, o likusios – delsos režimui, kurį pasirinkote. Kadrų išsamumą aprašo API dokumentacija, o veikiančią grandinę galite pamatyti demonstracijoje pradžios puslapyje.