איך בנינו ל־ChatGPT מערך פרסום חדשני ששומר על אמון המשתמשים ועל רלוונטיות
מאת ריטנדרה דאטה וקרתיק גופלרטנם, חברי הצוות הטכני
מערכות פרסום מסורתיות בנויות להגיב לביטויים נקודתיים ונפרדים של כוונת המשתמש. משתמש מחפש משהו באינטרנט או צופה בו, מערכת הפרסום מקבלת את השאילתות והצפיות בדפים כאירועים, ומחפשת מודעות מתאימות על סמך אותם אירועים. בניית מערך פרסום ל־ChatGPT הייתה שונה: כוונת המשתמש מתפתחת לאורך שיחות ומשתנה לאורך כמה סבבי שיחה, ולעיתים אין רגע שמתאים לפרסום. כדי לתמוך בדפוס החדש הזה, בנינו מערכת ייעודית למסירת מודעות. מערך הפרסום החדש הזה מבוסס על LLM בחזית הטכנולוגיה, שהותאם במיוחד ועבר אימון נוסף. הוא מפעיל כלים לאחזור (זיהוי האפשרויות המובילות), לדירוג (חיזוי מעורבות המשתמש), לרלוונטיות (הערכת התועלת שבמודעה) ולניהול מכרזים לבחירה סופית של מודעות ולתמחורן.
מערכת הפרסום שלנו מתחשבת בניואנסים של מטרות המשתמש המשתנות בזכות שלוש החלטות תכנון מרכזיות: 1) יישום סשנים של פרסום ששומרים מצב, כלומר זוכרים מידע בין סבבי שיחה ובין שיחות שונות; 2) הסתמכות על LLM מותאם שעבר אימון נוסף, ומשתמש בארכיטקטורה של קריאות לכלים כדי לפרש את הקשר השיחה ואת הכוונה שבבסיסה, ואז לבחור, לדרג ולמסור מודעות ביעילות; 3) הפעלת תהליך בחירת המודעות בנפרד מיצירת התשובות של ChatGPT, בשירות משלו, כדי למנוע ממודעות להשפיע על התשובות ולשמור על הנימה הניטרלית של ChatGPT. אנחנו משתמשים ב־LLM שעבר אימון נוסף כדי לתזמר את תהליך הפרסום כולו ולקבוע איזו מודעה נכון להציג ומתי, על סמך סבב השיחה הנוכחי של המשתמש וגם היסטוריית השיחות שלו. בעבר, הקמה מאפס של מערכת פרסום כזאת, שמשתפרת מעצמה, הייתה אורכת שנים. לעומת זאת, ChatGPT Ads הגיע לקצב הכנסות שנתי של מיליארד דולר פחות מ־200 יום לאחר ההשקה; וכיום, יותר מ־100,000 מפרסמים כבר פרסמו מודעות ב־ChatGPT מאז השקתו.
בקשת פרסום רגילה מתחילה בדרך כלל באירוע מוגדר היטב. משתמש שולח שאילתת חיפוש או פותח דף אינטרנט, ומערכת הפרסום מקבלת בקשה. מערכת כזאת פשוטה למדי: היא מאחזרת מודעות מועמדות, מדרגת אותן, מנהלת מכרז כדי לתמחר כראוי את הזדמנות הפרסום, ומציגה למשתמש את המודעה שנבחרה. ב־ChatGPT לא נוצר באופן טבעי רגע מובחן כזה.
אנשים מגיעים לשיחה עם ChatGPT עם מטרות, ולא עם שאילתת חיפוש שמצריכה תשובה אחת. הם עשויים לתכנן טיול, לבחור תוכנה לעסק, לרהט בית או ללמוד תחביב חדש. כל זה לא קורה בסבב שיחה אחד. לעיתים קרובות ChatGPT עוזר למשתמש להבהיר תוך כדי השיחה מה חשוב לו.
למשל, צוות ההנדסה שלנו שאל את ChatGPT איך להתאמן למרוץ: השיחה נפתחת בשאלה כללית על ריצה. אחרי כמה חילופי דברים, חברי הצוות שואלים על נעליים שיעזרו באימונים. המשמעות המסחרית של השיחה משתנה עם כל אילוץ נוסף — וההקשר האישי הזה מתפתח לאורך כמה סשנים. מערכת שהייתה פועלת על סמך ההודעה הראשונה הייתה עלולה לזהות כוונה שגויה לחלוטין, לפגוע בחוויית המשתמש ולהפריע לו.
בניית מערכת הפרסום שלנו דרשה מאיתנו להתקדם מעבר לארכיטקטורת פרסום של בקשה–תגובה ולבנות מערך מאפס, שיזהה הזדמנויות כלכליות אפשריות תוך מתן עדיפות לאמון המשתמשים ולערך שהם מקבלים.
הפיכת כל הודעה לבקשה עצמאית, כמו במערכת פרסום מסורתית, הייתה יוצרת כמה סיכונים בהקשר של הצ'אט שלנו: 1) הבנה שגויה של מטרת המשתמש עקב פישוט יתר; 2) התחלת תהליך הפרסום מוקדם מדי, לפני שהצורך האמיתי של המשתמש התבהר; 3) הצגת מודעות שמפריעות למשתמש להתקדם במקום לתמוך בו; 4) הפעלה חוזרת ולא יעילה של תהליך הפרסום בכל שינוי בבקשה, שיוצרת רעש ועלויות מיותרות. במקום להתבסס על אירועים בודדים, מערכת הפרסום (הכוללת אחזור, דירוג ומסירה) מנהלת סשן ששומר מצב. כלומר, סשן הפרסום פועל לאורך סבב שיחה שכשיר לפרסום, זוכר את המידע ומעדכן אותו ככל שהוא מתפתח. ChatGPT שולח את ההקשר הראשוני של הבקשה לשרת הפרסום. מערכת הפרסום עוקבת אחר השיחה המתפתחת ומתאימה את עצמה אליה, במקום להסתמך על שאילתה בודדת שמאבדת את מורכבות ההקשר.
תהליך בחירת המודעות פועל במקביל ליצירת התשובות הרגילה של ChatGPT, כדי להבטיח שתהליך הפרסום לא ישפיע על התשובות. המודעות מסוננות ונבחרות במערכת נפרדת, שמקבלת את השיחה ופועלת לפי מגבלות כשירות, איכות ומסירה משלה. הגבול הארכיטקטוני החשוב הזה — שירותים שונים שמשתמשים במודלים נפרדים ובקוד נפרד — מאפשר לשרתי הליבה של ChatGPT לטפל ביצירת התשובה האורגנית. בינתיים, מערכת הפרסום בוחנת באופן עצמאי אם יש הזדמנות מתאימה לפרסום, ואם כן, מכינה מודעה ממומנת בתהליך הגשה נפרד.
הפרסום פועל במקביל למסלול המענה של ChatGPT.
מעבר להגנה על חוויית המשתמש, להפרדה הזאת יש כמה השלכות מעשיות. ChatGPT אינו תלוי במערכת הפרסום — השירותים אינם כרוכים זה בזה בשום צורה ואינם חולקים מודל ליצירת תוכן. לכן, אם מערכת הגשת המודעות אינה זמינה או פועלת לאט, התשובה האורגנית של ChatGPT ממשיכה להיווצר ללא הפרעה. כלומר, מערכת הפרסום אינה יכולה להשבית את ChatGPT או לעכב את פעולתו. יתרון נוסף של ההפרדה הזאת הוא השמירה על רף גבוה מאוד של ערך שהמודעות צריכות לספק. גם אי־החזרת מודעה היא תוצאה רגילה ומוצלחת. המערכת מוסרת מודעה רק אם היא מועילה בבירור למשתמשים ולמפרסמים.
הרכיב הארכיטקטוני המרכזי הנוסף במערך הפרסום שלנו הוא LLM שעבר אימון נוסף, שמפרש שיחות ומנהל את תהליך הפרסום כולו בלולאה אג'נטית — באמצעות קריאות לכלים שמפעילים את פונקציות הליבה של מערכת הפרסום, משלב האחזור, דרך הדירוג והמכרז ועד למסירה. אנחנו מכנים את ה־LLM הזה המתזמר.
תהליך הפרסום מתחיל בהבנת כוונת המשתמש כדי להתחיל באחזור: איסוף מהיר ורחב במכוון של מודעות אפשריות, שיסוננו בהמשך. קבלת השיחה בהדרגה יוצרת בעיית אחזור עשירה יותר, אך גם עמומה יותר, משום שמערכת הפרסום צריכה להבחין בין הכוונה הנוכחית לבין הקשר שכבר אינו רלוונטי. המתזמר חייב לפרש הפניות להודעות קודמות, לזהות מתי משתמש מדבר על מצב היפותטי, ולהימנע מהתייחסות לכל אזכור של מוצר או שירות כאל בקשה לקנות משהו.
מתזמר הפרסום משתמש בשיחה ובהקשר הזמין על המשתמש, ופועל בסבבים כדי למצוא מודעות טובות. בכל סבב הוא בוחר איזה כלי להפעיל ומתי, במטרה למצוא את המודעה המתאימה ביותר לשיחה ולהקשר — זו שמאזנת בין ערך גבוה למשתמש לבין ערך גבוה למפרסם. אם המשתמש בוחר בהתאמה אישית של מודעות, המתזמר מביא בחשבון גם מידע זמין שאינו רגיש על שיחות קודמות שלו, כדי למצוא את המודעות המתאימות ביותר.
מתזמר הפרסום מפעיל כלי מסירת מודעות בסבבים כדי למצוא מודעות בעלות ערך.
ככל שהשיחה מתקדמת ומתזמר הפרסום מקבל מידע מעודכן יותר, הוא יכול להפעיל סדרה חדשה של קריאות לכלים עם ההקשר המעודכן, כדי למצוא מודעות טובות יותר ולהחזיר אותן ליישום הלקוח. הלקוח יכול להשתמש במודעות החדשות אם הן מגיעות בזמן.
המתזמר נועד לאזן בין הערך למשתמש לבין הערך למפרסם, ותמיד לתת עדיפות למשתמשים.
מערכת הפרסום מורכבת מכלים נפרדים, והמתזמר מפעיל אותם בסבבים כדי למצוא את המודעות הטובות ביותר לשיחה. בקווים כלליים, המתזמר הופך שיחות לתקצירים קצרים, ולאחר מכן לשיכונים סמנטיים (ייצוגי משמעות שמורים שמערכת הפרסום יכולה לסרוק בקלות רבה יותר). בעזרתם הוא מאחזר מודעות מועמדות, מסנן אותן לפי כשירות (על סמך תקציב, הגדרות המשתמש ובדיקות מקדימות נוספות), מעריך את איכותן ואת הרלוונטיות שלהן, ומבצע דירוג סופי כדי לזהות הזדמנויות בעלות ערך גבוה להצבת מודעה בסוף תשובה בצ'אט. לכן, כל מודעה חייבת לעמוד ברף גבוה של כשירות ורלוונטיות כדי שניתן יהיה להציג אותה.
תחילה, ה־LLM המתזמר מכין שאילתה אחת או יותר שמייצגות את הכוונה המסחרית הרלוונטית. התהליך עשוי לכלול ניסוח מחדש של הקשר השיחה כדי להרחיב את האפשרויות המסחריות מעבר לשאילתות חיפוש תואמות אחת לאחת, ולאחר מכן יצירת ייצוגים סמנטיים. כך המתזמר מזקק שיחה מרובת חילופי דברים לגרסה מסוכמת עבור מערכת האחזור, שמאחזרת מודעות ממסד הנתונים שלנו באופן ממוקד.
הצגת המודעות תועיל יותר גם למשתמשים וגם למפרסמים אם הן יופיעו רק כשיש הבנה עמוקה של כוונת המשתמש. שימוש בכמה שאילתות מאפשר לשמר היבטים שונים של הכוונה. למשל, שיחה על תכנון טיול עשויה לכלול צרכים נפרדים הקשורים לתחבורה, ללינה או לפעילויות. מערכת האחזור יכולה לשמר את ההבחנות האלה, במקום לדחוס את השיחה כולה למחרוזת מילולית אחת.
לדוגמה, נבחן רצף אפשרי של הודעות בשיחה על נעלי טיולים:
What should I cover on a two-day trip to Yosemite?
Will it be cold next week?
New [insert brand] product lines?
אף שהמשתמש לא קישר בין השאלה על מותג הנעליים לבין הטיול ליוסמיטי, מערכת הפרסום שלנו עשויה לייצג את השיחה בשתי שאילתות, כגון [shoes appropriate for hiking trip] ו־[new [brand] product lines good for travel]. זה עשוי להיות רק הניסיון הראשון; המתזמר נועד לשכלל את הייצוגים האלה בסבבים, עד שימצא במלאי שלנו מודעות בעלות ערך רב למשתמש.
אחזור הוא תהליך של יצירת מאגר רחב במכוון של מודעות אפשריות. מודעות מועמדות עשויות להגיע מאסטרטגיות אחזור שונות, ובהמשך להתחרות בכפוף לאותן מגבלות הגשה. אנחנו בונים כמה אינדקסים, שכל אחד מהם מותאם למגבלות שונות של המערכת והמוצר. למשל, האינדקס למודעות מפיד מוצרים נועד להביא בחשבון ביקורות חיוביות או שליליות על המוצרים כשהוא מאחזר את המודעות הטובות ביותר. שיקול זה אינו רלוונטי למודעות אחרות, שלא בהכרח מקושרות לביקורות. כל אינדקס מותאם לגרסה מסוימת של חיפוש מקורב של השכן הקרוב ביותר (ANN), באמצעות שיכונים שמייצגים את כוונת המשתמש. חיפוש ANN הוא אלגוריתם קירוב לאחזור באינדקסים סמנטיים גדולים. הוא מאפשר לאחזר מודעות במהירות רבה, תוך התקרבות לפתרון טוב במקום חיפוש אחר הפתרון ״הנכון״, ושומר על רוב המועמדות הרלוונטיות.
מערכת הפרסום משתמשת בשאילתות שנוסחו מחדש כדי ליצור שיכונים סמנטיים במהלך אחזור המודעות ולהפיק מאגר רחב של מודעות מועמדות.
מטרת הסינון היא להוציא משיקול את כל המודעות המועמדות שאינן עומדות ברף הנדרש להצגה מבחינת רלוונטיות, הצעות מחיר ותקציב. בהתאם למודעה המועמדת ולתצורה, בדיקות הסינון עשויות לכלול זמינות של קריאייטיב וקמפיין (האם הקמפיין או חומרי הקריאייטיב פעילים), טירגוט הקמפיין (למשל, באילו אזורים ושפות מותר לקמפיין לפעול), מגבלות מדיניות (דרישות ציות בנוגע למה שמותר לפרסם), זמינות תקציב (האם נותר לקמפיין תקציב להוצאה), ויסות קצב ההוצאה (האם הקמפיין צריך להוציא תקציב כעת או בשעה אחרת ביום), התאמה להצגה (באילו סוגי שיחות אפשר להציג את המודעה), ומניעת כפילויות ברמת המפרסם והקמפיין (בחירת מספר מתאים של מודעות לכל מפרסם כדי להבטיח השתתפות הוגנת של עסקים).
מודעות מועמדות שעוברות את בדיקות הכשירות ממשיכות לשלב הניקוד. בשלב זה המתזמר קורא לכלים במערכות ניקוד שונות, שבוחנות שיקולי הגשה כגון רלוונטיות סמנטית (האם המודעה רלוונטית למטרת המשתמש?), מעורבות חזויה (האם סביר שהמודעה תזכה לצפיות ולהקלקות ותוביל לתוצאה הרצויה למפרסם?) וביצועי עבר (האם המודעה השיגה תוצאות טובות כשהוצגה למשתמשים עד כה?). המתזמר מסנן מודעות גם כדי להבטיח רלוונטיות ובטיחות לפני המכרז. המערכות האלה מצמצמות את המבחר למאגר קטן יותר של מועמדות שמוכנות למכרז, אך עדיין אינן קובעות איזו מודעה תימסר בסופו של דבר.
המתזמר מעריך את המודעות המועמדות שהוכנו בהקשר של השיחה, ובוחר אילו מהן מתאימות מספיק להשתתף במכרז הסופי. המתזמר אינו מחליט ישירות איזו מודעה תוגש, וגם אינו קובע מחיר. הוא מעביר לכלי המכרז מודעות מועמדות שמתאימות להקשר, כדי שהכלי יעריך אותן.
במכרז מופעלים מנגנוני ההגשה הסופיים, ובהם קבלה למכרז (עמידה בסף מינימלי של רלוונטיות וערך), ויסות קצב ההוצאה (פריסה אחידה יותר של תקציב הפרסום), חישוב הצעות מחיר ומאפייני מכרז, דירוג שמשקלל איכות, תמחור ובחירה סופית.
לאחר המכרז, יש שתי סיבות אפשריות לכך שמודעה לא תימסר, ושתיהן ייחודיות למדיום השיחתי של ChatGPT.
המודעה עלולה להיתפס כלא הולמת בצ'אט: גם אם מודלים לבדיקת תקינות (המודלים שקובעים מתי ראוי להגיש מודעה) קבעו שהשיחה עצמה בטוחה להצגת מודעות, והמודעה עצמה נמצאה תואמת למדיניות, לעיתים היא עדיין עלולה להיתפס כלא הולמת בהקשר של שיחות מסוימות. המתזמר מונע את הצגתן של מודעות כאלה.
ייתכן שהבקשה למודעה לא תושלם בזמן: אם מודל ChatGPT מוכן להשיב אך המודעה עדיין אינה מוכנה להצגה, הזמן הקצוב לבקשת המודעה מסתיים והיא אינה נמסרת. לכן, אחת המטרות של מערכת הפרסום היא לפעול במהירות האפשרית. זמן התגובה של מודל ChatGPT משתנה, ואיננו מעכבים תשובות בצ'אט כדי להמתין לטעינת מודעות.
אם המודעה עוברת את כל הבדיקות שלעיל, אנחנו שולחים אותה לממשק המשתמש לצורך הצגה. אנחנו רואים בכך מסירה של מודעה מצד השרת, אך עדיין ייתכן שהיא לא תוצג למשתמש — וכך המערכת תוכננה לפעול.
במוצר שיחתי כמו ChatGPT, מסירת הקריאייטיב של מודעה מצד השרת אינה מבטיחה שהמודעה תוצג; עליה להגיע גם בזמן כדי להשתלב בסבב השיחה הנוכחי. הקריאייטיב של המודעה כולל את הכותרת, התיאור, קישור היעד וכל קריאה לפעולה. בנוסף, מערכת הפרסום מחזירה גם הקדמה שנוצרה באמצעות מודל: פתיח קצר וניטרלי שמסביר כיצד המודעה קשורה לשיחה. ההפרדה בין ההקדמה לקריאייטיב משמרת את המסר של המפרסם, ובו בזמן שומרת על הנימה הניטרלית של ChatGPT.
ממשק המשתמש של ChatGPT מקבל את ההקדמה ואת הקריאייטיב של המודעה כחבילה אחת. אם החבילה מגיעה לפני שיצירת התשובה של ChatGPT הושלמה, הממשק מציג את המודעה מתחת לתשובה, עם סימון ברור שהיא ממומנת. אם היא מגיעה מאוחר מדי, המודעה אינה מוצגת באותו סבב שיחה. זה ההבדל בין מסירת מודעה מצד השרת לבין חשיפה של מודעה למשתמש.
בחירת המודעה הזוכה ומסירתה הן אירועים נפרדים. מודעה שנבחרה נחשבת כנמסרת רק לאחר ש־ChatGPT מאשר ומציג אותה, ומתקבל אישור מסירה.
מערך הפרסום שלנו משתמש במנגנוני רישום לוגים ובצינורות עיבוד נתונים מקובלים, שמספקים שלושה יתרונות עיקריים: למפרסמים קל יותר לשלב את המערכות הקיימות שלהם במערך שלנו, הם יכולים לשפר את האסטרטגיות שלהם בעזרת נתוני הדיווח, והצוות שלנו יכול לזהות חלקים במערכת שניתן לשפר. מעבר לכלי הדיווח והאופטימיזציה האלה, אנחנו מפעילים מודל איכותי להערכת מסירת המודעות ולאימון מודלים אחרים של פרסום, וכך יוצרים לולאה יעילה של שיפור עצמי.
פירוט של מה שהתרחש עוזר לנו להבין ולשפר כל חלק במערכת הפרסום בנפרד. מערכת עיבוד הלוגים מתעדת גם תוצאות מפורטות, כגון:
סבב השיחה לא היה כשיר להצגת פרסום.
החל סשן פרסום, אך לא התבקש אחזור.
האחזור לא החזיר מודעות מועמדות.
אוחזרו מודעות מועמדות, אך השלמת הנתונים שלהן נכשלה או שהן לא עברו את בדיקות הכשירות.
מודעה נמסרה, ובהמשך בוצעה בה אינטראקציה.
הפירוט הזה עוזר לנו לשפר כל חלק במערכת הגשת המודעות בנפרד. שיפור זיהוי ההזדמנויות דורש ראיות שונות מאלה הדרושות לשיפור האחזור, איכות המודעות המועמדות, ההשתתפות במכרז או אמינות המסירה.
מערכות המסירה, ההגשה והאיכות מנטרות כל אחת חלק אחר במחזור החיים. עיבוד הכפוף לבקרות פרטיות קובע באילו נתונים אפשר להשתמש למדידה ולשיפור המודלים.
הרעיון שמאחורי הערכה מבוססת מודלים הוא שהמודלים החזקים ביותר שלנו, בעלי יכולות ה־reasoning הגבוהות ביותר, בוחנים ושופטים את תוצאות המערכת. לאחר מכן הם משפרים את ה־LLM שעבר אימון נוסף, באמצעות אימון שמכוון לביצועים טובים יותר. למשל, נוכל להשתמש במודלים קטנים ויעילים יותר, או במודלים עם יכולות reasoning נמוכות יותר, לצורך תזמור או אחזור, אם המודל החזק ביותר שלנו יאסוף משוב ויאמן את המודלים הקטנים האלה לבצע את עבודתם בצורה הטובה ביותר.
אנחנו אוספים משוב אנושי ופועלים לפיו: הקלקות והסתרות מצד משתמשים, סקרים למשתמשים ומשוב ישיר ממפרסמים דרך Ads Manager שלנו. הצוות שלנו זמין לקבלת משוב גם במהלך הפיתוח, ואנחנו מקשיבים ישירות לרצונותיהם של משתמשי ChatGPT ושל המפרסמים. המשוב הזה מכוון אותנו אף יותר מהמשוב המבוסס על תצפיות המודל, והוא חלק ממה שאפשר לנו להגיע במהירות להחלטות המוצר הנכונות באמצעות שיפורים חוזרים. המודל אולי מסוגל להבין את כוונת המשתמש ולחשוב באופן ביקורתי כדי לספק משהו מועיל, אבל אנשים הם שקובעים מה מרגיש נכון.
לפני שנה לא הייתה לנו מערכת פרסום, ורק כמה אנשים עסקו בחשיבה על האתגרים בתחום. כיום יש לנו מערכת פרסום איתנה שמניעה הכנסות בקצב שנתי של יותר ממיליארד דולר, עם מתזמר מבוסס LLM שמנהל את תהליך הפרסום. Codex היה מכפיל כוח מרכזי שאפשר לנו להקים את המערכת מאפס ולהגיע לאבן הדרך המשמעותית הזאת בהיקף השימוש במהירות חסרת תקדים. כבר מההתחלה ארגנו את הצוות ואת תהליכי הפיתוח סביב השימוש ב־Codex כדי לבנות ולהרחיב את המערכת במהירות. בנינו מנגנוני הגנה שמאפשרים ל־Codex להעלות קוד לייצור באופן אמין ובטוח. במקביל, הקמנו תוספי תשתית נתונים ל־Codex כדי לקצר משמעותית את המחזור שבין איסוף תובנות להטמעת שיפורים במערכת, ובהם תכונות מוצר חדשות, שיפורי איכות וביצועי מערכת טובים יותר.
השילוב בין הגבולות שהצבנו למערכת (המעוגנים בעקרונות הפרסום שלנו) לבין המתזמר מבוסס ה־LLM מאפשר לנו להפוך את הפרסום למועיל בלי להתייחס לכל שיחה כאל בקשה למודעה. בהמשך נמשיך להתנסות בפורמטים דינמיים יותר של מודעות, כדי להגדיל את הערך למשתמשים (למשל, לאפשר להם לדבר ישירות עם עסקים דרך מודעות) ולמפרסמים. הארכיטקטורה המשתפרת מעצמה של המערך, שנבנתה על מודלים של OpenAI עם לולאות משוב רציפות, תאיץ את היכולת שלנו להמשיך לשפר את הרלוונטיות וההתאמה האישית לאורך זמן.



