אתגר מרכזי שתוכנות תרגום מתמודדות איתו הוא ריבוי משמעויות בטקסט. נספר כיצד מתמודד עם זה אלגוריתם פופולרי בשם ברט (BERT) באמצעות טכניקה מתמטית פשוטה, וגם ניתן כמה רעיונות לספיד-דייטינג מוצלח.
פירוש המילה BANK הוא בנק, אבל גם גדת נהר. כאשר הזנו למתרגם של גוגל את המשפט: "!Let’s go to the other bank” קיבלנו את התרגום "בואו נלך לבנק השני!", אבל עבור “!Let’s swim to the other bank" קיבלנו "בואו לשחות לגדה השנייה!" תוכנת התרגום קישרה בין המילה השנייה במשפט לשישית, ובחרה על בסיס הידע שצברה בעבר את האפשרות הסבירה יותר לתרגום.
מערכות ממוחשבות העוסקות בטקסטים שנכתבו על-ידי אנשים ([NLP [1) מנסות להגדיר קשר סמנטי בין המילים בטקסט. בשנים האחרונות משתמשות המערכות הללו בשיטה הנקראת "למידה עמוקה" [2]. בשלב הראשון, שנקרא שלב האימון, מזינים אותן בכמות עצומה של טקסטים, למשל כל ערכי הוויקיפדיה ושלל ספרים, והן לומדות ומייצרות מודל סטטיסטי של השפה שתופס כמות סבירה של זיכרון. בתום שלב זה, כאשר המשתמש מזין משפט חדש, המערכות נעזרות במודל ובחישובים רבים כדי לנסות לקשר בין המילים. אחד האלגוריתמים הפופולריים הוא ברט ([BERT [3), שיצא לאור בשנת 2018, ומשמש את גוגל בתרגומים, בהשלמת טקסט במנוע החיפוש, ועוד.
בשלב הראשון הופך ברט כל מילה במשפט לרשימה של מספרים הנקראים וקטורים. עבור טקסט באנגלית ברט מתבסס על מילון המכיל כ-30 אלף מילים, וכל מילה בו מיוצגת על-ידי וקטור בעל 768 ערכים מספריים המייצגים תכונות שונות, לדוגמה: האם מדובר בזכר? האם זה צמח? וכן הלאה. כל אינדקס בווקטור מייצג תכונה כלשהי, והערך המספרי נע מ-0 עד 1 ומציין באיזו מידה התכונה מתאימה למילה. אבל מה עושים עם הייצוג הזה?
ההברקה של ברט מבוססת על טכניקה מתמטית פשוטה הנקראת מכפלה סקלרית בין שני וקטורים. נניח שנתונים שני וקטורים, A ו-B. אם נכפיל כל איבר ב-A באיבר המתאים לו ב-B ונסכם את כל המכפלות, נקבל מספר אחד שהוא המכפלה הסקלרית שלהם. אם A מכיל את הערכים (80, 70, 60) ו-B מכיל את הערכים (0.2, 0.3, 0.5) אזי המכפלה הסקלרית היא 0.2*80 + 0.3*70 + 0.5*60 = 67. נניח ש-A מייצג ציוני סטודנט בעבודות בית, בבוחן ובבחינה הסופית, ו-B מכיל את המשקל שניתן לכל ציון בהתאמה, אזי התוצאה היא הממוצע המשוקלל שהוא הציון הסופי. ואכן, שימוש נפוץ למכפלה סקלרית הוא יצירת ממוצע משוקלל. תכונה חשובה נוספת שהיא הבסיס להברקה של ברט, היא שאם הווקטורים A ו-B "מנורמלים" (המכפלה הסקלרית של כל וקטור בעצמו היא 1), אזי ככל שהמכפלה הסקלרית של A עם B גדולה יותר וקרובה ל-1, ה"מרחק" ביניהם קטן יותר. ביישום כמו של ברט נוכל להסיק מזה שיש קשר הדוק ביניהם. למשל, עבור זוג מילים נרדפות, המכפלה הסקלרית בין הווקטורים קרובה ל-1.
נחזור לדוגמה: נתונות לנו שש המילים במשפט "Let’s swim to the other bank". ננסה לבדוק אם יש קשר חזק בין כל זוג מילים באמצעות חישוב מכפלה סקלרית בין וקטורי כל זוג. נמשיל את המילים לשישה אנשים שמחפשים זוגיות, הולכים לספיד-דייטינג, וכל אחד נפגש לשיחה עם כל אחד משאר המשתתפים, כשבידו כרטיס המכיל 768 מספרים המייצגים את תכונותיו. BANK פוגש את SWIM ושואל: "האם כסף מדבר אליך?" "כלל וכלל לא!" עונה SWIM. אף שהערך של כסף באיבר המתאים בוקטור של BANK הוא גבוה, אצל SWIM הערך במקום זה הוא 0, ולכן המכפלה ביניהם והתרומה למכפלה הסקלרית היא אפס. בהמשך הערב, SWIM שואל את BANK אם יש לו קשר חזק למים. לתדהמתו התשובה חיובית, ולכן המכפלה של האיברים המתאימים בווקטורים שלהם גבוהה, וכך גם התוצאה של המכפלה הסקלרית. מזל טוב! מצאנו שידוך בין SWIM ל-BANK.
ברט מייצר שידוכים באופן דומה. אולם כיוון ששידוך על בסיס פגישה בודדת הוא עסק די מפוקפק שקשה להשליך ממנו על איכות הקשר, הוחלט לעדן את התהליך ולאפשר לכל זוג פוטנציאלי 12 פגישות ממוקדות. כל אחת מהפגישות מוגבלת ל-64 נושאי שיחה במקום 768. לפני כל פגישה, ברט מכין לכל משתתף כרטיס (וקטור) שנקרא KEY וכולל 64 ערכים שנוצרו משקלול תכונות המשתתף בהקשר לנושאי הפגישה הנוכחית. הכנת הכרטיס נעשית באמצעות ביצוע מכפלות סקלריות בין הווקטור של המשתתף לכל אחד מ-64 וקטורי המשקלים שחושבו מראש על-ידי ברט. היתרון הגדול של ברט טמון באיכות המשקלים הללו, שנבנו בעמל רב בתהליך האימון, ומאפשרים התאמות טובות במקרים רבים. נוסף על כך, ברט מחשב באותה שיטה עבור כל משתתף וקטור בעל 64 איברים הנקרא QUERY ומתאר את התכונות הנדרשות מבן או מבת הזוג בפגישה הנוכחית. שימו לב: בניגוד לתכונות הטריוויאליות המופיעות באפליקציית היכרויות, התכונות של המילים מחושבות באופן אוטומטי על פי תוצאות תהליך האימון, וקשה להבין אותן אינטואיטיבית.
בעת הפגישה של A ו-B, הם מבצעים מכפלות סקלריות בין QUERY של A ל-KEY של B וגם להפך, מכפלות שאפשר למזג ולממש ביעילות באמצעות הכפלת מטריצות. לבסוף, לאחר חישובים נוספים כמו נרמול התוצאות, ברט מייצר טבלה המכילה את שקלול עוצמת הקשרים בין כל זוג מילים. ברט, שדכן קפדן שכמותו, החליט שהוא לא מסתפק ב-12 המפגשים הללו, אלא מבצע 12 סבבים עם נושאי שיחה מגוונים, כך שכל מילה נבדקת מול כל מילה אחרת בסך הכול 12x12=144 פעמים. בסוף התהליך הנקרא "self-attention", האינפורמציה מועברת הלאה, למשל לתוכנת התרגום. בדוגמה שלנו המשפט בן שש מילים, אולם ברט יכול לנתח קטע טקסט עד 512 מילים, מה שמצריך חישובים רבים, אבל נותן ביצועים מפתיעים.
אז זכרו: כדי להיות מובנים, כדאי לא לחסוך במילים ולהיזהר ממשפטים קצרים ומרובי משמעות: דמיינו שאתם נכנסים למכונית האוטונומית החדשה שקניתם, חוטפים עצבים על הבנק שלכם, ואומרים לה: "Let’s drive to the other bank”. לא תרצו שהמכונית תבחר דווקא לזנק למים כדי לחצות את הירקון…
עריכה: שיר רוזנבלום-מן
עיצוב תמונה: מירי אורנשטיין בעזרת תוכנת האינטליגנציה המלאכותית Midjourney (התמונה הופקה בהזנת מילות החיפוש: Let’s swim to the city bank).
מקורות לקריאה נוספת:
[1] על NLP
[2[ למידה עמוקה
[3] על ברט (BERT)