טרנספורמציה של קטגוריות נתונים

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

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

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

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

 

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

לאחר מכן ניתן להוסיף את התכונות לאינדקס.

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

 

מיפוי כזה נקרא אוצר מילים.

אוצר מילים

באוצר מילים, כל ערך מייצג תכונה ייחודית.

Index NumberCategory
0Red
1Orange
2Blue
......

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

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

הערה לגבי ייצוג דליל

אם הקטגוריות שלכם הן ימות השבוע, לדוגמה, אתם יכולים לייצג את יום שישי עם וקטור התכונות [0, 0, 0, 0, 1, 0, 0]. עם זאת, רוב ההטמעות של מערכות למידת מכונה ייצגו את הוקטור הזה בזיכרון באמצעות ייצוג דליל מאוד. ייצוג נפוץ הוא רשימה של ערכים שאינם ריקים והאינדקסים המקבילים שלהם. לדוגמה, 1.0 לערך ו-[4] לאינדקס. כך תוכלו לחסוך פחות זיכרון ולאחסן כמות עצומה של 0. בנוסף, תוכלו להכפיל יותר את המטריצה. במונחים של מתמטיקה בסיסית, [4] הוא שווה ערך ל-[0, 0, 0, 0, 1, 0, 0].

מחוץ לווקאב (OOV)

בדיוק כמו נתונים מספריים מכילים ערכים חריגים, גם נתונים קטגוריים כוללים. לדוגמה, נניח קבוצת נתונים שמכילה תיאורים של מכוניות. אחת מהתכונות של קבוצת הנתונים הזו יכולה להיות צבע הרכב. נניח שצבעי הרכב הנפוצים (שחור, לבן, אפור וכו') מיוצגים היטב בקבוצת נתונים זו, כאשר כל אחד מהם מסווג בקטגוריה מסוימת, כדי שתוכלו להבין כיצד הצבעים השונים משפיעים על הערך. עם זאת, נניח שמערך הנתונים הזה כולל מספר קטן של מכוניות עם צבעים אקראיים (Muve, Pust, Avocado). במקום לתת לכל אחד מהצבעים האלה קטגוריה נפרדת, אפשר לקבץ אותם לקטגוריה 'הכול כלול' שנקראת מחוץ לווק (OOV). כשמשתמשים בפורמט OOV, המערכת לא מבזבזת זמן על כל אחד מהצבעים האלו.

גיבוב (hashing)

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

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

תרשים שמציג שתי רשימות של מילים. רשימה אחת מכילה 10 מילים. הרשימה השנייה מציגה את 10 המילים המחולקות ל-8 קטגוריות גיבוב (hash). כלומר, 6 מתוך קטגוריות הגיבוב מכילות מילה אחת, ושתיים מקטגוריות הגיבוב מכילות שתי מילים.  כל קטגוריית גיבוב (hash) מזוהה באמצעות מספר בין 1 ל-8, כולל. איור 4: מיפוי פריטים לאוצר מילים.

היברידי וגיבוב (hashing) ואוצר מילים

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

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

תרשים שמציג שלוש רשימות של מילים. רשימה אחת מכילה 10 מילים כדי לחלק אותה לקטגוריות. שתי הרשימות האחרות ממופה את 10 המילים האלה לקטגוריות של אוצר מילים ו-hash. כלומר, 5 מילים ממופה ישירות לאוצר המילים, ו-5 מילים אחרות ממופות לשתי קטגוריות גיבוב (hash). קטגוריית גיבוב אחת מכילה שתי מילים, וקטגוריית הגיבוב השנייה מכילה שלוש מילים.  אוצר המילים מכיל מילים נפוצות, וקטגוריית הגיבוב מכילה מילים נדירות. איור 5: גישה היברידית שמשלבת אוצר מילים וגיבוב.

הערה על הטמעות

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

דיאגרמה שמציגה את התהליך מקצה לקצה לצורך מיפוי קטגוריות כך שיציגו וקטורים באמצעות הטמעה. טבלת הטמעה מורכבת מקבוצת שורות ממוספרות. כל שורה כוללת קבוצה של ערכי נקודה צפה (floating-point) בין 0.0 ל-1.0. כדי להמיר קטגוריה, המערכת מעתיקים את השורה המתאימה מטבלת ההטמעה.
לדוגמה, אם קטגוריית הקלט הייתה 0, המערכת מעתיקה את השורה הראשונה של טבלת ההטמעה לווקטור התכונה. אם הערך שהוזן היה 1, המערכת תעתיק את השורה השנייה של טבלת ההטמעה לווקטור התכונה. איור 6: וקטורים של תכונות מעטות יותר דרך הטמעה

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

מה בנוגע להטמעות מוגדרות מראש? בדרך כלל עדיין אפשר לשנות הטמעות מוגדרות מראש במהלך האימון, כך שהן עדיין כלולות במודל.