במדריך הזה נלמד איך ליצור מודל פירוק לגורמים של מטריצה ולאמן אותו על דירוגי הסרטים של הלקוחות במערך הנתונים movielens1m. לאחר מכן, אתם משתמשים במודל פירוק לגורמים של מטריצה כדי ליצור המלצות לסרטים למשתמשים.
אימון המודל באמצעות דירוגים שסיפקו הלקוחות נקרא אימון באמצעות משוב מפורש. מודלים של פירוק לגורמים של מטריצה מאומנים באמצעות אלגוריתם הריבועים הפחותים המתחלפים כשמשתמשים במשוב מפורש כנתוני אימון.
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:
- יצירת מודל של פירוק לגורמים של מטריצה באמצעות ההצהרה
CREATE MODEL. - הערכת המודל באמצעות הפונקציה
ML.EVALUATE. - יצירת המלצות לסרטים למשתמשים באמצעות המודל עם הפונקציה
ML.RECOMMEND.
עלויות
במדריך הזה משתמשים ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:
- BigQuery
- BigQuery ML
למידע נוסף על העלויות של BigQuery, קראו את הדף תמחור ב-BigQuery.
למידע נוסף על העלויות של BigQuery ML, קראו את המאמר תמחור ב-BigQuery ML.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
- BigQuery מופעל באופן אוטומטי בפרויקטים חדשים.
כדי להפעיל את BigQuery בפרויקט קיים, עוברים אל
מפעילים את BigQuery API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?
ההרשאות הנדרשות
כדי ליצור את קבוצת הנתונים, אתם צריכים את ההרשאה
bigquery.datasets.createב-IAM.כדי ליצור את המודל, צריך את ההרשאות הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, צריך את ההרשאות הבאות:
bigquery.models.getDatabigquery.jobs.create
במאמר מבוא ל-IAM תוכלו לקרוא מידע נוסף על התפקידים וההרשאות של IAM ב-BigQuery.
יצירת קבוצת נתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים אחת מהאפשרויות הבאות:המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.
ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.
בדף Datasets, לוחצים על Create dataset.
בחלונית Create dataset:
בשדה Dataset ID, מזינים
bqml_tutorial.בקטע Data location (מיקום הנתונים), בוחרים באפשרות 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 שהמשתמש נתן לפריט.
כדי ליצור את המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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.
קבלת נתונים סטטיסטיים על האימונים
אפשר גם לראות את הנתונים הסטטיסטיים של אימון המודל במסוףGoogle Cloud .
אלגוריתם של למידת מכונה בונה מודל על ידי יצירת חזרות רבות של המודל באמצעות פרמטרים שונים, ואז בחירת גרסת המודל שממזערת את ההפסד. התהליך הזה נקרא "מזעור סיכונים אמפיריים". הנתונים הסטטיסטיים של אימון המודל מאפשרים לראות את האובדן שמשויך לכל איטרציה של המודל.
כדי לראות את נתוני האימון של המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית הימנית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז על קבוצת הנתונים
bqml_tutorial.לוחצים על הכרטיסייה Models.
לוחצים על המודל
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 כדי להעריך את המודל:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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
כדי ליצור המלצות:
נכנסים לדף BigQuery במסוף Google Cloud .
כתיבת הדירוגים החזויים בטבלה. בעורך השאילתות, מדביקים את השאילתה הבאה ולוחצים על 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 במסוף Google Cloud .
בניווט, לוחצים על מערך הנתונים bqml_tutorial שיצרתם.
לוחצים על מחיקת מערך הנתונים בצד שמאל של החלון. הפעולה הזו מוחקת את מערך הנתונים, את הטבלה ואת כל הנתונים.
בתיבת הדו-שיח Delete dataset, מאשרים את פקודת המחיקה על ידי הקלדת שם מערך הנתונים (
bqml_tutorial) ולוחצים על Delete.
מחיקת הפרויקט
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- נסו ליצור מודל פירוק לגורמים של מטריצה שמבוסס על משוב משתמע.
- לסקירה כללית על BigQuery ML, קראו את המאמר מבוא ל-BigQuery ML.
- למידע נוסף על למידת מכונה, קראו את הקורס המקוצר על למידת מכונה.