דרכים לצרוך טקסט עם דגמי Tensorflow Decision Forest

זהו דף סימון תיעוד. למידע נוסף, עיין ב-Markdown Reference (go/documentation-reference) ובמדריך סגנון התיעוד (go/documentation-style).

רקע כללי

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

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

תכונה זהות המשתמש רכישות קודמות כותרת המוצר תיאור מוצר
נתונים לדוגמה 1234 ["טלוויזיה", "ואקום"] "נתב WiFi" "הנתב הזה הוא..."


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

הפניה מהירה

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

מהירות מסקנות מהירות אימון יכולת לשנן קשרי תוויות אסימון <> הַכלָלָה
קטגוריות מרובות המהיר ביותר (++) המהיר ביותר (++) מוגבל מוגבל (+)
רב חם מהיר (+) מהיר (בהנחה שגודל ווקאב קטן יחסית) (++) טוֹב מוגבל (+)
סטים קטגוריים המהיר ביותר (+++) איטי יותר (+) הטוב ביותר מוגבל (++)
הטבעה האיטי ביותר (בהנחה של פעולות מקודד לא טריוויאליות, כמו כפל מטריצה) (+ עד +++) המהיר ביותר (בהנחה של גודל הקול >> ממד הטמעה) (+++) רַע טוב (++ עד +++)

N-גרם

N-גרם (למשל {"ה", "חתול", "הוא", "כחול"} -> {"<התחל> ה", "החתול", "חתול הוא", "הוא כחול", "כחול < end>"}) יכול להיות מועיל במקרים רבים, וללכוד מידע מילוני מקומי. הם נתמכים בכל השיטות שלהלן, אבל באים במחיר של גודל אוצר מילים גדול יותר באופן דרמטי, מה שעלול להפוך אותם לבלתי מעשיים בגלל עלות ההדרכה.

אסטרטגיות מיואש

קידוד חד-חם / רב-חם / שקית מילים

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

לדוגמה, אם אוצר המילים הוא 4 פריטים, ומוסף כמו ["טלוויזיה", "ואקום", "Wifi", "נתב"], התכונה "רכישות קודמות" תהיה וקטור צפוף <1, 1, 0, 0 >. אם נלקחו בחשבון ספירות והתכונה הייתה ["טלוויזיה", "טלוויזיה", "ואקום"], היא תהיה <2, 1, 0, 0>.

יתרונות

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

חסרונות

  • אסטרטגיה זו מובילה לעתים קרובות לפיצולים מאוד לא מאוזנים ודלילים, מה שיכול להפוך את אלגוריתמי הלמידה של DF לאט יותר להתכנס או לא יותר. זה בגלל ש:
    • יש צורך בפיצולים נוספים כדי ללמוד את אותו מידע
    • עצים דלילים מאוד מכלילים גרוע יותר מעצים מאוזנים, ובדרך כלל מביאים למודל פחות מדויק.
  • לא לוקח בחשבון מידע מיקום. זה עלול לפגוע בביצועים של תכונות שפה טבעית.
  • לימוד פיצולים מספריים על נתונים קטגוריים אינו אופטימלי; יש אופטימיזציות למציאת פיצולים קטגוריים שאינם ממונפים כאן.
  • המורכבות החישובית של האימון משתנה באופן ליניארי עם מספר פריטי אוצר המילים (שכל אחד מהם ייצרך כמאפיין מספרי). בפועל, אלא אם מערך הנתונים קטן מאוד (במקרה כזה אוצר מילים גדול עלול לעודד התאמת יתר), הדבר הופך את אוצר המילים של יותר מ-5k פריטים לאיטיים מאוד לאימון.
  • צריכת זיכרון האימון תהיה 1 בייט (עבור one-hot) או 4 בייטים (עבור ספירות) לכל פריט אוצר מילים לכל דוגמה, שכן בזמן האינדקס, הנתונים יאוחסנו כגרסה צפופה של הנתונים הדלים. זה יכול לגדול בצורה בלתי רגילה עבור אוצר מילים ומערכי נתונים גדולים יותר.

תכונות קטגוריות מרובות עם אורך קבוע

מכיוון שניתן ללמוד תכונות קטגוריות ביעילות על ידי אלגוריתמים של יער החלטות, אחת הדרכים הטבעיות לצרוך אסימונים דלילים היא ריפד/קליפ כך שיש מספר קבוע של אסימוני קלט לכל דוגמה, וכל מיקום אסימון הוא תכונה נפרדת ועצמאית. בדוגמה שלמעלה, אם ל"רכישות קודמות" יש לכל היותר 5 אסימונים, נוכל ליצור תכונות f1...f5 המייצגות אסימונים 1-5, ולבטל כל אסימונים > 5, ולהוסיף ערכים חסרים עבור דוגמאות שבהן יש < 5.

יתרונות

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

חסרונות

  • מוסיף סמנטיקה לאסימונים מרופדים "חסרים" שישמשו כרעש לדגם. זה יהיה בולט במיוחד אם יש שונות גדולה במספר האסימונים לכל דוגמה, מה שעשוי לקרות למשל עם התכונה "תיאור מוצר".
  • העצים הנלמדים יהיו רגישים מאוד לסדר, כלומר אם התכונה היא ["A", "B"] החיזוי יהיה שונה מהתחזית עבור ["B", "A"], ואם האחרון מעולם לא נראה בנתונים, המודל לא יוכל להכליל מהראשון. באופן כללי, זה ידרוש הרבה יותר נתונים כדי ללמוד חוסר מיקום.
  • כברירת מחדל, כל אסימון יוצג על ידי תכונה עם אוצר מילים שונה. גם אם תכריח את היישום לשקול את אותה קבוצה של פריטי אוצר מילים לכל תכונה, f1=”TV” יהיה פריט אוצר מילים שונה מ-f2=”TV”. המשמעות היא שהאלגוריתם יהיה פחות יעיל בלימוד הקשר בין האסימון "טלוויזיה" לתווית - הוא יצטרך ללמוד אותו בנפרד עבור כל מיקום אסימון.

אסטרטגיות טובות יותר

סטים קטגוריים

ערכות קטגוריות ( https://arxiv.org/pdf/2009.09991.pdf ) הן ייצוג תכונות ברירת המחדל של TF-DF עבור טקסט דליל. סט קטגורי הוא למעשה שק של מילים, תוך התעלמות מכפילויות וסדר. לדוגמה, התכונה "הטלוויזיה היא הטובה ביותר" תוצג על ידי הסט הקטגורי {"הכי טוב", "הוא", "ה", "טלוויזיה}.

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

if description contains “high” AND “speed” AND “gaming”:
  return True

במקרה זה, מפצל הקבוצות המקורי ילמד פיצול 1, כאשר {"high", "speed", "gaming"} => נכון.

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

יתרונות

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

חסרונות

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

הטבעות

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

שימוש בהטמעות מאומנות מראש עובד היטב עם רשתות עצביות, בין השאר מכיוון שהאתחול של מרחב וקטור שבו אסימונים או משפטים דומים קרובים במרחב האוקלידי הראה כי הוא מעביר היטב משימות NLP, והשיפועים מאותו אתחול קטנים יותר ומהירים יותר להתכנס. מאשר אתחול אקראי לחלוטין. עם זאת, עצי החלטה משתמשים בהטבעות כתכונות מספריות בודדות, ולומדים מחיצות מיושרות צירים של אותן תכונות בודדות 1 . משמעות הדבר היא שכמעט בלתי אפשרי להשתמש באותו מידע סמנטי - מכפלת נקודות או כפל מטריצה, למשל, לא ניתן לייצוג עם קבוצה של פיצולים מיושרים לצירים. יתר על כן, בניגוד לרשתות עצביות, שיכולות לעדכן את ההטמעות באמצעות ירידה בשיפוע במהלך האימון, אלגוריתמי הלמידה של ברירת המחדל של יערות ההחלטה אינם ניתנים להבדלה, כלומר ההטבעות חייבות להישאר קפואות. שימו לב שיש עבודה ( https://arxiv.org/pdf/2007.14761.pdf, למשל) על יערות החלטה ניתנים להפרדה. עם זאת, אולי בחלקו מכיוון שבפועל לא כל פיסות המידע בהטמעה מנוצלות בפועל, אפילו על ידי רשתות עצביות, אסטרטגיה זו עדיין עובדת היטב עם יערות החלטה.

יתרונות:

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

חסרונות

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

הערות


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