פיתוח מערכת המלצות לשירות מוזיקה

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

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

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

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

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

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

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

מה נותנת בנייה מחדש של המלצות: אפקט בגדלים מדידים

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

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

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

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

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

דרכים לבניית המלצות: השוואת גישות

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

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

מה משווים

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

איך בוחרים בפועל

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

שלבי הטמעת מערכת המלצות

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

  1. ביקורת אירועי האזנה. מפרקים מה השירות באמת מתעד: התחלה, השלמה, דילוג, חזרה, לייק, הוספה לפלייליסט, — ואיפה אירועים מאבדים את החיבור לפרופיל המאזין.
  2. סכימת מאפיינים. מסכימים על הרכב ומקורות: פרופיל מאזין, מאפייני רצועה, הקשר סשן, היסטוריית אינטראקציות. את הסכימה מנהלים בגרסאות, אחרת חישוב רטרואקטיבי נותן תוצאות בלתי ניתנות להשוואה.
  3. פיצול נתונים. את חלקי האימון והבדיקה חותכים לפי זמן, לא באקראי: מדגם מושהה — השבועות האחרונים שהמודל לא ראה. זה מסיר דליפת עתיד ונותן הערכה הוגנת.
  4. אימון המודל. נקודת ייחוס — הפלט הנוכחי. מסבכים רק כשיש רווח מדיד, תוך השוואת פגיעה ב-top-N, שיעור השלמות, מגוון וחדשנות — מדד אחד כמעט תמיד מטעה.
  5. בדיקה על מדגם מושהה. מריצים מועמדים על נתונים שהמודל לא ראה, ומדמים התנהגות מקוונת. בוחרים גרסה עם רווח בממוצע וללא נפילה בז'אנרים נדירים.
  6. ניסוי מקוון. מפעילים על חלק מהתעבורה ועוקבים אחר השלמות, חזרות ונטישה. החלטה על פריסה מתקבלת לפי מערכת מדדים, לא לפי אחד.
  7. מסירה לתפעול. מגדירים ניטור איכות, בקרת סטיית נתונים, תקנון אימון מחדש וגלגול לאחור לגרסה קודמת. גרסאות המודל והמאפיינים נרשמות ביומן — בלי זה התוצאה לא משוחזרת.

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

מה מוסרים לידיים: מודלים, סכימות נתונים ותקנות

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

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

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

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

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

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

מדדים לפני ואחרי

  • שיעור ההאזנות שהגיעו מההמלצות: 18% → 46%;
  • שיעור הדילוגים על רצועה ב-30 השניות הראשונות: 41% → 27%;
  • שימור מאזינים ביום ה-30: 22% → 29%;
  • שיעור המבחרים הידניים מכלל זמן ההאזנה: 57% → 21%.

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

במה התחלה קרה של משתמש שונה מהתחלה קרה של רצועה

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

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

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

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

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

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

שאלות טכניות ששואלים לפני התחלה

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

כמה היסטוריית האזנה צריך כדי להתחיל?

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

איך מחברים מקורות נתונים?

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

איך בודקים איכות בחירה?

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

מה לעשות אם המערכת כבר פרוסה?

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

איך מתחשבים בהאזנה ברקע?

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

נדון במשימה: נחזור עם הערכה ותוכנית עבודה

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

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

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

תארו את המשימה והמגבלות — נחזור עם הערכה ותוכנית עבודה.