הטמעות: נתוני קלט קטגוריים

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

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

קלט לדוגמה לבעיה שקשורה להמלצות על סרטים.

איור 3. נתונים לגבי הבעיה שלנו בהמלצות לסרטים.

כל שורה של המטריצה באיור 3 היא דוגמה לתיעוד היסטוריית הצפייה של המשתמש, והיא מיוצגת כמדחס מעט (senter) – כל משתמש צופה רק בחלק קטן מכל הסרטים האפשריים. השורה האחרונה תואמת למדרון דליל [1, 3, 999999], תוך שימוש במדדים של אוצר המילים המוצגים מעל סמלי הסרט.

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

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

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

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

בדרך כלל, הוקטור עשוי להכיל ספירה של המילים בחלק גדול יותר של טקסט. שיטה זו נקראת "תיק מילים{/1}. בוקטור 'כמה מילים' בכמה מ-500,000 הצמתים יהיה ערך שאינו אפס.

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

גודל הרשת

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

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

  • כמות החישוב. ככל שיותר משקלים נדרשים יותר חישוב, כדי לאמן את המודל ולהשתמש בו. קל יותר מהיכולות של החומרה שלכם.

חסר קשר בין וקטורים

אם אתם מזינים את ערכי הפיקסלים של ערוצי RGB לסיווג תמונה, הגיוני לדבר על הערכים "close" כחול אדמדם קרוב לכחול טהור, גם מבחינה סמנטית וגם מבחינת המרחק הגיאומטרי בין וקטורים. אבל וקטור עם 1 באינדקס 1247 עבור "horse" אינו קרוב יותר לוקטור עם 1 באינדקס 50,430 עבור "antelope" מזה של וקטור עם 1 עם אינדקס 238 עבור "television".

הפתרון: הטמעות

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