בדקנו כל תרגום מכונה. הבדיקות היו החלק השגוי.
שפות
לפני ששיחררנו את ערכת התרגום, הרצנו אותה על אפליקציה לדוגמה קטנה: 70 מחרוזות בשש פורמטים (JSON, Flutter ARB, Android, Apple .strings, gettext ו-Markdown) לגרמנית, רוסית, יפנית, ערבית וספרדית, עם מודל פתוח של 27 מיליארד פרמטרים על המחשב שלנו. כל מחרוזת מתורגמת עוברת בדיקות לפני שהיא נכתבת. ארבע מתוך 350 נדחו. כל ארבע הדחיות היו שגויות.
מה הבדיקות מחפשות
תרגום ששובר אפליקציה גרוע יותר מאין תרגום, ולכן כל מחרוזת חייבת לשמור על ה-placeholder שלה (%1$s, {name}, {{count}}), על התגים, על מעברי השורה ועל כתובות ה-URL; היא חייבת להיות בכתב של שפת היעד; היא לא יכולה להיות ריקה, חורגת או להישאר באנגלית; וצורות הרבים חייבות לכסות בדיוק את הקטגוריות שיש בשפה. מחרוזת שנכשלת מתבקשת שוב עם פירוט הבעיה, וזו שנכשלת שוב נשארת בחוץ, כך שהאפליקציה מציגה אנגלית עבור אותה מחרוזת בודדת.
ארבע הדחיות
- "Backups" בגרמנית היה "Backups". הבדיקה קראה לזה לא מתורגם. גרמנית משתמשת במילה האנגלית. מילה זהה אחת היא לעיתים קרובות נכונה; שתי מילים זהות או יותר אינן, ולכן זו הכלל כעת.
- שורה ברוסית ושורה ביפנית עם כתובת דוא"ל נכשלו בבדיקת הכתב: פחות מ-60% מהאותיות היו קיריליות או יפניות, כי
[email protected]כתובה באותיות לטיניות. כתובות מטופלות כעת כמו placeholders: הן חייבות לחזור ללא שינוי, והן לא נספרות כאותיות. - הודעת רבים ביפנית חזרה כ-
{count, plural, =0{連続記録なし} other{{count}日連続}}. הענף{連続記録なし}אין בו רווחים, ולכן תבנית ה-placeholder לקחה אותו כמשתנה בשם 連続記録なし. סוגריים מסולסלים של ענפים בהודעות רבים הם כעת מבנה, ושמות placeholders חייבים להיות ASCII.
לאחר שתוקנו הבדיקות, הרצה שנייה ביקשה מהמודל רק את ארבע המחרוזות האלה, כי כל השאר היו בזיכרון התרגום, וכתבה את כל 350 ב-45 שניות.
החלק שציפינו שיכשל ולא כשל
צורות ריבוי הן המקום שבו תרגום תמים נשבר: באנגלית יש צורה אחת ואחרת, ברוסית יש אחת, מעט, רבים ואחרת, בערבית שש קטגוריות, ביפנית צורה יחידה. ביקשנו בדיוק את הקטגוריות של שפת היעד ובדקנו את המשתנים בכל צורה. המודל כתב "1 день, 2 дня, 5 дней" עבור רוסית ואת כל שש הצורות בערבית. כל צורות הריבוי של Android עברו בניסיון הראשון בכל חמש השפות, וכך גם כל הודעות הריבוי מלבד זו ביפנית שהבדיקה שלנו קראה אותה לא נכון.
מה שאף בדיקה לא תופסת
לאחר מכן תרגמנו את 22 מחרוזות הדוגמה מהאתר לכל 42 השפות ש-Polyglot מכיר: 924 מתוך 924 מחרוזות עברו. בקריאה שלהן, אחת בלטה. בקמרית, המשפט "You are offline" חזר כמשפט שאומר "you are online". זהו קמרית תקנית בכתב הנכון ללא חסר, ולכן כל הבדיקות העבירו אותו. בדיקות תופסות מה ששובר אפליקציה; משמעות שגויה דורשת אדם שקורא את השפה.
המסקנה
בדיקות אוטומטיות על פלט מכונתי זקוקות לפלט אמיתי לבדיקה מולו. בדיקות יחידה עם תרגומים מומצאים עברו; מודל אמיתי שכתב יפנית אמיתית מצא את הפערים תוך דקות. Polyglot מגיע עם הבדיקות האלה, מתוקנות, ועם הבדיקות לכל אחד מארבעת המקרים.