בניתי את RightLayout כי כל מתקן פריסת מקלדת ל-macOS שניסיתי נשבר על שמות, קוד ושגיאות הקלדה. ההימור היה קטן: לאמן מודל CoreML מאפס, שלוש פריסות, על המכשיר. זה עבד. ואז הגיע חשבון התחזוקה, ופתחתי את הקוד.
1. הבעיה עם punto-switcher מילוני
אם אתם מקלידים בשתיים או שלוש שפות על Mac, חוויתם את זה. מתחילים משפט באנגלית, הפריסה עדיין על רוסית, והמסך מתמלא בקיריליק חסר משמעות. הפתרון קיים בתיאוריה. יש כלים שעוקבים אחרי הקלט ומחליפים את הפריסה כשהמילה "נראית לא נכונה".
הגרסה הקלאסית של הכלי הזה מבוססת מילון. היא בודקת כל מילה מול אוצר מילים קפוא ומתקנת אם המילה לא מופיעה. זה עובד למקרים הקלים. וזה נשבר ברגע שאדם אמיתי מתחיל להקליד טקסט אמיתי.
שמות שוברים את זה. קוד שובר את זה. ראשי תיבות שוברים את זה. URLים שוברים את זה. המילה kubectl לא נמצאת באף מילון רוסי, אבל היא גם לא מילה אנגלית בפריסה שגויה. שגיאת הקלדה כמו helo חסרה במילון, אז הכלי "מתקן" אותה ל-руды. ובפסקאות מעורבות שפה המילון אפילו לא יודע באיזו שפה לעגון.
בדיקת מילון אין לה מושג מה אתם מקלידים. הגישה יכולה להיות יציבה ומלוטשת ועדיין לקבל את אותו סוג של שגיאות חיוביות, כי הסיגנל שמתחת הוא הלא נכון. צריך משהו שקורא הקשר, לא אוצר מילים.
2. ההימור
ההימור היה קטן מספיק לנסות בכמה סופי שבוע. לאמן מודל זעיר ברמת תווים שלוקח חלון קצר של קלט אחרון וצופה לאיזו מתשע מחלקות הוא שייך. תשע המחלקות הן שלוש הפריסות הילידיות (EN, RU, HE) פלוס שש החטאות בין-פריסות: en_from_ru, , , , , . סט המחלקות הזה הוא כל הטריק. ברגע שהמודל אומר "זה נראה כמו רוסית שהוקלדה על פריסה אנגלית", mapper דטרמיניסטי מבצע את החלפת התווים בפועל.