Zkontrolovali jsme každý strojový překlad. Chybná byla právě ta kontrola.
Jazyky
Než jsme vydali náš balíček pro překlady, otestovali jsme ho na malé ukázkové aplikaci: 70 řetězců ve šesti formátech (JSON, Flutter ARB, Android, Apple .strings, gettext a Markdown) do němčiny, ruštiny, japonštiny, arabštiny a španělštiny, s otevřeným modelem Qwen (Qwen3.8-Flash-Next, kvantizovaným na 4 bity) obsluhovaným přes vLLM na našem vlastním stroji. Každý přeložený řetězec projde před zápisem kontrolami. Ze 350 jich bylo zamítnuto 4. Všechny čtyři zamítnutí byla chybná.
Co kontroly hledají
Překlad, který rozbije aplikaci, je horší než žádný, takže každý řetězec musí zachovat své zástupné symboly (%1$s, {name}, {{count}}), své značky, zalomení řádků a URL adresy; musí být v písmu cílového jazyka; nesmí být prázdný, rozjetý nebo ponechaný v angličtině; a množná čísla musí pokrývat přesně ty kategorie, které jazyk má. Řetězec, který selže, je znovu vyžádán s uvedením problému a ten, který selže znovu, je vynechán, takže aplikace pro tento jeden řetězec zobrazí angličtinu.
Čtyři zamítnutí
- „Backups“ v němčině bylo „Backups“. Kontrola to označila za nepřeložené. Němčina používá anglické slovo. Jedno identické slovo je často správně; dvě nebo více identických slov ne, takže to je nyní pravidlo.
- Ruský a japonský řádek s e-mailovou adresou neprošly kontrolou písma: méně než 60 % písmen bylo cyrilických nebo japonských, protože
[email protected]je psáno latinkou. Adresy jsou nyní zpracovávány jako zástupné symboly: musí se vrátit nezměněny a nepočítají se jako písmena. - Japonská zpráva s množným číslem se vrátila jako
{count, plural, =0{連続記録なし} other{{count}日連続}}. Větev{連続記録なし}nemá mezery, takže vzor pro zástupné symboly ji považoval za proměnnou nazvanou 連続記録なし. Svéorky větví ve zprávách s množným číslem jsou nyní strukturou a názvy zástupných symbolů musí být ASCII.
Jakmile byly kontroly opraveny, druhý běh žádal model pouze o tyto čtyři řetězce, protože vše ostatní bylo v paměti překladů, a zapsal všech 350 řetězců za 45 sekund.
Část, u které jsme očekávali selhání a která neselhalа
Množná čísla jsou místem, kde naivní překlad selhává: angličtina má jednotné a množné číslo, ruština jednotné, několik, mnoho a ostatní, arabština šest kategorií a japonština pouze jeden tvar. Vyžádali jsme si přesně cílové kategorie a zkontrolovali zástupné symboly u každého tvaru. Model napsal pro ruštinu „1 день, 2 дня, 5 дней“ a všech šest arabských tvarů. Každé množné číslo pro Android prošlo na první pokus ve všech pěti jazycích a stejně tak každá množná zpráva kromě té japonské, kterou naše kontrola chybně vyhodnotila.
Co žádná kontrola neodhalí
Poté jsme přeložili 22 webových řetězců z příkladu do všech 42 jazyků, které Polyglot zná: prošlo 924 z 924 řetězců. Při jejich čtení jeden vyčníval. V khmérštině se „You are offline“ vrátilo jako věta, která říká „jste online“. Je to správně utvořená khmérština ve správném písmu bez chybějících částí, takže každá kontrola ji propustila. Kontroly odhalí to, co rozbije aplikaci; špatný význam potřebuje člověka, který danému jazyku rozumí.
Shrnutí
Automatické kontroly strojového výstupu potřebují k otestování skutečný výstup. Jednotkové testy s vymyšlenými překlady prošly; reálný model píšící reálnou japonštinu našel mezery během minut. Polyglot obsahuje tyto kontroly, opravené, a testy pro každý ze čtyř případů. Samotné kontroly jsou zdarma a open source: translation-checks na GitHubu.