Átnéztünk minden gépi fordítást. Az ellenőrzések voltak a hibásak.
Nyelvek
Mielőtt kiadtuk a fordítási csomagunkat, egy kis példán alkalmazáson futtattuk le: 70 karakterláncot hat formátumban (JSON, Flutter ARB, Android, Apple .strings, gettext és Markdown) németre, oroszra, japánra, arabul és spanyolul, egy nyílt Qwen modellt (Qwen3.8-Flash-Next, 4 bites kvantálással) használva, amelyet a saját gépünkön futó vLLM szolgált ki. Minden lefordított karakterlánc ellenőrzésen megy át, mielőtt kiírnánk. A 350-ből négyet elutasítottunk. Mind a négy elutasítás téves volt.
Mire figyelnek az ellenőrzések
Egy fordítás, amely tönkreteszi az alkalmazást, rosszabb, mint a semmi, ezért minden karakterláncnak meg kell őriznie a helyőrzőit (%1$s, {name}, {{count}}), a címkéit, az újsorjeleit és az URL-jeit; a célnyelv írásrendszerében kell lennie; nem lehet üres, elszabadult vagy angolul maradt; és a többes számú alakoknak pontosan le kell fedniük a nyelvben létező kategóriákat. Egy sikertelen karakterláncot újra kérünk a hiba megnevezésével, és ha újra elbukik, kihagyjuk, így az alkalmazás angolul jeleníti meg azt az egy karakterláncot.
A négy elutasítás
- A „Backups” németül „Backups” volt. Az ellenőrzés fordítatlannak minősítette. A német használja az angol szót. Egy azonos szó gyakran helyes; két vagy több azonos szó nem az, így ez most a szabály.
- Egy orosz és egy japán sor e-mail címmel megbukott az írásrendszer-ellenőrzésen: a betűk kevesebb mint 60%-a volt cirill vagy japán, mert a
[email protected]latin betűkkel van írva. A címeket mostantól helyőrzőkként kezeljük: változatlanul kell visszajönniük, és nem számítanak betűnek. - Egy japán többes számú üzenet így jött vissza:
{count, plural, =0{連続記録なし} other{{count}日連続}}. Az{連続記録なし}ágnak nincsenek szóközöi, így a helyőrző-minta változónak nézte a 連続記録なし nevet. A többes számú üzenetekben az ágzárójelek mostantól szerkezetet jelentenek, és a helyőrzőneveknek ASCII-karakterekből kell állniuk.
Miután az ellenőrzéseket javítottuk, egy második futtatásnál a modellt csak arra a négy karakterláncra kértük, mivel a többi mind benne volt a fordítási memóriában, és 45 másodperc alatt kiírtuk mind a 350-et.
Az a rész, amelytől azt vártuk, hogy elbukik, de nem bukott el
A többes számú alakok azok a helyek, ahol a naiv fordítás elbukik: az angolban van egyes és többes szám, az oroszban egy, kevés, sok és egyéb, az arabban hat kategória, a japánban egyetlen alak. Pontosan a cél nyelv kategóriáit kértük, és ellenőriztük minden alak helyőrzőit. A modell „1 день, 2 дня, 5 дней”-t írt az oroszhoz, és mind a hat arab alakot. Minden Android-többesszám elsőre átment mind az öt nyelven, és minden többesszámú üzenet is, kivéve a japánt, amelyet az ellenőrzésünk félreolvasott.
Amit egyetlen ellenőrzés sem fog elkapni
Ezután lefordítottuk a példa 22 webes karakterláncát a Polyglot által ismert mind a 42 nyelvre: 924-ből 924 karakterlánc átment. Átolvasva őket, egy kiemelkedett. Khmer nyelven az „You are offline” (Nem vagy online) egy olyan mondatként jött vissza, amely azt jelenti, hogy „online vagy”. Jól formázott khmer szöveg a megfelelő írásrendszerrel, semmi nem hiányzik belőle, így minden ellenőrzés átengedte. Az ellenőrzések azt fogják el, ami elrontja az alkalmazást; a rossz jelentéshez kell egy ember, aki olvassa a nyelvet.
A tanulság
A gépi kimenet automatikus ellenőrzéséhez valódi kimenetre van szükség, amellyel tesztelhetők. A kitalált fordításokkal készített egységtesztek sikeresek voltak; egy valódi modell, amely valódi japánt írt, percek alatt megtalálta a hézagokat. A Polyglot ezekkel az ellenőrzésekkel, javítva, és a négy eset mindegyikéhez tartozó tesztekkel együtt kerül szállításra. Az ellenőrzések önmagukban ingyenesek és nyílt forráskódúak: translation-checks a GitHubon.