Un detector de limbă dă mereu un răspuns, chiar și la o tuse. Lasă detectarea pornită pentru audio curat sau cu mai multe limbi, și numește limba atunci când se vorbește o singură limbă peste zgomot sau cu un accent puternic.
Fiecare transcriere începe cu o întrebare pe care cititorul nu o vede: ce limbă este asta? Dacă greșești răspunsul, restul lanțului muncește din greu ca să producă un nonsens fluent. Acest articol explică la ce ascultă un detector de limbă, cum se comportă detectarea pentru audio live și pentru fișiere și când este mai bine să numești singur limba.
Un detector de limbă nu înțelege ce se spune. Se uită la sunetul în sine: inventarul consoanelor și al vocalelor, cum sunt accentuate silabele, ritmul frazelor și cuvintele scurte și frecvente de care se sprijină orice limbă. Spaniola are propriul set de vocale și propriul ritm; neerlandeza și germana au multe în comun, dar se despart la câteva sunete. Câteva secunde de vorbire clară sunt de obicei suficiente ca să le deosebești.
Multe sisteme de recunoaștere fac asta ca un produs secundar al recunoașterii cuvintelor. Ele decid limba din deschiderea audio-ului, sub forma unei probabilități pentru fiecare limbă pe care o cunosc. Din acest mod de lucru decurg două lucruri. Probabilitățile se adună mereu la unu, deci nu există răspunsul „nicio limbă”: tăcerea, o tuse sau un acord muzical primesc și ele o limbă, adesea cu un scor încrezător atașat. Iar decizia se ia din început, adică din cel mai prost eșantion posibil. Multe înregistrări încep cu salutări, nume și nume de locuri, care poartă foarte puțin semnal de limbă: „Bună dimineața, Maria, bun venit la Berlin” este aproape la fel de germană cât este engleză. Altele încep cu tăcere sau cu o tuse, iar un detector căruia i se cere să decidă pe baza lor va decide oricum, cu încredere, pe nimic. Și audio-ul real face asta: o predică în română care începe cu zgomot de sală și cu „Bună dimineața” poate fi auzită ușor drept italiana „Buona domenica”, cu certitudine totală.
Costul unui răspuns greșit este și mai mare decât pare. Un sistem care decodează într-o limbă greșită nu scrie greșit; rescrie. „For God so loved the world”, decodat ca română, a ieșit „Forgot to love the world”. Expresia română „mândria slujește”, decodată ca engleză, a ieșit „Pride serves”, care este o traducere corectă a unei propoziții pe care nimeni nu o ceruse tradusă. Cuvintele sunt fluente, iar transcrierea nu dă niciun semn că ceva nu este în regulă, și tocmai asta face eroarea scumpă.
Cinci lucruri păcălesc cel mai des detectoarele:
Care dintre acestea te afectează depinde de faptul că audio-ul sosește live sau stă deja într-un fișier.
Pentru o transcriere live nu există o înregistrare întreagă de analizat. Audio-ul sosește pe măsură ce este rostit, iar transcrierea trebuie să sosească odată cu el. Așa că limba este detectată pe măsură ce vorbitorul vorbește și este urmărită dacă trece la altă limbă. Asta înseamnă nota de sub comutatorul Spoken language atunci când pornești o transcriere live în Dashboard: limba vorbitorului este detectată automat, iar el poate trece oricând la altă limbă.
O schimbare este confirmată înainte de a fi aplicată, astfel încât un singur fragment zgomotos nu duce transcrierea într-o altă limbă. Punctul slab este deschiderea: dacă primele cuvinte sunt un salut zgomotos, prima linie poate ieși în limba greșită. Numirea limbii evită asta.
Fișierele funcționează altfel, pentru că întreaga înregistrare este deja acolo.
Un fișier este o problemă mai ușoară: nu este nevoie să ai încredere în primele secunde. Pentru un fișier, limba se decide din înregistrarea în întregul ei, astfel încât un salut zgomotos de la început nu o poate stabili.
Limba unui fișier este tot o presupunere de lucru, nu un verdict. O înregistrare care chiar își schimbă limba pe parcurs, cum ar fi un interviu care trece din engleză în română în a doua jumătate, este urmărită, nu forțată, iar una care alternează între limbi de-a lungul întregii înregistrări este tratată și ea.
Un detector care decide o singură dată și nu mai revine este sigur pe sine tocmai în locul greșit.
Niciun detector nu ajută prea mult când întreaga înregistrare este zgomotoasă. Detectarea este implicită pentru că are dreptate cel mai adesea și nu te costă nimic. Pentru unele înregistrări, totuși, ar trebui să numești limba, iar Dashboard-ul spune care sunt acelea: numirea limbii vorbite îmbunătățește acuratețea la înregistrările zgomotoase și la accentele puternice.
Acestea sunt cazurile în care detectorul are cel mai puțin cu ce să lucreze. Zgomotul șterge indiciile de care depinde un detector; un accent puternic le mută spre o altă limbă; o pereche strâns înrudită oferă de la bun început puține indicii. Un vorbitor englez cu un accent portughez puternic, într-o sală cu reverberație, este greu de plasat doar după sunet, iar dacă detectorul îl plasează greșit, transcrierea transformă vorbirea în engleză în portugheză atâta timp cât durează greșeala. Numirea limbii elimină întrebarea, așa că tot efortul merge în cuvinte.
Un scurt îndrumar:
Numirea limbii este o setare a transcrierii, nu a contului tău, așa că poți decide pentru fiecare înregistrare în parte. Tot ce am spus mai sus se reduce la o singură opțiune din API.
spokenLanguage absent înseamnă detectare; session.update în timpul fluxuluiÎn API, spokenLanguage este un cod de limbă, precum en; dacă îl omiți, limba este detectată. Opțiunea apare în settings pentru o transcriere de fișier sau de link și în opțiunile unei sesiuni în timp real. Detectarea și numirea acoperă aceleași 100 de limbi. Traducerea în până la 10 dintre ele este o alegere separată și nu depinde de limba detectată sau numită. Modul în care traducerea ține pasul cu vorbirea este subiectul Latența traducerii live, explicată.
{ "name": "Board meeting", "settings": { "spokenLanguage": "en", "speakerLabels": "auto" } }
O sesiune în timp real primește aceeași opțiune la creare, iar o poți schimba cât timp audio-ul curge. Un cadru text session.update cu un spokenLanguage nou se aplică vorbirii de atunci încolo; dacă îl setezi la "" sau "auto", sesiunea revine la detectare, iar un cod nesuportat este ignorat. O vizualizare a subtitrărilor cu un buton pentru limbă îi poate permite operatorului să numească limba în momentul în care vede o primă linie greșită, fără reconectare.
{ "type": "session.update", "spokenLanguage": "ro" }
Lista codurilor, cu numele lor, se află la GET /v1/languages, care nu necesită cheie. Fluxul complet în timp real, de la crearea unei sesiuni pe serverul tău până la citirea ciornelor și a commit-urilor, este în Transcrierea în timp real printr-un WebSocket, iar referința interactivă se află la {{api}}/docs. În Dashboard, aceeași alegere este comutatorul Spoken language atunci când pornești o transcriere nouă, iar cheile pentru API se găsesc la Developers.