במדריך הזה נלמד איך ליצור מודל של פירוק מטריצות ולאמן אותו על דירוגי הסרטים של הלקוחות במערך הנתונים movielens1m. לאחר מכן משתמשים במודל של פירוק מטריצות כדי ליצור המלצות לסרטים עבור משתמשים.
השימוש בדירוגים שהלקוחות מספקים כדי לאמן את המודל נקרא אימון עם משוב מפורש. מודלים של פירוק מטריצות עוברים אימון באמצעות אלגוריתם של ריבועים פחותים לסירוגין כשמשתמשים במשוב גלוי כנתוני אימון.
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- יצירת מודל של פירוק מטריצות באמצעות ההצהרה
CREATE MODEL. - הערכת המודל באמצעות הפונקציה
ML.EVALUATE. - יצירת המלצות לסרטים למשתמשים באמצעות המודל עם הפונקציה
ML.RECOMMEND.
עלויות
במדריך הזה נעשה שימוש ברכיבים של Cloud de Confiance by S3NSשחלים עליהם חיובים, כולל הרכיבים הבאים:
- BigQuery
- BigQuery ML
מידע נוסף על העלויות ב-BigQuery זמין בדף תמחור ב-BigQuery.
מידע נוסף על העלויות של BigQuery ML זמין במאמר תמחור ב-BigQuery ML.
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- BigQuery מופעל באופן אוטומטי בפרויקטים חדשים.
כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל
מפעילים את BigQuery API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים
ההרשאות הנדרשות
כדי ליצור את מערך הנתונים, אתם צריכים את ההרשאה
bigquery.datasets.createב-IAM.כדי ליצור את המודל, צריך את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, אתם צריכים את ההרשאות הבאות:
bigquery.models.getDatabigquery.jobs.create
במאמר מבוא ל-IAM יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
יצירת מערך נתונים
יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.המסוף
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בחלונית Explorer, לוחצים על שם הפרויקט.
לוחצים על הצגת פעולות > יצירת מערך נתונים.
בדף Create dataset, מבצעים את הפעולות הבאות:
בשדה Dataset ID (מזהה מערך הנתונים), מזינים
bqml_tutorial.בקטע Location type, בוחרים באפשרות Multi-region ואז בוחרים באפשרות US.
משאירים את הגדרות ברירת המחדל שנותרו כמו שהן ולוחצים על Create dataset (יצירת מערך נתונים).
BQ
כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.
יוצרים מערך נתונים בשם
bqml_tutorialעם מיקום הנתונים שמוגדר ל-US.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
בודקים שמערך הנתונים נוצר:
bq ls
API
מבצעים קריאה לשיטה datasets.insert
עם משאב מוגדר של מערך נתונים.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
העלאת נתוני Movielens
מעלים את נתוני movielens1m ל-BigQuery.
CLI
כדי להעלות את נתוני movielens1m באמצעות כלי שורת הפקודה של BigQuery:
פותחים את Cloud Shell:
מעלים את נתוני הדירוגים לטבלה
ratings. בשורת הפקודה, מדביקים את השאילתה הבאה ומקישים עלEnter:curl -O 'http://files.grouplens.org/datasets/movielens/ml-1m.zip' unzip ml-1m.zip sed 's/::/,/g' ml-1m/ratings.dat > ratings.csv bq load --source_format=CSV bqml_tutorial.ratings ratings.csv \ user_id:INT64,item_id:INT64,rating:FLOAT64,timestamp:TIMESTAMPמעלים את נתוני הסרט לטבלה
movies. בשורה של הפקודה, מדביקים את השאילתה הבאה ומקישים עלEnter:sed 's/::/@/g' ml-1m/movies.dat > movie_titles.csv bq load --source_format=CSV --field_delimiter=@ \ bqml_tutorial.movies movie_titles.csv \ movie_id:INT64,movie_title:STRING,genre:STRING
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
קודם יוצרים אובייקט Client עם bqclient = google.cloud.bigquery.Client(), ואז טוענים את נתוני movielens1m למערך הנתונים שיצרתם בשלב הקודם.
יצירת המודל
יצירת מודל של פירוק מטריצות ואימון שלו על הנתונים בטבלה ratings. המודל מאומן לחזות דירוג לכל צמד של משתמש ופריט, על סמך דירוגי הסרטים שסופקו על ידי הלקוח.
SQL
ההצהרה הבאה CREATE MODEL משתמשת בעמודות האלה כדי ליצור המלצות:
-
user_id—מזהה המשתמש. -
item_id– מזהה הסרט. -
rating– הדירוג המפורש מ-1 עד 5 שהמשתמש נתן לפריט.
כדי ליצור את המודל:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run (הרצה):
CREATE OR REPLACE MODEL `bqml_tutorial.mf_explicit` OPTIONS ( MODEL_TYPE = 'matrix_factorization', FEEDBACK_TYPE = 'explicit', USER_COL = 'user_id', ITEM_COL = 'item_id', L2_REG = 9.83, NUM_FACTORS = 34) AS SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings`;
השאילתה תושלם תוך 10 דקות בערך, ואז המודל
mf_explicitיופיע בחלונית Explorer. השאילתה משתמשת בהצהרתCREATE MODELכדי ליצור מודל, ולכן לא מוצגות תוצאות של השאילתה.
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
הקוד יפעל במשך כ-10 דקות, ולאחר מכן מודל mf_explicit יופיע בחלונית Explorer.
קבלת נתונים סטטיסטיים של הדרכות
אפשר גם לראות את נתוני האימון של המודל בCloud de Confiance מסוף.
אלגוריתם של למידת מכונה יוצר מודל על ידי יצירת איטרציות רבות של המודל באמצעות פרמטרים שונים, ואז בוחר את גרסת המודל שממזערת את ההפסד. התהליך הזה נקרא מזעור סיכון אמפירי. הנתונים הסטטיסטיים של אימון המודל מאפשרים לכם לראות את ההפסד שמשויך לכל איטרציה של המודל.
כדי לראות את נתוני האימון של המודל:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer מרחיבים את הפרויקט, לוחצים על Datasets ואז לוחצים על מערך הנתונים
bqml_tutorial.לוחצים על הכרטיסייה מודלים.
לוחצים על מודל
mf_explicitואז על הכרטיסייה אימון.בקטע הצגה כ, לוחצים על טבלה. התוצאות אמורות להיראות כך:
+-----------+--------------------+--------------------+ | Iteration | Training Data Loss | Duration (seconds) | +-----------+--------------------+--------------------+ | 11 | 0.3943 | 42.59 | +-----------+--------------------+--------------------+ | 10 | 0.3979 | 27.37 | +-----------+--------------------+--------------------+ | 9 | 0.4038 | 40.79 | +-----------+--------------------+--------------------+ | ... | ... | ... | +-----------+--------------------+--------------------+
העמודה Training Data Loss מייצגת את מדד ההפסד שמחושב אחרי אימון המודל. מכיוון שמדובר במודל של פירוק מטריצות, בעמודה הזו מוצג השגיאה הריבועית הממוצעת.
אפשר גם להשתמש בפונקציה ML.TRAINING_INFO כדי לראות נתונים סטטיסטיים של אימון המודל.
הערכת המודל
כדי להעריך את הביצועים של המודל, משווים בין דירוגי הסרטים החזויים שמוחזרים על ידי המודל לבין דירוגי הסרטים בפועל של המשתמשים מנתוני האימון.
SQL
משתמשים בפונקציה ML.EVALUATE כדי להעריך את המודל:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run (הרצה):
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.mf_explicit`, ( SELECT user_id, item_id, rating FROM `bqml_tutorial.ratings` ));
התוצאות אמורות להיראות כך:
+---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+ | 0.48494444327829156 | 0.39433706592870565 | 0.025437895793637522 | 0.39017059802629905 | 0.6840033369412044 | 0.6840033369412264 | +---------------------+---------------------+------------------------+-----------------------+--------------------+--------------------+
מדד חשוב בתוצאות ההערכה הוא ציון R2. ציון ה-R2 הוא מדד סטטיסטי שקובע אם התחזיות של הרגרסיה הליניארית מתקרבות לנתונים בפועל. ערך של
0מציין שהמודל לא מסביר אף אחד מהשינויים בנתוני התגובה סביב הממוצע. הערך1מציין שהמודל מסביר את כל השונות של נתוני התגובה סביב הממוצע.מידע נוסף על הפלט של הפונקציה
ML.EVALUATEזמין במאמר בנושא פלט.
אפשר גם להתקשר אל ML.EVALUATE בלי לספק את נתוני הקלט. הוא ישתמש במדדי ההערכה שחושבו במהלך האימון.
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
מבצעים קריאה ל-model.score() כדי להעריך את המודל.
קבלת הדירוגים החזויים עבור קבוצת משנה של צמדי משתמש-פריט
קבלת הדירוג החזוי לכל סרט עבור חמישה משתמשים.
SQL
כדי לקבל דירוגים צפויים, משתמשים בפונקציה ML.RECOMMEND:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run (הרצה):
SELECT * FROM ML.RECOMMEND( MODEL `bqml_tutorial.mf_explicit`, ( SELECT user_id FROM `bqml_tutorial.ratings` LIMIT 5 ));
התוצאות אמורות להיראות כך:
+--------------------+---------+---------+ | predicted_rating | user_id | item_id | +--------------------+---------+---------+ | 4.2125303962491873 | 4 | 3169 | +--------------------+---------+---------+ | 4.8068920531981263 | 4 | 3739 | +--------------------+---------+---------+ | 3.8742203494732403 | 4 | 3574 | +--------------------+---------+---------+ | ... | ... | ... | +--------------------+---------+---------+
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
מתקשרים אל model.predict() כדי לקבל דירוגים צפויים.
יצירת המלצות
השתמשו בדירוגים החזויים כדי ליצור את חמשת הסרטים המומלצים המובילים לכל משתמש.
SQL
כדי ליצור המלצות:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
לכתוב את הסיווגים החזויים בטבלה. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run (הרצה):
CREATE OR REPLACE TABLE `bqml_tutorial.recommend` AS SELECT * FROM ML.RECOMMEND(MODEL `bqml_tutorial.mf_explicit`);
משלבים את הדירוגים החזויים עם פרטי הסרט, ובוחרים את חמש התוצאות המובילות לכל משתמש. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על Run (הרצה):
SELECT user_id, ARRAY_AGG(STRUCT(movie_title, genre, predicted_rating) ORDER BY predicted_rating DESC LIMIT 5) FROM ( SELECT user_id, item_id, predicted_rating, movie_title, genre FROM `bqml_tutorial.recommend` JOIN `bqml_tutorial.movies` ON item_id = movie_id ) GROUP BY user_id;
התוצאות אמורות להיראות כך:
+---------+-------------------------------------+------------------------+--------------------+ | user_id | f0_movie_title | f0_genre | predicted_rating | +---------+-------------------------------------+------------------------+--------------------+ | 4597 | Song of Freedom (1936) | Drama | 6.8495752907364009 | | | I Went Down (1997) | Action/Comedy/Crime | 6.7203235758772877 | | | Men With Guns (1997) | Action/Drama | 6.399407352232001 | | | Kid, The (1921) | Action | 6.1952890198126731 | | | Hype! (1996) | Documentary | 6.1895766097451475 | +---------+-------------------------------------+------------------------+--------------------+ | 5349 | Fandango (1985) | Comedy | 9.944574012151549 | | | Breakfast of Champions (1999) | Comedy | 9.55661860430112 | | | Funny Bones (1995) | Comedy | 9.52778917835076 | | | Paradise Road (1997) | Drama/War | 9.1643621767929133 | | | Surviving Picasso (1996) | Drama | 8.807353289233772 | +---------+-------------------------------------+------------------------+--------------------+ | ... | ... | ... | ... | +---------+-------------------------------------+------------------------+--------------------+
BigQuery DataFrames
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של BigQuery DataFrames במדריך לתחילת העבודה עם BigQuery באמצעות BigQuery DataFrames. מידע נוסף מופיע במאמרי העזרה בנושא BigQuery DataFrames.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת ADC לסביבת פיתוח מקומית.
מתקשרים אל model.predict() כדי לקבל דירוגים צפויים.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
- אתם יכולים למחוק את הפרויקט שיצרתם.
- אפשר גם להשאיר את הפרויקט ולמחוק את קבוצת הנתונים.
מחיקת מערך נתונים
אם מוחקים פרויקט, כל מערכי הנתונים וכל הטבלאות בפרויקט נמחקים. אם אתם מעדיפים להשתמש מחדש בפרויקט, אתם יכולים למחוק את מערך הנתונים שיצרתם במדריך הזה:
אם צריך, פותחים את הדף BigQuery במסוף Cloud de Confiance .
בחלונית הניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.
בצד שמאל של החלון, לוחצים על מחיקת מערך נתונים. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח מחיקת מערך נתונים, מקלידים את שם מערך הנתונים (
bqml_tutorial) כדי לאשר את פקודת המחיקה, ואז לוחצים על מחיקה.
מחיקת פרויקט
כדי למחוק את הפרויקט:
- במסוף Cloud de Confiance , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- אפשר לנסות ליצור מודל של פירוק מטריצה על סמך משוב מרומז.
- סקירה כללית על BigQuery ML זמינה במאמר מבוא ל-BigQuery ML.
- מידע נוסף על למידת מכונה זמין בקורס המקוצר על למידת מכונה.