Проверихме всеки машинен превод. Грешните бяха именно проверките.
Езици
Преди да пуснем комплекта за превод, го тествахме на малко примерно приложение: 70 низа в шест формата (JSON, Flutter ARB, Android, Apple .strings, gettext и Markdown) на немски, руски, японски, арабски и испански, с отворен модел Qwen (Qwen3.8-Flash-Next, квантифициран до 4 бита), обслужван от vLLM на наш собствен компютър. Всеки преведен низ преминава през проверки, преди да бъде записан. Четири от 350 бяха отхвърлени. И четирите отхвърляния бяха грешни.
Какво проверяват проверките
Превод, който разваля приложението, е по-лош от липсата на такъв, затова всеки низ трябва да запази своите плейсхолдъри (%1$s, {name}, {{count}}), своите тагове, нови редове и URL адреси; трябва да е в писмеността на целевия език; не трябва да е празен, разтеглен или оставен на английски; и множествените форми трябва да покриват точно категориите, които езикът има. Низ, който не мине проверката, се изисква отново с посочен проблем, а този, който не мине и втория път, се пропуска, така че приложението показва английския вариант за този единствен низ.
Четирите отхвърляния
- „Backups“ на немски беше „Backups“. Проверката го определи като непреведен. Немският използва английската дума. Една идентична дума често е правилна; две или повече идентични думи не са, затова това е правилото сега.
- Руски и японски ред с имейл адрес не преминаха проверката за писменост: по-малко от 60% от буквите бяха кирилица или японски, защото
[email protected]е изписан с латински букви. Адресите сега се третират като плейсхолдъри: те трябва да се върнат непроменени и не се броят като букви. - Японско съобщение с множествено число се върна като
{count, plural, =0{連続記録なし} other{{count}日連続}}. Клонът{連続記録なし}няма интервали, затова шаблонът за плейсхолдър го прие за променлива с име 連続記録なし. Скобите за клони в съобщения с множествено число сега са структура, а имената на плейсхолдърите трябва да са ASCII.
След като проверките бяха оправени, второто изпълнение поиска от модела само тези четири низа, тъй като всичко останало беше в паметта за преводи, и записа всички 350 за 45 секунди.
Частта, за която очаквахме да се провали, но не се провали
Множествените форми са мястото, където наивният превод се проваля: английският има една и друга, руският – една, малко, много и друга, арабският – шест категории, а японският – единствена форма. Поискахме точно категориите на целевия език и проверихме плейсхолдерите във всяка форма. Моделът написа „1 день, 2 дня, 5 дней“ за руския и всички шест форми на арабски. Всяка Android множествена форма премина при първия опит на всички пет езика, както и всяко съобщение с множествено число, с изключение на японското, което проверката ни погрешно разчете.
Какво не може да хване нито една проверка
След това преведохме 22-та уеб низа от примера на всички 42 езика, които Polyglot познава: 924 от 924 низа преминаха. При прегледа един се открои. На кхмерски „You are offline“ се беше върнало като изречение, което означава „вие сте онлайн“. То е правилно изградено на кхмерски, с правилната писменост и без липсващи елементи, затова всяка проверка го пропусна. Проверките хващат това, което чупи приложението; за грешно значение е нужен човек, който чете езика.
Изводът
Автоматичните проверки на машинния изход изискват реален изход, срещу който да бъдат тествани. Модулните тестове с измислени преводи минаваха успешно; реален модел, пишещ реален японски, откри пропуските за минути. Polyglot идва с тези проверки, фиксирани, и с тестове за всеки от четирите случая. Самите проверки са безплатни и с отворен код: translation-checks в GitHub.