Ми перевірили кожен машинний переклад. Саме перевірки були тим, що працювало неправильно.
Мови
Перед випуском нашого набору для перекладу ми запустили його на невеликому прикладі застосунку: 70 рядків у шести форматах (JSON, Flutter ARB, Android, Apple .strings, gettext і Markdown) німецькою, російською, японською, арабською та іспанською, з відкритою моделлю на 27 мільярдів параметрів на нашій власній машині. Кожен перекладений рядок проходить перевірки перед записом. Чотири з 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 постачається з цими виправленими перевірками та тестами для кожного з чотирьох випадків.