Nasuri namin ang lahat ng machine translation. Ang mga pagsusuri ang bahaging mali.
Mga wika
Bago namin ilabas ang aming translation kit, pinagtakbo namin ito sa isang maliit na example app: 70 strings sa anim na format (JSON, Flutter ARB, Android, Apple .strings, gettext at Markdown) papuntang German, Russian, Japanese, Arabic at Spanish, gamit ang isang open Qwen model (Qwen3.8-Flash-Next, na-quantise sa 4 bits) na pinapatakbo ng vLLM sa aming sariling machine. Ang bawat isinalin na string ay dumaan sa mga checks bago ito isulat. Apat sa 350 ang tinanggihan. Ang lahat ng apat na pagtanggi ay mali.
Ang hinahanap ng mga pagsusuri
Ang isang translation na pumapinsala sa app ay mas masama kaysa walang translation, kaya ang bawat string ay dapat panatilihin ang mga placeholder nito (%1$s, {name}, {{count}}), ang mga tag, line break at URL; dapat ito nasa script ng target language; hindi dapat ito blangko, sobrang haba o naiwan sa English; at ang mga plural form ay dapat sakupin ang eksaktong kategorya ng wika. Ang string na nabigo ay hinihiling muli na may tinukoy na problema, at ang nabigo ulit ay hindi isinasama, kaya ipapakita ng app ang English para sa isang string na iyon.
Ang apat na pagtanggi
- Ang "Backups" sa German ay "Backups". Tinawag ng check na hindi isinalin. Ginagamit ng German ang salitang English. Ang isang identikal na salita ay madalas ay tama; ang dalawa o higit pang identikal na salita ay hindi, kaya iyon na ang rule ngayon.
- Isang Russian at isang Japanese line na may e-mail address ang nabigo sa script check: mas mababa sa 60% ng mga letra ang Cyrillic o Japanese, dahil ang
[email protected]ay nakasulat sa Latin letters. Ang mga address ay itinuturing na placeholder na ngayon: dapat itong bumalik nang hindi binago, at hindi ito binibilang na letra. - Isang Japanese plural message ang bumalik bilang
{count, plural, =0{連続記録なし} other{{count}日連続}}. Ang branch na{連続記録なし}ay walang spaces, kaya itinuring ng placeholder pattern ito bilang variable na tinatawag na 連続記録なし. Ang mga branch braces sa plural messages ay istruktura na ngayon, at ang mga placeholder name ay dapat ASCII.
Pagkatapos ayusin ang mga pagsusuri, ang pangalawang run ay humiling sa model para lamang sa apat na string na iyon, dahil ang lahat ng iba ay nasa translation memory na, at isinulat ang lahat ng 350 sa loob ng 45 segundo.
Ang bahaging inaasahan naming mabigo at hindi nabigo
Ang mga plural form ang nagpapakita kung saan nabibigo ang simpleng pagsasalin: ang English ay may isa at iba, ang Russian ay may isa, kaunti, marami at iba, ang Arabic ay may anim na kategorya, at ang Japanese ay may isang form lamang. Hiniling namin ang eksaktong kategorya ng target at tinitingnan ang placeholders ng bawat form. Isinulat ng model ang "1 день, 2 дня, 5 дней" para sa Russian at lahat ng anim na form ng Arabic. Lahat ng Android plural ay nakapasa sa unang subok sa lahat ng limang wika, gayundin ang lahat ng plural message maliban sa Japanese na hindi natin maayos na nabasa ng aming check.
Ang hindi mahuhuli ng anumang check
Pagkatapos, isinalin namin ang 22 web strings ng halimbawa sa lahat ng 42 wikang alam ng Polyglot: 924 sa 924 strings ang nakapasa. Habang binabasa namin ang mga ito, may isang nakatayo. Sa Khmer, ang "You are offline" ay bumalik bilang isang pangungusap na nagsasabing "online ka." Ito ay maayos na Khmer sa tamang script at walang kulang, kaya't nakapasa ito sa lahat ng check. Nahuhuli ng mga check ang mga bagay na nagpapasira sa app; ang maling kahulugan ay nangangailangan ng taong nakakabasa ng wika.
Ang takeaway
Ang mga automatic checks sa output ng machine ay nangangailangan ng tunay na output upang subukan. Ang mga unit test na gumagamit ng mga gawa-gawang translation ay nakapasa; ang isang tunay na model na sumusulat ng tunay na Japanese ang nakakita ng mga kakulangan sa loob ng ilang minuto. Ang Polyglot ay kasama ang mga check na ito, ayos na ayos, at kasama ang mga test para sa bawat isa sa apat na kaso. Ang mga check mismo ay libre at open source: ang translation-checks sa GitHub.