הטמעות מילים ושרירותיות הסימן

חבר שבונה על פלטפורמה של סוכני AI שאל אותי שאלה ששמעתי מאז מכמה מהנדסים. הפלטפורמה נתנה לו לבחור בין שני מודלי הטמעה של OpenAI, אחד שמפיק וקטורים של 3,072 מספרים ואחד שמפיק 1,536. מדוע, הוא רצה לדעת, מילה צריכה אלפי מספרים? במילה "ציפור" יש חמש אותיות. האם מרחב בן חמישה ממדים לא היה מספיק? ואם צריך מקום לנטיות, "ציפורים" ו"ציפורי" וכן הלאה, אולי עוד כמה?

השאלה טובה, כי התשובה הנכונה לה היא השיעור הראשון בבלשנות, ולרובנו מעולם לא היה השיעור הזה.

המשמעות אינה באותיות

האינטואיציה שמאחורי השאלה היא שהייצוג של מילה צריך להיגזר איכשהו מהמילה עצמה: מהאיות שלה, מאורכה, מהשורש ומהמורפולוגיה שלה. האינטואיציה הזאת שגויה לחלוטין, והסיבה לכך היא בת יותר ממאה שנה.

קחו את המילה "תפוח". האם יש קשר כלשהו בין האותיות האלה, או הצלילים שהן מייצגות, לבין הפרי הפריך האדום או הירוק? אין. מי שהשתמש במילה לראשונה לא חילץ את העיצורים שלה מקליפת הפרי. כשאליעזר בן-יהודה טבע את "עגבנייה", הוא בחר שורש ומשקל, והבחירה הייתה המצאה. המקום היחיד ביקום שבו מתקיים הקשר בין "עגבנייה" לירק האדום הוא בתוך ראשיהם של דוברי עברית שחולקים את המוסכמה. אילו המוסכמה הייתה הולכת בכיוון ההפוך, ותפוחים היו נקראים עגבניות ועגבניות תפוחים, אף תכונה אחת של אף אחד מהפירות לא הייתה משתנה.

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

ברגע שרואים את זה, שאלת ספירת האותיות מתפוגגת. הטמעה אינה ייצוג של המילה "ציפור". היא ייצוג של המושג שדוברי עברית במקרה מכנים "ציפור" ודוברי אנגלית במקרה מכנים bird. האיות לעולם אינו נכנס לתמונה, ואינו יכול להיכנס, כי האיות אינו מכיל דבר שיכול להיכנס.

למה כל כך הרבה ממדים

השאלה השנייה טובה יותר ושורדת את התשובה הראשונה. בשפה יש אולי 50,000 עד 150,000 מילים בשימוש פעיל, כולל נטיות. אפילו מרחב בן 3,072 ממדים המוגבל לאפסים ואחדים מכיל 2^3072 נקודות שונות, מספר שמגמד את כל המילים בכל השפות שהתקיימו אי פעם. אם רק רוצים להבדיל בין מילים, 17 סיביות מספיקות, ו-120 ממדים היו הגזמה מגוחכת. אז בשביל מה 2,950 הממדים האחרים?

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

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

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

למספרים אין משמעות בפני עצמם

החבר שלי פתח אז וקטור והסתכל בו: 1,536 מספרים בנקודה צפה, כולם בין בערך מינוס 0.1 ל-0.1. מה פירוש המספר החמישה-עשר? האם הוא "יש כנפיים"? האם הוא "הוא חיה"?

הוא לא זה ולא זה, ולא מפני שהתשובה סודית. לאף קואורדינטה בודדת אין משמעות שאדם יכול לנקוב בה. משמעות הווקטור טמונה כולה ביחסו לכל וקטור אחר: הזווית שהוא יוצר עם כל אחד, המרחק לכל אחד. סובבו את המרחב כולו וכל מספר ישתנה בעוד כל משמעות תישאר בדיוק כפי שהיא, כי הזוויות והמרחקים נשמרים. משמעות בהטמעה היא דיפרנציאלית לחלוטין.

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

מה זה נותן בפועל

שום דבר מזה אינו פילוסופיה לשמה. הטמעות הן טכנולוגיה בפני עצמה, ותיקה יותר ובלתי תלויה במודלי השפה הגדולים שמשתמשים בהן כיום כשכבת קלט. אפשר לקחת קורפוס, להפוך כל קטע לווקטור, לאחסן את הווקטורים במסד נתונים שתומך בחיפוש השכן הקרוב ביותר, ולבקש ממנו את הקטעים הקרובים ביותר ל"מלוכה" או ל"שייקספיר". שום מודל מחולל אינו מעורב. זה מה שיצירה מוגברת-אחזור עושה עם המסמכים של חברה: מאנדקסת אותם כווקטורים, שולפת את הקרובים ביותר לשאלה, ומוסרת אותם למודל כדי שיענה מתוך המסמכים ולא מתוך דמיונו.

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

הלקח

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