נתונים קטגוריים: אוצר מילים וקידוד חד-פעמי

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

שם התכונה מספר הקטגוריות קטגוריות לדוגמה
snowed_today 2 True,‏ False
skill_level 3 מתחילים, משתמשים מתקדמים, מומחים
season 4 חורף, אביב, קיץ, סתיו
day_of_week 7 שני, שלישי, רביעי
כוכב לכת 8 כוכב חמה, נוגה, כדור הארץ

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

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

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

תרגול: בדיקת האינטואיציה

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

מספרי אינדקס

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

איור 2. לכל צבע משויך ערך של מספר שלם ייחודי. לדוגמה,
      הערך 'Red' משויך למספר השלם 0, ל-'Orange'
      למספר השלם 1 וכן הלאה.
איור 2. תכונות שנוספו לאינדקס.

פעילות גופנית: בדקו את האינטואיציה

האם צריך לאמן את המודל ישירות על מספרי המדדים שמוצגים באיור 2?
כן
אם המודל עבר אימון על מספרי האינדקס, הוא יתייחס לכל אחד מהם באופן שגוי כערך מספרי, ומשמעותו של "Black" (מספר אינדקס 5) גדולה פי 5 מ-"Orange" (מספר אינדקס 1).
לא
אסור לאמן את המודל על מספרי המדדים. אם כן, הדגם יתייחס לכל מספר אינדקס כערך מספרי, ויחשוב ש-"Black" (מספר אינדקס 5) משמעותי לדגם פי 5 יותר מ-"Orange" (מספר אינדקס 1).

קידוד One-hot

השלב הבא ביצירת אוצר מילים הוא להמיר כל מספר אינדקס לקידוד one-hot שלו. בקידוד one-hot:

  • כל קטגוריה מיוצגת על ידי וקטור (מערך) של N אלמנטים, כאשר N הוא מספר הקטגוריות. לדוגמה, אם ל-car_color יש שמונה קטגוריות אפשריות, אז וקטור ה-one-hot שמייצג אותו יכלול שמונה רכיבים.
  • בדיוק אחד מהאלמנטים בוקטור one-hot מקבל את הערך 1.0, וכל שאר הרכיבים מקבלים את הערך 0.0.

לדוגמה, בטבלה הבאה מוצגת הקידוד של one-hot לכל הערך ב-car_color:

תכונה אדום Orange כחול צהוב ירוק שחור סגול חום
'אדום' 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
'כחול' 0 0 1 0 0 0 0 0
'צהוב' 0 0 0 1 0 0 0 0
"ירוק" 0 0 0 0 1 0 0 0
"שחור" 0 0 0 0 0 1 0 0
'Purple' 0 0 0 0 0 0 1 0
'חום' 0 0 0 0 0 0 0 1

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

האיור הבא מרמז על הטרנספורמציות השונות בייצוג של אוצר המילים:

איור 3.  תרשים של התהליך מקצה לקצה למיפוי קטגוריות
      לווקטורים של מאפיינים. בתרשים, תכונות הקלט הן 'צהוב',
      'כתום', 'כחול' ו'כחול' בפעם השנייה.  המערכת משתמשת במילון מאוחסן ('אדום' הוא 0, 'כתום' הוא 1, 'כחול' הוא 2, 'צהוב' הוא 3 וכן הלאה) כדי למפות את ערך הקלט למזהה. לכן המערכת ממפה את הערכים 'צהוב',
      'כתום', 'כחול' ו'כחול' לציונים 3, 1, 2, 2. לאחר מכן המערכת ממירה את הערכים האלה לווקטור מאפיינים מסוג one-hot. לדוגמה, במערכת עם שמונה צבעים אפשריים, הערך 3 הופך ל-0, 0, 0, 1, 0, 0, 0, 0.
איור 3. התהליך מקצה לקצה למיפוי קטגוריות לוקטורים של מאפיינים.

ייצוג דליל

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

[0, 0, 1, 0, 0, 0, 0, 0]

מכיוון ש-1 נמצא במיקום 2 (כשמתחילים את הספירה ב-0), הייצוג הדליל של וקטור ה-one-hot הקודם הוא:

2

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

חריגים בנתונים קטגוריים

בדומה לנתונים מספריים, גם נתונים קטגוריאליים מכילים ערכים חריגים. נניח ש-car_color מכיל לא רק את הצבעים הפופולריים, אלא גם כמה צבעים חריגים שמשמשים לעתים רחוקות, כמו "Mauve" או "Avocado". במקום להקצות לכל אחד מהצבעים החריגים האלה קטגוריה נפרדת, אפשר לקבץ אותם בקטגוריה אחת כללית שנקראת out-of-vocabulary (OOV). במילים אחרות, כל הצבעים של ערכים חריגים מקובצים לקטגוריה אחת של ערכים חריגים. המערכת לומדת משקל יחיד לקטגוריה הזו של חריגים.

קידוד של מאפיינים קטגוריאליים בממדים גבוהים

למאפיינים קטגוריאליים מסוימים יש מספר רב של מאפיינים, כמו אלה שמפורטים בטבלה הבאה:

שם התכונה מספר הקטגוריות קטגוריות לדוגמה
words_in_english ~500,000 "happy",‏ "walking"
US_postal_codes כ-42,000 ‎"02114", "90301"‎
last_names_in_Germany כ-850,000 "Schmidt",‏ "Schneider"

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

  • אימון המודל בדרך כלל מהיר יותר.
  • בדרך כלל, המודל שנוצר מסיק תחזיות מהר יותר. כלומר, יש למודל זמן אחזור קצר יותר.

גיבוב (נקרא גם טריק הגיבוב) הוא דרך פחות נפוצה לצמצום מספר המאפיינים.