1. מבוא
ב-Codelab הזה ניצור מודל לחיזוי ציונים של סרטים באמצעות מודל מותאם אישית של BigQuery ML, תוך שימוש ב-SQL בלבד, ונפרוס את המודל ב-Vertex AI. תלמדו:
- איך יוצרים מערך נתונים ב-BigQuery באמצעות Cloud Shell וטוענים נתונים מקובץ
- איך משתמשים ב-BigQuery ML ללמידה מפוקחת כדי ליצור מודל חיזוי רגרסיה רב-סיווגי לחיזוי ציון סרט ללא הרבה קידוד, אלא רק באמצעות שאילתות SQL
מה תפַתחו
תצרו
- מערך נתונים ב-BigQuery שיכיל את הטבלה ואת רכיבי המודל
- מודל BigQuery ML לחיזוי דירוג הסרט באמצעות שאילתות SQL
- פריסת המודל במרשם המודלים של Vertex AI
דרישות
2. יצירת הפרויקט
- ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
- מוודאים שהחיוב מופעל בפרויקט ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- עוברים אל BigQuery כדי להפעיל את ה-API. אפשר גם לפתוח את ממשק האינטרנט של BigQuery ישירות על ידי הזנת כתובת ה-URL הבאה בדפדפן: https://console.cloud.google.com/bigquery
3. הפעלת Cloud Shell
- תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud וכוללת את bq: במסוף Cloud, לוחצים על 'הפעלת Cloud Shell' בפינה הימנית העליונה:

- אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע ושהפרויקט כבר הוגדר לפי מזהה הפרויקט. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט.
gcloud config list project
- אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <PROJECT_ID>
אפשר לעיין במאמרי העזרה בנושא פקודות gcloud ושימוש בהן.
4. הכנת נתוני אימון
זהו שלב חשוב בכל הפרויקטים, המוצרים והאפליקציות שקשורים לנתונים. כדי להכין מערך נתונים אופטימלי ולהפוך אותו למוכן לפרויקט ה-ML, צריך ידע רב בתחום בנוסף לטכנולוגיה. לצורך ה-codelab הזה, נשתמש בקובץ data שכבר מוכן.
5. יצירה וטעינה של מערך הנתונים
מערך נתונים ב-BigQuery הוא אוסף של טבלאות. כל הטבלאות במערך נתונים מאוחסנות באותו מיקום. אפשר גם לצרף אמצעי בקרת גישה מותאמים אישית כדי להגביל את הגישה למערך נתונים ולטבלאות שלו.
- ב-Cloud Shell, משתמשים בפקודה bq mk כדי ליצור מערך נתונים בשם movies.
bq mk --location=<<LOCATION>> movies
מגדירים את המיקום לאזור (asia-south1).
- מוודאים שקובץ הנתונים (.csv) מוכן. מריצים את הפקודות הבאות ב-Cloud Shell כדי לשכפל את המאגר ולעבור לפרויקט:
git clone <<repository link>>
cd movie-score
- משתמשים בפקודה bq load כדי לטעון את קובץ ה-CSV לטבלה ב-BigQuery (אפשר גם להעלות ישירות מממשק המשתמש של BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
תיאור האפשרויות: –source_format=CSV – משתמש בפורמט הנתונים CSV כשמנתחים את קובץ הנתונים. –skip_leading_rows=1 – מדלג על השורה הראשונה בקובץ ה-CSV כי זו שורת כותרת. Movies.movies – הארגומנט הראשון למיקום – מגדיר לאיזו טבלה צריך לטעון את הנתונים. ./movies.csv – הארגומנט השני למיקום – מגדיר איזה קובץ לטעון. בנוסף לקבצים מקומיים, הפקודה bq load יכולה לטעון קבצים מ-Cloud Storage עם מזהי URI של gs://my_bucket/path/to/file. סכימה, שאפשר להגדיר בקובץ סכימת JSON או כרשימה של ערכים מופרדים בפסיקים (השתמשתי ברשימה של ערכים מופרדים בפסיקים). איזה כיף! הנתונים מקובץ ה-CSV נטענו עכשיו בטבלה movies.movies.
- אפשר להריץ שאילתה באחת מ-3 הדרכים הבאות:
יש שלוש דרכים ליצור אינטראקציה עם BigQuery, ואנחנו ננסה שתיים מהן: א. ממשק המשתמש באינטרנט של BigQuery ב. הפקודה bq c. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
השתמשתי בסביבת העבודה של BigQuery Web SQL כדי להריץ שאילתות. סביבת העבודה של SQL נראית כך:

באמצעות פקודת bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. חיזוי דירוג סרט בסולם של 1 עד 10
BigQuery ML תומך בלמידה מפוקחת באמצעות סוג המודל רגרסיה לוגיסטית. אפשר להשתמש בסוג המודל 'רגרסיה לוגיסטית בינארית' כדי לחזות אם ערך מסוים משתייך לאחת משתי קטגוריות, או להשתמש בסוג המודל 'רגרסיה רב-סיווגית' כדי לחזות אם ערך מסוים משתייך לאחת מכמה קטגוריות. הבעיות האלה נקראות בעיות סיווג, כי המטרה שלהן היא לסווג נתונים לשתי קטגוריות או יותר.
הערה קצרה לגבי בחירת המודל: זוהי בחירה ניסיונית של מודל שנבחר כאן, על סמך הערכת התוצאות שהתקבלו אחרי הפעלת כמה מודלים בהתחלה. בסופו של דבר בחרתי ב-LOGISTIC REG כדי לשמור על פשטות ולקבל תוצאות שקרובות יותר לדירוג הסרט בפועל מכמה מסדי נתונים. חשוב לזכור שצריך להתייחס לזה רק כדוגמה להטמעה של המודל, וזה לא בהכרח המודל המומלץ לתרחיש השימוש הזה. דרך נוספת ליישום היא לחזות את התוצאה של הסרט כטובה או כרעה באמצעות מודל הרגרסיה הלוגיסטית הזה, במקום לחזות את הציון.
בחירת נתוני האימון
כבר פיצלנו את נתוני הסרט (בפורמט CSV) ל-3 קטגוריות בטבלה באמצעות השדה data_cat, שיש לו אחד מ-3 ערכים – TRAIN, TEST ו-PREDICT. פיצול מערך הנתונים למטרות בדיקה ואימון הוא היבט חשוב של המודל. אם אתם צריכים מידע נוסף על פיצול מערכי נתונים, תוכלו לעיין במסמכי התיעוד.
יצירת מודל רגרסיה לוגיסטית
אפשר להשתמש בהצהרה CREATE MODEL עם האפשרות LOGISTIC_REG כדי ליצור ולאמן מודל רגרסיה לוגיסטית.
מריצים את השאילתה הבאה בסביבת העבודה של SQL בממשק המשתמש של BigQuery באינטרנט:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
פרטי השאילתה:
- ההצהרה CREATE MODEL מאמנת מודל באמצעות נתוני האימון בהצהרת SELECT
- סעיף OPTIONS מציין את סוג המודל ואת אפשרויות האימון. בדוגמה הזו, האפשרות LOGISTIC_REG מציינת סוג של מודל רגרסיה לוגיסטית. אין צורך לציין מודל רגרסיה לוגיסטית בינארית לעומת מודל רגרסיה לוגיסטית מרובת מחלקות: BigQuery ML יכול לקבוע איזה מודל לאמן על סמך מספר הערכים הייחודיים בעמודת התווית
- data_split_method=‘NO_SPLIT' מאלץ את BQML להתאמן על הנתונים בהתאם לתנאי השאילתה (data_cat = ‘TRAIN'). חשוב גם לציין שעדיף להשתמש באפשרות ‘AUTO_SPLIT' כדי לאפשר למסגרת (או לשירות במקרה הזה) להקצות באופן אקראי את החלוקה של נתוני האימון והבדיקה.
- האפשרות input_label_cols מציינת איזו עמודה בהצהרת SELECT תשמש כעמודת התווית. כאן, עמודת התווית היא score, כך שהמודל ילמד איזה מבין 10 הערכים של score הוא הסביר ביותר על סמך הערכים האחרים שמופיעים בכל שורה
- האפשרות auto_class_weights=TRUE מאזנת את תוויות הסיווג בנתוני האימון. כברירת מחדל, נתוני האימון לא משוקללים. אם התוויות בנתוני האימון לא מאוזנות, יכול להיות שהמודל ילמד לחזות את הסיווג הכי פופולרי של התוויות בצורה משמעותית יותר
- הצהרת SELECT מבצעת שאילתה בטבלה שטענו אליה את נתוני ה-CSV. הפסוקית WHERE מסננת את השורות בטבלת הקלט כך שבשלב הזה נבחר רק מערך הנתונים TRAIN.
אחרי שיוצרים את הטבלה, היא מופיעה בקטע SCHEMA של סביבת העבודה של BigQuery SQL:
תוויות

תכונות

הערכת מודל הרגרסיה הלוגיסטית
אחרי שיוצרים את המודל, מעריכים את הביצועים שלו באמצעות הפונקציה ML.EVALUATE. הפונקציה ML.EVALUATE מעריכה את הערכים החזויים ביחס לנתונים בפועל. השאילתה להערכת המודל היא:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
הפונקציה ML.EVALUATE מקבלת את המודל שאומן בשלב הקודם ואת נתוני ההערכה שמוחזרים על ידי שאילתת משנה מסוג SELECT. הפונקציה מחזירה שורה אחת של נתונים סטטיסטיים לגבי המודל.

מכיוון שביצעתם רגרסיה לוגיסטית, התוצאות כוללות את המדדים שמופיעים בצילום המסך שלמעלה – דיוק, היזכרות, רמת דיוק, ציון F1, log_loss, roc_auc. המדדים האלה חשובים מאוד להערכת הביצועים של המודל. אפשר גם להתקשר אל ML.EVALUATE בלי לספק נתוני קלט. הפונקציה ML.EVALUATE מאחזרת את מדדי ההערכה שנוצרו במהלך האימון, שמתבסס על מערך נתוני ההערכה ששמור אוטומטית.
מבט מהיר על מדדים מרכזיים:
דיוק – איזה חלק מהזיהויים החיוביים היה נכון בפועל? דיוק = חיובי אמיתי / (חיובי אמיתי + חיובי כוזב) היזכרות – איזה חלק מהתוצאות החיוביות בפועל זוהה בצורה נכונה? החזרת תוצאות (Recall) = חיובי אמיתי / (חיובי אמיתי + שלילי כוזב) דיוק (Accuracy) – מדד להערכת מודלים של סיווג. זהו החלק היחסי של התחזיות שהמודל שלנו צדק לגביהן. דיוק = מספר התחזיות הנכונות / מספר התחזיות הכולל
חיזוי סיווג סרט באמצעות ML.PREDICT
השאילתה הבאה מנבאת את הציון של כל סרט בחלק PREDICT של מערך הנתונים.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
למטה מופיע קטע מהתוצאות:

תוצאת המודל מציגה את הניקוד הצפוי של הסרט בסולם של 1 עד 10 (סיווג). אולי תהית למה יש כמה שורות של תחזיות לכל סרט. הסיבה לכך היא שהמודל החזיר את התוויות האפשריות שחזיתי ואת ההסתברות להתרחשות של כל אחת מהן בסדר יורד.
ניתוח התוצאות הצפויות והמודל
בנוסף, תוכלו לבצע שני שלבי ניתוח חשובים כחלק מתוצאות החיזוי:
- כדי להבין למה המודל שלכם יוצר את תוצאות החיזוי האלה, אתם יכולים להשתמש בפונקציה ML.EXPLAIN_PREDICT.
- כדי לדעת אילו תכונות הכי חשובות לקביעת קבוצת ההכנסה באופן כללי, אפשר להשתמש בפונקציה ML.GLOBAL_EXPLAIN.
במאמרי העזרה אפשר לקרוא על השלבים האלה בפירוט.
7. חיזוי דירוג סרטים באמצעות BigQuery AutoML
AutoML הוא כלי מצוין אם אתם רוצים לאפשר לשירות BigQuery ליצור את המודל בשבילכם, ולחכות עד שתוצאות המודל ייווצרו. היכולת של AutoML זמינה ישירות ב-BQML (model_type=AUTOML_CLASSIFIER או AutoML_REGRESSOR) וקל יותר להפעיל אותה אם הנתונים כבר נמצאים ב-BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
אחרי שיוצרים את המודל, אפשר לבצע את השלבים של EVALUATE, PREDICT ו-EXPLAIN_PREDICT בדיוק כמו שתיארנו במודל BQML בהתאמה אישית. מידע נוסף על BigQuery AutoML זמין במאמרי העזרה.
8. פריסת מודלים של BQML במרשם המודלים של Vertex AI בלחיצה אחת
מעכשיו אפשר לראות את כל המודלים של למידת המכונה במרשם המודלים של Vertex AI, וכך לארגון קל יותר לנהל ולפרוס מודלים. המודלים האלה כוללים מודלים שנוצרו באמצעות BigQuery ML, AutoML ומודלים שעברו אימון בהתאמה אישית. לשם כך:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
כוללים את האפשרות model_registry="vertex_ai" בשאילתת CREATE MODEL כדי ש-BigQuery ML יוכל לבחור אילו מודלים הוא רוצה לרשום באופן מפורש במאגר המודלים של Vertex AI. מידע נוסף על הנושא הזה זמין בבלוג.
9. סיכום
תוך פחות מ-30 דקות, אנחנו יכולים:
- הגדרת BigQuery כמסד הנתונים של פרויקט ניתוח הנתונים
- יצירת מודל חיזוי מותאם אישית באמצעות SQL של נתוני BigQuery בלבד, ללא קידוד נוסף
- יצירת מודל למידת מכונה אוטומטית של BQ באמצעות שאילתות SQL בלבד
- מודל BQML שנפרס ב-מרשם המודלים של Vertex AI
10. הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במאמר הזה:
- במסוף Google Cloud, עוברים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על סמל המחיקה.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
11. מזל טוב
מעולה! יצרתם בהצלחה מודל לחיזוי ציוני סרטים באמצעות BQML בהתאמה אישית ו-AutoML, ופרסתם את המודל ב-מרשם המודלים של Vertex AI, והכול באמצעות SQL בלבד.