אם יש לכם אפליקציה להמלצות, אתם יכולים להשתמש בשדות של המסמך כדי לסנן את תוצאות ההמלצות. בדף הזה מוסבר איך להשתמש בשדות של מסמכים כדי לסנן המלצה לקבוצה ספציפית של מסמכים. הדוגמאות בדף הזה מתייחסות להמלצות על מדיה, אבל העקרונות שמוצגים כאן זהים להמלצות בהתאמה אישית. מידע נוסף על המלצות למדיה זמין במאמר מבוא לחיפוש מבוסס סוכנים למדיה.
סינון המלצות ועדכונים במאגר הנתונים
אחרי כל עדכון של מאגר הנתונים, צריך להמתין עד 8 שעות בזמן שהמודל עובר אימון מחדש. הסיבה לכך היא שהמודל צריך לדעת מהם הערכים הנוכחיים במטא-נתונים של המסמך, וגם אילו שדות מוגדרים כשדות שניתן לסנן. צריך לחכות עד שהשינויים במסמך ובסכימה יתעדכנו. בהמלצות (בניגוד לחיפוש), הסינון לא מתבצע בזמן אמת.
הגדרות של מסננים וגיוון (המלצות מדיה בלבד)
בנוסף למסננים, גם הגדרת הגיוון של האפליקציה משפיעה על התוצאות שמוחזרות בתשובה להמלצה על מדיה. ההשפעות של המסננים והגיוון משולבות. הגיוון מתבצע קודם והסינון מתבצע אחר כך.
שילוב של מגוון גבוה שמבוסס על כללים עם סינון מאפיינים שמבוסס על קטגוריות מוביל לעיתים קרובות לפלט ריק. הסיבה לכך היא שגיוון גבוה מגביל את האפליקציה להחזרת תוצאה אחת לכל קטגוריה.
לדוגמה, אתם רוצים להמליץ על סרטים שמבוססים על 'צעצוע של סיפור'. מגדירים את רמת הגיוון שמבוססת על כללים ל'גבוהה'. מכיוון שרמת הגיוון גבוהה, יכול להיות שיומלץ רק סרט אחד (לדוגמה, WALL·E) בקטגוריה של סרטים לילדים, למרות שרבים מהסרטים עשויים להיות מומלצים. כשמחילים את המסנן לסרטים לילדים, רק WALL·E מוחזר כהמלצה.
מידע כללי על גיוון זמין במאמר גיוון המלצות למדיה.
לפני שמתחילים
חשוב לוודא שיצרתם אפליקציה להמלצות ומאגר נתונים. מידע נוסף זמין במאמרים יצירת אפליקציות מדיה או יצירת מאגר נתונים מותאם אישית של המלצות.
דוגמאות למסמכים
כדאי לעיין בדוגמאות הבאות למסמכי מדיה. אפשר לעיין במסמכים לדוגמה האלה תוך כדי קריאת הדף הזה.
{"id":"1","schemaId":"default_schema","structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"88125","schemaId":"default_schema","structData":{"title":"Harry Potter and the Deathly Hallows: Part 2 (2011)","categories":["Action","Adventure","Drama","Fantasy","Mystery","IMAX"],"uri":"http://mytestdomain.movie/content/88125","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"2857","schemaId":"default_schema","structData":{"title":"Yellow Submarine (1968)","categories":["Adventure","Animation","Comedy","Fantasy","Musical"],"uri":"http://mytestdomain.movie/content/2857","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"60069","schemaId":"default_schema","structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
ביטויי סינון
משתמשים בביטויי סינון כדי להגדיר את מסנני ההמלצות.
התחביר של ביטויי סינון
בטופס Backus–Naur מורחב הבא מופיע סיכום של תחביר ביטויי הסינון שאפשר להשתמש בו כדי להגדיר את מסנני ההמלצות.
# A single expression or multiple expressions that are joined by "AND" or "OR". filter = expression, { " AND " | "OR", expression }; # An expression can be prefixed with "-" or "NOT" to express a negation. expression = [ "-" | "NOT " ], # A parenthesized expression | "(", expression, ")" # A simple expression applying to a textual field. # Function "ANY" returns true if the field contains any of the literals. textual_field, ":", "ANY", "(", literal, { ",", literal }, ")" # OR filter by "available" available, ":", "true", # A literal is any double-quoted string. You must escape backslash (\) and # quote (") characters. literal = double-quoted string; textual_field = see the tables below;
הגבלות על ביטויי סינון
ההגבלות הבאות חלות על ביטויי סינון להמלצות:
- יש מגבלה על עומק ההטמעה של האופרטורים
ANDו-ORבסוגריים. הביטויים הלוגיים במסנן צריכים להיות בצורה נורמלית קוניונקטיבית (CNF). הביטוי הלוגי המורכב ביותר שנתמך יכול להיות רשימה של פסוקיות שמחוברות באמצעותANDומכילות רק אופרטורים שלOR, כמו:(... OR ... OR ...) AND (... OR ...) AND (... OR ...) אפשר להשתמש במילת המפתח
NOTאו ב--כדי לשלול ביטויים. האפשרות הזו פועלת רק עם ביטוייANY()עם ארגומנט אחד.המגבלות
availableצריכות להיות ברמה העליונה. אי אפשר להשתמש בהם כחלק מפסוקיתORאו משלילה (NOT). אפשר להשתמש רק ב-available: true. אם לא תציינו את המסנן הזה, יכול להיות שיוחזרו המלצות למסמכים שתוקפם פג או למסמכים שעדיין לא זמינים.השדה
availableממופה ללוגיקה הבאה:datetime.now >= available_time AND datetime.now <= expire_timeאם לא מוגדר
expire_time, הערך שלdatetime.now <= expire_timeהואtrue.מספר התנאים המקסימלי בסעיף
ANDברמה העליונה הוא 20.פסוקית
ORיכולה לכלול עד 100 ארגומנטים שנכללים בביטוייANY(). אם יש כמה ביטויים שלANY()clause, כל הארגומנטים שלהם נספרים במסגרת המגבלה הזו.ORלדוגמה,categories: ANY("drama", "comedy") OR categories: ANY("adventure")כוללת שלושה ארגומנטים.
דוגמאות לביטויי סינון
בטבלה הבאה מוצגות דוגמאות לביטויי מסנן תקינים ולא תקינים. בנוסף, הוא מסביר למה הדוגמאות הלא תקינות לא תקינות.
| ביטוי | תקף | הערות |
|---|---|---|
language_code: ANY("en", "fr") |
כן | |
NOT language_code: ANY("en") |
כן | |
NOT language_code: ANY("en", "fr") |
לא | שלילה של ANY() עם יותר מארגומנט אחד. |
language_code: ANY("en", "fr") OR categories: ANY("drama") |
כן | |
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama") |
כן | |
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") |
לא | לא בצורה נורמלית מצומצמת. |
(language_code: ANY("en")) AND (available: true) |
כן | |
(language_code: ANY("en")) OR (available: true) |
לא | משלבת את available בביטוי OR עם תנאים אחרים. |
ביטוי המסנן הבא מסנן מסמכים שנמצאים בקטגוריית הדרמה או הפעולה, שלא כתובים באנגלית וזמינים:
categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true
מגבלות על סינון
כל שדה מסמך שניתן לסינון צורך חלק מהזיכרון בכל אחד מהמודלים. ההגבלות הבאות עוזרות למנוע השפעות שליליות על ביצועי הצגת המודעות:
אפשר להגדיר עד 10 שדות מותאמים אישית כניתנים לסינון בסכימה.
אם במהלך אימון האפליקציה נמצאים יותר מ-10 שדות מותאמים אישית, המערכת משתמשת רק ב-10 מהם.
יכולים להיות בסכימה עד 100,000,000 ערכים של שדות שניתנים לסינון.
כדי להעריך את המספר הכולל של ערכי השדות שניתנים לסינון בסכימה, מכפילים את מספר המסמכים בסכימה במספר השדות שניתנים לסינון. אם חורגים מהמגבלות האלה, קורים הדברים הבאים:
- אי אפשר להגדיר שדות נוספים כניתנים לסינון.
- אימון האפליקציה נכשל.
סינון ההמלצות
כדי לסנן המלצות למדיה, פועלים לפי השלבים הבאים:
איך מוצאים את המזהה של מאגר הנתונים אם כבר יש לכם מזהה של מאגר נתונים, אפשר לדלג לשלב הבא.
במסוף Google Cloud , עוברים לדף AI Applications ובתפריט הניווט לוחצים על Data Stores.
לוחצים על השם של מאגר הנתונים.
בדף Data של מאגר הנתונים, מעתיקים את המזהה של מאגר הנתונים.
קובעים את השדה או השדות במסמך שרוצים לסנן. לדוגמה, במסמכים שבקטע לפני שמתחילים, אפשר להשתמש בשדה
categoriesכמסנן.כדי לאפשר סינון של השדה
categories:נכנסים לדף AI Applications במסוף Google Cloud .
לוחצים על אפליקציית ההמלצות.
לוחצים על הכרטיסייה סכימה. בכרטיסייה הזו מוצגות ההגדרות הנוכחיות של השדה.
לוחצים על Edit.
אם היא עדיין לא מסומנת, מסמנים את התיבה Filterable בשורה categories ולוחצים על Save.
צריך להמתין שש שעות כדי לאפשר להפצה של עריכת הסכימה. אחרי שש שעות, אפשר להמשיך לשלב הבא.
כדי לקבל המלצה ולסנן לפי השדה
categories, מריצים את הקוד הבא בשורת הפקודה:curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "userEvent": { "eventType": "EVENT_TYPE", "userPseudoId": "USER_PSEUDO_ID", "documents": { "id": "DOCUMENT_ID" } }, "params": { "returnDocument": true, "attributeFilteringSyntax": true, "strictFiltering": true }, "filter": "FILTER" }' \ "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/SERVING_CONFIG_ID:recommend"מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
DATA_STORE_ID: המזהה של מאגר הנתונים. -
DOCUMENT_ID: המזהה של המסמך שרוצים לראות תצוגה מקדימה של ההמלצות לגביו. צריך להשתמש במזהה שבו השתמשתם במסמך הזה בזמן שהזנתם את הנתונים. -
EVENT_TYPE: סוג אירוע המשתמש. לערכים שלeventType, אפשר לעיין בUserEvent. -
USER_PSEUDO_ID: מחרוזת בקידוד UTF-8, שמשמשת כמזהה ייחודי פסאודונימי למעקב אחרי המשתמשים. האורך המקסימלי הוא 128 תווים. Google ממליצה מאוד להשתמש בשדה הזה כי הוא משפר את הביצועים של המודל ואת איכות ההתאמה האישית. אפשר להשתמש בקובץ Cookie של HTTP בשדה הזה, כדי לזהות באופן ייחודי מבקר במכשיר יחיד. הנה כמה דברים חשובים שכדאי לזכור:- המזהה הזה לא משתנה כשהמבקר נכנס לאתר או יוצא ממנו.
- אסור להגדיר את אותו מזהה למשתמשים שונים בשדה הזה. אחרת, אותו מזהה משתמש יכול לשלב היסטוריית אירועים של משתמשים שונים ולהפחית את איכות המודל.
- השדה הזה לא יכול לכלול פרטים אישיים מזהים (PII).
מידע נוסף זמין במאמר
userPseudoId. -
SERVING_CONFIG_ID: המזהה של הגדרת התצורה להצגת מודעות. מזהה הגדרת הצגת המודעות זהה למזהה המנוע, לכן צריך להשתמש במזהה המנוע. -
FILTER: שדה טקסט שמאפשר לכם לסנן לפי קבוצה ספציפית של שדות, באמצעות תחביר של ביטוי סינון. ערך ברירת המחדל הוא מחרוזת ריקה, כלומר לא מוחל מסנן.
לדוגמה, נניח שאתם רוצים לקבל המלצה לגבי אירוע ספציפי של הפעלת מדיה, ואתם רוצים לסנן את תוצאות ההמלצה כך שיכללו רק מסמכים שעומדים בתנאים הבאים: (1) הם שייכים לקטגוריה 'ילדים', ו-(2) הם זמינים כרגע. כדי לעשות את זה, צריך לכלול את ההצהרות הבאות בקריאה:
"eventType": "media-play""filter": "categories: ANY(\"Children\") AND available: true"
מידע נוסף זמין במאמר בנושא השיטה
recommend.כדי לראות תשובה לדוגמה, לוחצים כאן.
אם תשלחו בקשה להמלצה כמו זו שמופיעה למעלה, תקבלו תגובה דומה לזו שמופיעה בהמשך. שימו לב שהתגובה כוללת את שני המסמכים עם הערך
categoriesשלChildrenוהערךavailability_start_timeשמאוחר מהתאריך הנוכחי.{ "results": [ { "id":"1", "schemaId":"default_schema", "structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1", "availability_start_time":"2023-01-01T00:00:00Z", "media_type":"movie" } }, { "id":"60069", "schemaId":"default_schema", "structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069", "availability_start_time":"2023-01-01T00:00:00Z", "media_type":"movie" } } ], "attributionToken": "ChMzMDk3NTQ4MzQxOTcxOTE0ODM1GglhZi10ZXN0LTEiDmFmLXRlc3QtMTE0NTE0KAAwBg" }
-