Am verificat fiecare traducere automată. Verificările au fost partea care a greșit.
Limbi
Înainte de a lansa kitul nostru de traducere, l-am rulat pe o aplicație de exemplu mică: 70 de șiruri în șase formate (JSON, Flutter ARB, Android, Apple .strings, gettext și Markdown) în germană, rusă, japoneză, arabă și spaniolă, cu un model deschis de 27 de miliarde de parametri pe propriul nostru calculator. Fiecare șir tradus trece prin verificări înainte de a fi scris. Patru dintre cele 350 au fost respinse. Toate cele patru respingeri au fost eronate.
Ce caută verificările
O traducere care strică o aplicație este mai rea decât niciuna, deci fiecare șir trebuie să își păstreze placeholder-ele (%1$s, {name}, {{count}}), etichetele, întreruperile de linie și URL-urile; trebuie să fie în alfabetul limbii țintă; nu trebuie să fie gol, să iasă din control sau să rămână în engleză; iar formele de plural trebuie să acopere exact categoriile pe care le are limba. Un șir care pică este cerut din nou, cu problema menționată, iar unul care pică din nou este lăsat afară, astfel încât aplicația afișează engleza pentru acel singur șir.
Cele patru respingeri
- „Backups” în germană era „Backups”. Verificarea a considerat-o netradusă. Germana folosește cuvântul englezesc. Un cuvânt identic este adesea corect; două sau mai multe cuvinte identice nu sunt, deci aceasta este regula acum.
- O linie în rusă și una în japoneză cu o adresă de e-mail au picat verificarea de alfabet: mai puțin de 60% dintre litere erau chirilice sau japoneze, deoarece
[email protected]este scrisă cu litere latine. Adresele sunt acum tratate ca placeholder-e: trebuie să revină neschimbate și nu sunt numărate ca litere. - Un mesaj de plural în japoneză a revenit ca
{count, plural, =0{連続記録なし} other{{count}日連続}}. Ramura{連続記録なし}nu are spații, deci modelul de placeholder a luat-o drept o variabilă numită 連続記録なし. Acoladele de ramură din mesajele de plural sunt acum structură, iar numele placeholder-elor trebuie să fie ASCII.
Odată corectate verificările, o a doua rulare a cerut modelului doar acele patru șiruri, deoarece restul se aflau în memoria de traducere, și a scris toate cele 350 în 45 de secunde.
Partea despre care ne așteptam să eșueze și nu a eșuat
Formele de plural sunt acolo unde traducerea naivă se strică: engleza are una și altele, rusa are una, câteva, multe și altele, araba șase categorii, japoneza o singură formă. Am cerut exact categorile limbii țintă și am verificat placeholderii fiecărei forme. Modelul a scris „1 день, 2 дня, 5 дней” pentru rusă și toate cele șase forme arabe. Fiecare plural Android a trecut din prima încercare în toate cele cinci limbi, la fel și fiecare mesaj cu plural, cu excepția celui în japoneză, pe care verificarea noastră l-a interpretat greșit.
Ceea ce nicio verificare nu poate prinde
Apoi am tradus cele 22 de șiruri web din exemplu în toate cele 42 de limbi pe care Polyglot le cunoaște: 924 din 924 de șiruri au trecut. Citindu-le, unul a ieșit în evidență. În khmeră, „You are offline” a fost returnat ca o propoziție care spune „ești online”. Este o khmeră bine formată, în alfabetul corect, fără nimic lipsă, așa că toate verificările au trecut-o. Verificările prind ceea ce strică o aplicație; un sens greșit are nevoie de o persoană care citește limba.
Concluzia
Verificările automate ale outputului generat de mașină au nevoie de output real pentru a fi testate. Testele unitare cu traduceri inventate au trecut; un model real care scria japoneză reală a găsit lacunele în câteva minute. Polyglot vine cu aceste verificări, corectate, și cu testele pentru fiecare dintre cele patru cazuri.