מדוע המלצות GNN מדויקות יותר בנתונים דלילים
דלילות היא הסיבה העיקרית לכך שהמלצות מתנוונות ל«אנחנו מראים את מה שממילא יקנו». בקטלוג טיפוסי, להיסטוריה של רוב המשתמשים יש שתיים-שלוש פעולות: צפייה, הוספה לסל, רכישה נדירה. מטריצת האינטראקציות מלאה באחוזי שבריר, וככל שהקטלוג רחב יותר, כך צפיפות הקשרים הידועים יורדת מהר יותר.
שיטות קלאסיות — סינון שיתופי ופירוק מטריצה — נשענות על הופעות משותפות של מוצרים בהיסטוריות. כאשר ההיסטוריות כמעט ריקות, יש מעט זוגות משותפים: וקטורי המשתמשים והמוצרים נשארים לא מאומנים מספיק, והמודל בכנות נוטה לפופולריות.
בטופ שוקעים רבי-המכר, הזנב הארוך של הקטלוג אינו מוצג כלל, ופריטים חדשים לא צוברים סטטיסטיקה — המעגל נסגר.
רשתות נוירונים גרפיות משנות את הצבת הבעיה: משתמשים ומוצרים הם קודקודים בגרף דו-צדדי אחד, פעולות הן קשתות, ומאפיינים של פריט (קטגוריה, מותג, מאפיינים) מוסיפים קשרים בין מוצרים דומים.
צבירת שכנים בשני-שלושה צעדים אוספת אות במקום שבו אין אינטראקציות ישירות: המשתמש מקושר למוצר דרך קטגוריה או דרך אנשים דומים בהתנהגות.
בדיוק משום כך, בנתונים דלילים ובהתחלה קרה, איכות ההמלצות נשמרת: למשתמש חדש מספיקות אחת-שתיים פעולות, ולפריט חדש — כמה חשיפות, כדי לקבל וקטור משמעותי. להלן — כיצד אפקט זה נמדד ומועבר לתוצרי ההמלצה בפועל.
אפקט מדיד של מודלים גרפיים: מהירות, כיסוי, עמידות
המדידה הראשונה לאחר מעבר לגישה גרפית — שיעור הפגיעות בטופ. פלט שיתופי נשען על תדירות רכישות משותפות, ולכן פריטים נדירים אינם מצליחים לפרוץ לשורות העליונות, והזנב הארוך של הקטלוג עומד ללא חשיפות.
מדדי המלצות אנחנו מודדים בשכבות: בנפרד לפי משתמשים פעילים, בנפרד לפי מקטעים נדירים. מדד ממוצע אחרת מסווה כישלון בנישה, והוא בדיוק מה שקובע אם הקונה יראה משהו מלבד רבי-מכר. הגרף מוסיף לזוגות «משתמש — מוצר» קשתות לפי מאפיינים, קטגוריות וצפיות משותפות.
כיסוי הפלט גדל בזנב, ואילו הדיוק בראש הקטלוג אינו יורד. הדבר בולט במיוחד בפריטים חדשים בקטלוג: ב-LightGCN ובסכמות היברידיות מוצר קר מקבל וקטור מהקשרים, ולא מסטטיסטיקת מכירות מצטברת.
הזמן בין פרסום הכרטיס לבין החשיפה הראשונה מתקצר מימים לשעות — השקת קולקציה אינה ממתינה לצבירת היסטוריית רכישות.
בנפרד אנחנו בודקים את עמידות המודל. הגרף מורכב מכמה סוגי קשרים, ולכן ניתוק של מקור אות אחד אינו מאפס את הפלט. אנחנו בודקים זאת במכוון: מכבים זרם, בוחנים את הירידה בשיעור הפגיעות בטופ ואת זמן החזרה לערכים הקודמים.
גישות לבניית מודלים גרפיים: השוואה
ייצוג הנתונים קובע את תקרת האיכות להמלצות GNN יותר מאשר הארכיטקטורה עצמה. אם במערכת יש רק אירועים, עובד גרף אינטראקציות; אם הקטלוג מסומן בקשרים בין מוצרים — מחברים גרף ידע; מודל היברידי משתמש בשני המקורות, ומאפייני האובייקטים נשארים רמת בסיס שאינה דורשת בניית קשתות.
בוחרים לא לפי «מודרניות», אלא לפי צפיפות הנתונים ועלות התחזוקה: כל מקור נוסף מגביר את התפוקה ובמקביל מסבך את ההכנה ואת ניתוח השגיאות. להלן — השוואה בין הגישות עם תנאי היישום.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| רק גרף אינטראקציות | תעבורה צפופה, הרבה נגיעות חוזרות באותם פריטים | התחלה קרה: משתמשים ומוצרים חדשים ללא היסטוריה אינם מקבלים קשרים |
| רק גרף ידע | קטלוג עם קשרים מובהקים, מעט אירועים | אינו משקף את הטעמים של קהל ספציפי, דורש אונטולוגיה מדויקת |
| מודל היברידי: אינטראקציות בתוספת ידע על המוצר | שני המקורות מלאים, יש זנב ארוך של פריטים | יקר יותר בהכנת נתונים, קשה יותר להסביר את סיבת הפלט |
| מאפייני אובייקטים ללא גרף | נתונים דלילים, צריך להשיק במהירות רמת בסיס | נתקל בתקרה, אינו קולט רכישות משותפות |
בפועל, כמעט תמיד מתחילים ממאפייני אובייקטים ומגרף אינטראקציות — שכבה זו נותנת פלט עבודה ונמדדת באופן יציב. קשתות ידע מחברים כאשר מופיע זנב ארוך ופריטים חדשים ללא הקלקות: קשרים בין מוצרים מפצים על היעדר היסטוריה.
המעבר מתבצע בהדרגה, ולא בשכתוב. מקור נוסף מחובר לצד, המדדים מושווים על אותה דגימה, ורק לאחר עלייה יציבה הענף הישן מנותק — תוך שמירה על אפשרות חזרה לאחור אם האיכות בתעבורה חיה תרד.
כיצד אנחנו בונים המלצות GNN: שלבי הטמעה
הטמעת מודל גרפי מתחילה לא מבחירת ארכיטקטורה, אלא מנתונים. כל עוד לא מתוארים הקשרים בין משתמשים, אובייקטים והקשר, כל מודל לומד על רעש. לכן שלבי הפיתוח הולכים מהלוגים למוצר, ובכל שלב יש ארטיפקט שאפשר לבדוק לפני המעבר הלאה.
- ניתוח לוגים ואירועים. מאחדים צפיות, הוספות לסל וסירובים לציר זמן אחד, מנקים בוטים וכפילויות. בפלט — הבנה אילו קשרים חסרים בנתונים עבור הגרף.
- סכמת קשרים. קובעים סוגי קודקודים וקשתות, המשקלים והכיוון שלהם, ומסמנים בנפרד אזורים דלילים. הסכמה מסוכמת לפני האימון — אחרת אין למה להשוות את איכות הפלט.
- הרכבת ויטרינות. מכינים ערכי אימון ובדיקה לפי זמן: העבר — לאימון, חיתוך מאוחר יותר — לבקרה. כך מונעים דליפה של אירועים עתידיים לתוך המאפיינים.
- אימון המודל. מאמנים ייצוגי קודקודים, עוקבים אחרי התאמת-יתר על אובייקטים נדירים ומכווננים את עומק ההתפשטות בקשתות. אובייקטים קרים מגבים במאפייני תוכן.
- בדיקת איכות. מחשבים פגיעה בטופ, מגוון הפלט וכיסוי הקטלוג. הקריטריון העיקרי — תקופה נדחית: איכות על אירועים שהמודל לא ראה באימון.
- מסירה למוצר. מוסרים שירות פלט עם ניהול גרסאות של מודלים, תיעוד לוגים וחזרה לגרסה קודמת. אחרי השחרור עוקבים אחרי סטיית נתונים ומאמנים מחדש לפי לוח זמנים.
סדר השלבים הוא רציף, אך לא ליניארי: אם בדיקת האיכות נכשלה, אנחנו חוזרים לסכמת הקשרים או לויטרינות, ולא מאמנים את המודל מחדש באופן עיוור.
ארטיפקטים של הפרויקט: סכמות גרף, ויטרינות מאפיינים, נהלים
מודל על גרף אינו חי בפני עצמו: התנהגותו נקבעת על ידי האופן שבו מתוארים הקשרים והמאפיינים. לכן הפרויקט נסגר לא בהצגת מדד, אלא במסירת קו מתאר עבודה — צוות הלקוח צריך לדעת להרכיב מחדש את הגרף, לאמן מחדש את המודל ולנתח תקלה ללא עזרתנו.
- סכמת גרף. סוגי קודקודים וקשתות, כיוון הקשרים, משקלים, כללי מיזוג כפילויות. הסכמה מנוהלת בגרסאות: הוספת סוג קשת חדש אינה שוברת מודלים שכבר אומנו.
- תיאור הרכבת קשרים. מאילו אירועים נוצרת קשת, איזה חלון תצפית נלקח, כיצד מנותקים אינטראקציות אקראיות ומנופחות.
- ויטרינת מאפיינים. מאפייני קודקודים וקשתות עם המקור של כל אחד, לוח זמנים להרכבה מחדש, בדיקות לסטיית התפלגות בין ויטרינות.
- נוהל אימון מחדש. טריגרים להפעלה — הצטברות אינטראקציות חדשות או ירידה במדדי דירוג; סדר ולידציה, קריטריון קבלה וחזרה לגרסה הקודמת.
- כללי גישה. תפקידים, רמות אנונימיזציה, הפרדת ויטרינות לפי רגישות, יומן פניות לנתונים על התנהגות משתמשים.
- בקרת איכות. מערכי בדיקות לנתוני קלט, בדיקות שלמות גרף, מדדי איכות פלט וסדר ניתוח תקלות עם ציון אחראים.
- תיעוד ומסירה. הוראות הפעלה ואימון, קונפיגורציות סביבות, סכמת פריסה, ניתוח ארכיטקטורה עם הצוות שלכם.
כל ארטיפקט מתקבל לפי סימן פורמלי: אפשר לפתוח אותו, להריץ אותו ולשנות אותו בלעדינו. אם סעיף לא עובר את הבדיקה הזו — הוא נשאר בעבודה, ולא בדוח.
מקרה בוחן: כיצד מודל גרפי העלה את שיעור הפגיעות בטופ הפלט
קטלוג הוא זנב ארוך: רוב הפריטים מקבלים אינטראקציות בודדות, ואילו 1% המוצרים המובילים אוסף את עיקר הצפיות. סינון שיתופי קלאסי על אובייקטים כאלה כמעט אינו מתאמן — וקטור עבור מוצר עם שניים-שלושה אירועים נבנה על רעש, ורק פריטים מקודמים מצליחים לפרוץ לפלט.
מה שינינו במודל
בנינו מחדש את הנתונים כגרף: קודקודים — משתמשים, מוצרים, קטגוריות ומאפיינים, קשתות — אינטראקציות וקשרים בין מאפיינים. כבסיס לקחנו רשת נוירונים גרפית LightGCN — היא מפיצה אות בקשתות ומושכת פריטים דלילים בזכות שכנים, — ומעל הוספנו קשתות מבסיס ידע: תאימות, מותג, סדרה. האימון התבצע על נגטיבים מדוגמים, אחרת המודל לומד «פופולרי = רלוונטי».
מדדים לפני ואחרי
שיעור הפגיעות בטופ-10 גדל בערך פי 1.8, ומוצרים מחוץ ל-1% המובילים לפי פופולריות החלו לקבל חשיפות רבות יותר באופן ניכר — 26% לעומת 7%. שלושה סוגי שגיאות נעלמו: חזרה של הפלט על קטגוריה אחת, כפילויות של וריאנטים של אותו דגם בתוך מסך אחד, והמלצות על פריטים שאינם זמינים להזמנה.
בדקנו לא רק באופן לא מקוון על תקופה נדחית, אלא גם על חלק מהתעבורה — האפקט החזיק לאורך כל שבוע התצפית בלי ירידה בהמרה בקטגוריות המרכזיות. גרסאות המודל והמשקלים נשמרים, ולכן חזרה לפלט הקודם נמשכת דקות, אם יהיה צורך לסגור את הניסוי.
במה שונה גרף ידע מגרף אינטראקציות?
גרף אינטראקציות נאסף מלוגים: קודקודים — משתמשים ואובייקטים, קשתות — צפייה, קליק, הוספה לסל, רכישה, ולכל קשת משקל וחתימת זמן. מבנה כזה צפוף ומתיישן מהר, אבל עונה על השאלה «מה דומה בהתנהגות» בדיוק שאינו בר-השגה עבור מאפיינים. נקודת החולשה — התחלה קרה: לאובייקט חדש ולמשתמש חדש פשוט אין קשתות.
גרף ידע מתאר את תחום הדעת, ולא התנהגות: אובייקט, תכונותיו, קטגוריה, מותג, תאימות, מגבלות. הקשתות כאן מטופלות — «נכלל ב», «מקביל», «דורש», «מחליף» — וקובעות קשר בין אובייקטים לפי משמעות, ולא לפי תדירות פעולות משותפות. הוא דליל ומשתנה לאט, אבל מספק הסבריות: רואים דרך איזו שרשרת קשרים האובייקט נכנס לבחירה.
ההבדל בין הגישות — במקור האמת ובאופק. אינטראקציות מדויקות בקהל חם, אבל עיוורות מחוצה לו; ידע מכסה קטגוריות נדירות וביקור ראשון, אבל אינו יודע את הביקוש הנוכחי. אף אחד מהגרפים בנפרד אינו סוגר גם את הבחירה וגם את ההסבר בבת אחת.
לכן בפועל לרוב אוספים את שניהם ומקשרים: ישויות משותפות — משתמש, אובייקט, קטגוריה — הופכות לגשרים בין הגרפים. ייצוגי קודקודים משני המקורות מובאים למרחב אחד, ושכבת קשב מחליטה איזה גרף לשקלל חזק יותר עבור שאילתה מסוימת.
אנחנו מתכננים את החיבור כך שניווט של מקור אחד יפגע בפלט בהדרגה, ולא יפיל אותו: כך קל יותר להשוות אפשרויות ולחזור אחורה.
ספקות טכניים: נתונים, איכות, הסבריות
מנהל טכני לפני התחלה שואל אותן שאלות: האם ההיסטוריה תספיק, כיצד המודל מדביק שינויים בקטלוג, במה להוכיח עדיפות על הפלט הנוכחי וכיצד להסביר את התוצאה. להלן — תשובות קצרות.
האם נפח ההיסטוריה יספיק?
אנחנו בוחנים לא את אורך הלוג, אלא את הקישוריות: כמה אינטראקציות יש למוצר פעיל ומה שיעור הפריטים הקרים. אם למחצית הקטלוג יש פחות מעשרה אירועים, מתחילים מהיברידי — מאפייני תוכן וכללים משלימים את ההטמעות הגרפיות, אחרת המודל ממליץ רק להיטים.
כיצד הוא שורד עריכות יומיות בקטלוג?
מוצרים חדשים ומוצרים שיצאו אינם שוברים את הפלט: קודקודי הגרף מתעדכנים באופן אינקרמנטלי, והקשרים מחושבים מחדש לפי האירועים שהתקבלו. עבור פריטים ללא היסטוריה מוסיפים הטמעות תוכן — המוצר מקבל פלט משמעותי מהיום הראשון, ולא אחרי חודש של צבירת קליקים.
במה תוכיחו שהגרף טוב יותר מהפלט הנוכחי?
מדידה לא מקוונת על תקופה נדחית: משווים recall ו-NDCG על מספר שווה של פריטים, ובנפרד מחשבים את שיעור המוצרים הקרים בטופ. המילה האחרונה היא של בדיקה מקוונת על חלק מהתעבורה — מדידה לא מקוונת אינה מראה כיצד משתמשים מגיבים לפלט החדש.
באיזו תדירות מאמנים מחדש את המודל?
ההטמעות מתעדכנות לפי לוח זמנים ובזרם של אינטראקציות חדשות, אימון מחדש כבד — לעתים רחוקות יותר, עם הצטברות נפח נתונים מספיק. כל גרסה מתועדת יחד עם המדדים, ולכן חזרה לגרסה הקודמת נמשכת דקות.
מה תציגו בהסבר להמלצה?
לא סיבה אחת, אלא נתיב בגרף: שכנים לפי אינטראקציות, מוצרי «גשר» בין תחומי עניין, תרומת מאפייני תוכן. אנחנו מוסרים זאת כשדה נפרד בתשובה — התמיכה ומנהלי הקטגוריות רואים על מה מבוסס הפלט, ויכולים לערער עליו באופן ענייני.
נדבר על המשימה: מה לשלוח להערכה
ככל שנתוני הקלט מדויקים יותר, כך יש פחות הנחות בתוכנית העבודה. בשלב הדיון במשימה אנחנו לא צריכים גישה לקו העבודה — מספיקה דגימה של לוגים, תיאור הקטלוג והלוגיקה הנוכחית של הפלט. להלן רשימה של מה לשלוח, כדי שהערכת הפרויקט תישען על העובדות שלכם, ולא על ממוצעים בשוק.
- מוצר ותרחיש: מה ואיפה אנחנו ממליצים — עמוד הבית, כרטיס אובייקט, ניוזלטרים; מהו אובייקט ההמלצה וכמה גדול הקטלוג.
- פלט נוכחי: כללים, «פופולרי», סינון שיתופי — מה עובד עכשיו, אילו מדדים כבר נאספים ומה לא מספק בתוצאה.
- לוגים של אינטראקציות: ייצוא אירועים לתקופה עם סוג פעולה, חתימת זמן, מזהי משתמש ואובייקט; שיעור התעבורה האנונימית ועומק ההיסטוריה.
- קשרי אובייקטים: קטגוריות, מאפיינים, מותגים, ספקים, רכישות משותפות — כל מה שממנו נבנות קשתות הגרף, ובאיזה אופן זה נשמר.
- מדדי יעד: כיסוי ב-K הפריטים הראשונים, שיעור מעברים, המרה; כיצד מודדים שינויים והאם יש קבוצת ביקורת.
- מגבלות: זמן תגובה של שירות ההמלצות, תדירות אימון מחדש, דרישות להסבריות הפלט, כללי עבודה עם נתונים אישיים.
- תשתית ותפקידים: היכן מחושבים המודלים, מי אחראי לנתונים ולהרשאות, כיצד יוצאים עדכונים — האם אפשר לשנות את הפלט בלי שחרור אפליקציה.
לפי מערך זה נפרק את תוכנית העבודה לשלבים: הכנת נתונים וגרף, מודל גרפי בסיסי, סכמה היברידית עם קשרי תחום הדעת, מדידה בקו העבודה. נחזור עם הערכת לוחות זמנים ורשימה של מה שיידרש מהצוות שלכם.







