Ուղիղ թարգմանության ուշացման մեծ մասը սպասում է՝ հոսքին, հաջորդ բառին, նախադասությանը։ Միակ մասը, որը դուք կարող եք կառավարել, ուշացման ռեժիմն է՝ ավելի քիչ ուշացում կամ ավելի քիչ վերանայում։
Ունկնդիրը, ով կարդում է ուղիղ թարգմանությունը, յուրաքանչյուր տող տեսնում է խոսնակի ասելուց մի քանի վայրկյան անց։ Այդ ուշացումը մեկը չէ, այլ մի քանիսը, որոնք գումարվում են շղթայի երկայնքով, և դրանցից շատերը ուրիշ բանի սպասում են։ Երբ հստակ գիտեք, թե որ սպասումն է որը, ուշացման ռեժիմի ընտրությունը դառնում է պարզ, իսկ ընթերցող կառուցող ծրագրավորողը գիտի, թե ինչ և երբ ցուցադրի։
Չափանիշ՝ թվերից առաջ. մարդ-հարթեցողը սովորաբար խոսնակից երկու-չորս վայրկյան ետ է խոսում։ Թարգմանիչները այդ բացն անվանում են ear-voice span, և բառերի կարգը վերջում ունեցող լեզուներում նրանք չեն սպասում բային, այլ կանխատեսում են այն կամ նախադասությունը բաժանում են առանձին կտորների։ Մեկ-երկու վայրկյան ուշացումը ծրագրային ապահովման թերություն չէ. մոտավորապես այնքան է, ինչքան լավ մարդն է անում։
VocalStack-ի ամեն ուղիղ տառադարձում անցնում է նույն փուլերով, նույն հերթականությամբ, և յուրաքանչյուրը սպասում է նախորդին։
Օրիգինալ լեզվով տեքստը ընթերցողին հասնում է գրեթե այնպես, ինչպես խոսվում է։ Թարգմանությունը գալիս է մեկ-երկու վայրկյան անց, իսկ խոսված նախադասությունը՝ իր թարգմանությունից հետո, և դրա համար ձայնային հատվածը միշտ վերջինն է հասնում։ Շղթայի առաջին տեսանելի ազդեցությունը, սակայն, շատ ավելի վաղ է գալիս, քան ցանկացած ձայն. տեքստն ինքը շարժվում է։
Ուղիղ տեքստում առաջինը, որ մարդիկ նկատում են, այն է, որ ամենաթարմ բառերը շարժվում են։ Արտահայտությունը հայտնվում է, փոխվում և հաստատվում։ Սա սևագրի փուլի աշխատանքն է, և այն գոյություն ունի ցանկացած խոսքի ճանաչիչի համար։
Ճանաչիչը բառը որոշում է՝ նայելով դրան հաջորդող բառին։ «I scream»-ը և «ice cream»-ը նույնն են հնչում, մինչև հաջորդ բառը գա, իսկ վերջի «s»-ը կարող է պատկանել թե՛ այս, թե՛ հաջորդ բառին։ Մինչև բառից աջ աուդիո չլինի, նրա գրությունը ենթադրություն է, ուստի ցանկացած ուղիղ տեքստի ամենաթարմ բառերն ամենաքիչ որոշակին են։ Սևագիրը պարզապես այդ ենթադրությունն է, որը ցուցադրվում է վաղ, այլ ոչ թե թաքցվում։
Յուրաքանչյուր սևագիր ամբողջությամբ փոխարինում է ուղիղ պոչը՝ վերջին հաստատումից հետո լսված բառերը, որոնք դեռ փոխվում են։ Հաստատումը վերջնական է. այն երբեք չի փոխվում, կրում է բառ-մակարդակի ժամանակագրություն, և հաստատումները համարակալված են առանց բացերի, որպեսզի ընթերցողը կարողանա իմանալ, եթե մեկը բաց է թողել։
Ծրագրավորողի համար սա realtime API-ի միակ կանոնն է, որը նա անփոփոխ պահանջում է. ցուցադրել յուրաքանչյուր հաստատված հատված, ապա վերջին սևագիրը դրանցից հետո, և սևագիրը մաքրել, երբ հաստատումը գա։ Սևագրերը ավելացնելու փոխարեն փոխարինելը կրկնվող ու ցնցվող տեքստ է առաջացնում. հաստատումը պարզապես կլանում է պոչը։ WebSocket ձեռնարկը կառուցում է ընթերցող հենց այս սկզբունքով։
Հոսթի համար տեքստի շարժումը ցածր ուշացման գինն է։ Բառեր ցույց տալ նախքան արտահայտության ավարտը՝ այն է, ինչ տառադարձումը կենդանի է դարձնում։ Թարգմանությունը, սակայն, այս հնարքը չի կարող թույլ տալ, որովհետև բառը կարելի է կռահել կես արտահայտությունից, իսկ թարգմանությունը՝ ոչ։
Բառերի կարգն է պատճառը, թե ինչու թարգմանությունը չի կարող քայլ պահել սևագրի հետ։ Գերմաներենում բայը կարող է նախադասության վերջում լինել, իսկ ճապոներենը բայը դնում է վերջում։ Ցանկացած թարգմանիչ նախ պետք է ունենա ամբողջ կառուցվածքը, որպեսզի այն հավատարմորեն թարգմանի։ Բառ առ բառ թարգմանելը ունկնդրին կտա բեկորներ, որոնք պետք է վերծանել, երբ կառուցվածքը փակվի։ Գերմաներենը թարգմանիչներին բային սպասել է տվել դեռ այն ժամանակ, երբ ծրագրակազմը դա չէր փորձում։
Ուստի VocalStack-ը թարգմանում է նախադասությունները, ոչ թե հատվածները։ Նախադասությունները լռելյայն միացված են, և երբ դրանք միացած են, սերվերը հաստատումները հավաքում է նախադասության մեջ և թարգմանում ամբողջը։ Մինչ նախադասությունը բաց է, դրա թարգմանությունը նախնական է. երբ այն փակվի, թարգմանությունը վերջնական է։ Ընթերցողը ունի մեկ գրառում յուրաքանչյուր նախադասության համար և այն փոխարինում է, երբ թարմացումներ են գալիս։
Ձայնը դեռ ավելի երկար է սպասում։ Ձայնավորվում է միայն փակ նախադասությունը, որովհետև փոփոխվող նախադասությունը յուրաքանչյուր վերանայման ժամանակ նորից կսինթեզվեր։ Երկար նախադասությունը ձայնավորվում է կտորներով, որպեսզի առաջինը նվագարկվի, մինչ մնացածները պատրաստվում են։
Երբ նախադասությունները անջատված են, յուրաքանչյուր հաստատում ստանում է իր թարգմանության կադրը։ Այդ ուղին ոչինչ չի սպասում, բայց ամբողջական նախադասությունները շատ ավելի լավ են կարդացվում։
Այս բոլոր սպասումները չափվում են այն պահից, երբ աուդիոն հասնում է VocalStack-ին։ Շատ հեռարձակումների դեպքում աուդիոն արդեն ուշացած էր, երբ հասավ։
Երբ աղբյուրը խոսափողի փոխարեն հոսք է, աուդիոն արդեն հետ է մնացած, նախքան որևէ բան տառադարձվի։ Այն ետ է մնում ուղիղ եզրից՝ հոսքի հրապարակած ամենաթարմ պահից։
Պարզ HTTP աուդիո հոսքը, այն տեսակը, որ հրապարակում են ինտերնետ ռադիոկայանների մեծ մասը, սովորաբար մեկից երեք վայրկյան ետ է լինում։ Սերվերը պահում է burst buffer՝ վերջին մի քանի վայրկյանի աուդիո, որը մեկ անգամից է ուղարկվում, որպեսզի նոր ունկնդրի նվագարկիչը կարողանա առանց կանգի սկսել։ Յուրաքանչյուր ունկնդիր, ներառյալ VocalStack-ը, այդքան հետ է միանում։ HLS-ը ավելի վատ է. նրա playlist-ները հաճախորդին սկսում են երեք հատված ետ ուղիղ եզրից, ինչը գործնականում նշանակում է մի քանի վայրկյանից մինչև կես րոպե՝ կախված հատվածի երկարությունից։ Սովորական DASH-ը սովորաբար նույն միջակայքում է, ինչ HLS-ը. միայն նրա ցածր ուշացման տարբերակն է շատ ավելի ցածր։ Ռադիոկայանի «ուղիղ» հոսքը կարող է ուղիղ լինել այնպես, ինչպես նամակը կարող է թարմ լինել։
Այս թվերը մոտավոր են, և դրանք պատկանում են հոսքին, ոչ թե տառադարձմանը. VocalStack-ի կողմում ոչ մի կարգավորում չի կարող դրանք հետ բերել։ Եթե այդ վայրկյանները կարևոր են իրադարձության համար, աուդիոն մուտքագրեք խոսափողից կամ կոդավորիչից՝ հրապարակային հոսքի փոխարեն։ Հոսքի ուշացումը ստեղծվում է մինչ VocalStack-ը որևէ բառ լսելը. ուշացման ռեժիմն է, որ իրականում կարող եք շարժել։
Ուշացման ռեժիմը միայն մեկ բան է անում. սահմանում է հավասարակշռությունը ուշացման և ճշգրտության միջև։ Կարգավորումը գտնվում է Advanced-ի տակ, երբ ստեղծվում է ուղիղ տառադարձում, իսկ աշխատելու ընթացքում՝ Speed ներդիրում։ Այնտեղ չիպը ցույց է տալիս AUTO, SPEED կամ ACCURACY (Fast-ը հայտնվում է որպես SPEED)։ API-ի միջոցով session.update-ը փոխում է ռեժիմը հոսքի ընթացքում։
Փոխզիջումն այն է, ինչ անուններն են հուշում։ Fast-ը տեքստը ավելի շուտ է դուրս բերում, բայց ավելի շատ է վերանայում, Accuracy-ը մի քիչ ավելի է տևում և ավելի քիչ է վերանայում։ Թարգմանված ենթագրեր կարդացող նստած լսարանը հազվադեպ է նկատում լրացուցիչ մեկ վայրկյան, բայց նկատում է բառեր, որոնք անընդհատ փոխվում են։ Ուստի Accuracy-ն հաճախ ավելի բարի կարգավորում է, քանի դեռ ուշացման գրաֆիկը հարթ է մնում։ Auto-ն իր խաղաքարտերը բաց է անում. այն տողը, որը արագացվել է բացը փակելու համար, հոսթի տառադարձման մեջ կրում է FAST MODE նշանը՝ այն նշումով, որ այնտեղ ճշգրտությունը կարող է ցածր լինել։
Ինչ ռեժիմ էլ լինի, տառադարձումը պետք է պատրաստ լինի առաջին բառից առաջ, և դրա պատրաստումն այն մեկ ուշացումն է, որ շղթան վճարում է միայն մեկ անգամ։
Որոշ պլաններով ուղիղ տառադարձումը մի քանի վայրկյան է պահանջում սկսվելու համար։ Քանի վայրկյան, կախված է պլանից. գների էջի Start-up speed տողը սկսում է սառը մեկնարկից մինչև 15 վայրկյան pay as you go-ի համար, մինչև միշտ տաք Enterprise-ի համար։
API-ի միջոցով սպասումը երևում է որպես session.loading կադրեր, մինչ սեսիան սկսվում է, ապա՝ session.ready. հաճախորդը աուդիո ուղարկում է միայն դրանից հետո։ Եթե ունկնդիրը այդ ընթացքում բացի հղումը, տեսնում է «Ուղիղ։ Առաջին տողը շուտով կհայտնվի»։ Երբ տառադարձումը աշխատում է, այս ուշացումն անցած է, և մնում է միայն այն հարցը, թե մնացած ուշացումից որքանն եք տանում։
Ուղիղ տառադարձման ընթացքում հոսթի Speed ներդիրը ցույց է տալիս, թե ինչին է հանգում այս ամենը. ընթացիկ բացը խոսնակի և տեքստի միջև, կողքին՝ ռեժիմի չիպը, և գրաֆիկ, որը ցույց է տալիս այդ բացը ողջ ձայնագրության ընթացքում՝ իր միջին և առավելագույն արժեքներով։ Տառադարձման տեքստում այն տողը, որը ունկնդիրներին ուշ է հասել, կրում է նշան, որը ցույց է տալիս, քանի վայրկյան է անցել այն պահից, երբ այն ասվել է, մինչև այն հասնելը։
Գրաֆիկը, որ մնում է ցածր և հարթ, նշանակում է, որ ռեժիմը համապատասխանում է աուդիոյին։ Բարձրացող գրաֆիկը նշանակում է, որ խողովակաշարը հետ է մնում։ Accuracy-ի դեպքում դա կարող է լինել այն պահը, երբ ժամանակն է անցնել Auto-ին, որը որոշ ճշգրտություն է զոհաբերում արագության համար, մինչև բացը փակվի։
Ծրագրավորողները փոխարենը ստանում են մեկ թիվ. երբ realtime սեսիան ավարտվում է, session.done-ը պարունակում է stats.realtimeFactor-ը՝ տառադարձված աուդիոն՝ բաժանած դրա տառադարձման վրա ծախսված ժամանակի վրա։ Կոնվենցիայի զգուշացում. խոսքի ճանաչման գրականության մեջ real-time factor-ը սովորաբար հակառակն է նշանակում՝ մշակման ժամանակը՝ բաժանած աուդիոյի ժամանակի վրա, որտեղ ցածրը ավելի լավ է։ VocalStack-ը այն ցույց է տալիս հակառակ ուղղությամբ, այսինքն՝ այստեղ ավելի բարձրը ավելի լավ է. ուղիղ սեսիան մոտ է 1-ին, իսկ 1-ից ցածր արժեքը նշանակում է, որ աուդիոն ավելի արագ է եկել, քան խողովակաշարը կարողացել է տառադարձել։
Այս վայրկյաններից ոչ մեկը առեղծվածային չէ. մի մասը պատկանում է հոսքին, մի մասը՝ բառին, որը սպասում է հաջորդին, մի մասը՝ նախադասությանը, որն անհրաժեշտ է թարգմանությանը, իսկ մնացածը՝ ընտրած ուշացման ռեժիմին։ API հղումը-ում կա կադր առ կադր մանրամասն, իսկ գլխավոր էջի ցուցադրությունը ցույց է տալիս ամբողջ շղթան աշխատելիս։