בדקנו כל תרגום מכונה. הבדיקות היו החלק השגוי.

שפות

לפני ששיחררנו את ערכת התרגום, הרצנו אותה על אפליקציה לדוגמה קטנה: 70 מחרוזות בשש פורמטים (JSON, Flutter ARB, Android, Apple .strings, gettext ו-Markdown) לגרמנית, רוסית, יפנית, ערבית וספרדית, עם מודל פתוח של 27 מיליארד פרמטרים על המחשב שלנו. כל מחרוזת מתורגמת עוברת בדיקות לפני שהיא נכתבת. ארבע מתוך 350 נדחו. כל ארבע הדחיות היו שגויות.

מה הבדיקות מחפשות

תרגום ששובר אפליקציה גרוע יותר מאין תרגום, ולכן כל מחרוזת חייבת לשמור על ה-placeholder שלה (%1$s, {name}, {{count}}), על התגים, על מעברי השורה ועל כתובות ה-URL; היא חייבת להיות בכתב של שפת היעד; היא לא יכולה להיות ריקה, חורגת או להישאר באנגלית; וצורות הרבים חייבות לכסות בדיוק את הקטגוריות שיש בשפה. מחרוזת שנכשלת מתבקשת שוב עם פירוט הבעיה, וזו שנכשלת שוב נשארת בחוץ, כך שהאפליקציה מציגה אנגלית עבור אותה מחרוזת בודדת.

ארבע הדחיות

לאחר שתוקנו הבדיקות, הרצה שנייה ביקשה מהמודל רק את ארבע המחרוזות האלה, כי כל השאר היו בזיכרון התרגום, וכתבה את כל 350 ב-45 שניות.

החלק שציפינו שיכשל ולא כשל

צורות ריבוי הן המקום שבו תרגום תמים נשבר: באנגלית יש צורה אחת ואחרת, ברוסית יש אחת, מעט, רבים ואחרת, בערבית שש קטגוריות, ביפנית צורה יחידה. ביקשנו בדיוק את הקטגוריות של שפת היעד ובדקנו את המשתנים בכל צורה. המודל כתב "1 день, 2 дня, 5 дней" עבור רוסית ואת כל שש הצורות בערבית. כל צורות הריבוי של Android עברו בניסיון הראשון בכל חמש השפות, וכך גם כל הודעות הריבוי מלבד זו ביפנית שהבדיקה שלנו קראה אותה לא נכון.

מה שאף בדיקה לא תופסת

לאחר מכן תרגמנו את 22 מחרוזות הדוגמה מהאתר לכל 42 השפות ש-Polyglot מכיר: 924 מתוך 924 מחרוזות עברו. בקריאה שלהן, אחת בלטה. בקמרית, המשפט "You are offline" חזר כמשפט שאומר "you are online". זהו קמרית תקנית בכתב הנכון ללא חסר, ולכן כל הבדיקות העבירו אותו. בדיקות תופסות מה ששובר אפליקציה; משמעות שגויה דורשת אדם שקורא את השפה.

המסקנה

בדיקות אוטומטיות על פלט מכונתי זקוקות לפלט אמיתי לבדיקה מולו. בדיקות יחידה עם תרגומים מומצאים עברו; מודל אמיתי שכתב יפנית אמיתית מצא את הפערים תוך דקות. Polyglot מגיע עם הבדיקות האלה, מתוקנות, ועם הבדיקות לכל אחד מארבעת המקרים.

עודכן: