1. مقدمه
در این کد، ما یک مدل پیشبینی امتیاز فیلم با مدل سفارشی BigQuery ML با استفاده از SQL ایجاد میکنیم و مدل را در VertexAI مستقر میکنیم. یاد خواهید گرفت:
- نحوه ایجاد یک مجموعه داده BigQuery با استفاده از Cloud Shell و بارگیری داده ها از فایل
- نحوه استفاده از BigQuery ML برای یادگیری نظارت شده برای ایجاد یک مدل پیشبینی رگرسیون چند کلاسه برای پیشبینی امتیاز فیلم بدون کدنویسی زیاد اما فقط با استفاده از پرسوجوهای SQL
چیزی که خواهی ساخت
شما یک را ایجاد خواهید کرد
- یک مجموعه داده BigQuery که شامل جدول و اجزای مدل است
- مدل BigQuery ML برای پیش بینی رتبه بندی فیلم با استفاده از پرس و جوهای SQL
- مدل را در Vertex AI Model Registry مستقر کنید
الزامات
2. پروژه خود را ایجاد کنید
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید.
- برای فعال کردن API به BigQuery بروید. همچنین میتوانید رابط وب BigQuery را مستقیماً با وارد کردن URL زیر در مرورگر خود باز کنید: https://console.cloud.google.com/bigquery
3. Cloud Shell را فعال کنید
- شما از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Google Cloud اجرا می شود و با bq از قبل بارگذاری شده است: از کنسول Cloud، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:
- پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است. برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد
gcloud config list project
- اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <PROJECT_ID>
برای دستورات و استفاده از gcloud به اسناد مراجعه کنید.
4. تهیه داده های آموزشی
این یک گام بزرگ در تمام پروژهها، محصولات و برنامههای مرتبط با داده است که علاوه بر فناوری، برای تهیه مجموعه داده بهینه و آمادهسازی آن برای پروژه ML شما، به تخصص دامنه زیادی نیاز دارد. برای هدف این نرم افزار از فایل داده ای که از قبل آماده شده است استفاده می کنیم.
5. ایجاد و بارگذاری مجموعه داده
مجموعه داده BigQuery مجموعه ای از جداول است. همه جداول در یک مجموعه داده در یک مکان داده ذخیره می شوند. همچنین میتوانید کنترلهای دسترسی سفارشی را برای محدود کردن دسترسی به مجموعه داده و جداول آن ضمیمه کنید.
- در Cloud Shell از دستور bq mk برای ایجاد مجموعه داده ای به نام فیلم ها استفاده کنید.
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 b. دستور bq c. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
من از BigQuery Web SQL Workspace برای اجرای پرس و جوها استفاده کرده ام. فضای کاری 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) را با استفاده از فیلد "data_cat" که یکی از 3 مقدار - TRAIN، TEST و PREDICT را دارد، به 3 دسته در جدول تقسیم کرده ایم. تقسیم مجموعه داده برای اهداف آزمایشی و آموزشی جنبه مهمی از مدل است. اگر به اطلاعات بیشتری در مورد درک تقسیم مجموعه داده نیاز دارید، به مستندات مراجعه کنید.
مدل رگرسیون لجستیک را ایجاد کنید
ما می توانیم از دستور CREATE MODEL با گزینه 'LOGISTIC_REG' برای ایجاد و آموزش یک مدل رگرسیون لجستیک استفاده کنیم.
کوئری زیر را در BigQuery Web UI SQL Workspace اجرا کنید:
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 به عنوان ستون برچسب استفاده شود. در اینجا، ستون برچسب امتیاز است، بنابراین مدل یاد خواهد گرفت که کدام یک از 10 مقدار امتیاز به احتمال زیاد بر اساس سایر مقادیر موجود در هر ردیف است.
- گزینه '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 = True Positive / (True Positive + False Negative) دقت - معیاری برای ارزیابی مدلهای طبقهبندی، این کسری از پیشبینیها است که مدل ما واقعاً درست انجام داده است دقت = تعداد پیشبینیهای صحیح / تعداد کل پیشبینیها
پیش بینی رتبه بندی فیلم با استفاده از 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 پیش بینی کنید
اگر می خواهید به سرویس BigQuery اجازه دهید مدل را برای شما ایجاد کند و تا زمانی که نتایج مدل شما تولید شود استراحت کنید، AutoML عالی است. قابلیت 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;
هنگامی که مدل ایجاد شد، می توانید مراحل ارزیابی، پیش بینی و EXPLAIN_PREDICT را همانطور که در مدل سفارشی BQML مورد بحث قرار دادیم، انجام دهید. درباره BigQuery AutoML در مستندات بیشتر بخوانید.
8. یک کلیک برای استقرار مدل های BQML در رجیستری مدل AI Vertex
اکنون میتوانید تمام مدلهای ML خود را در Vertex AI Model Registry مشاهده کنید و مدیریت و استقرار مدلها را برای سازمانتان آسانتر میکند. این شامل مدلهای ساخته شده با 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 بتواند مدل هایی را که به صراحت می خواهد در رجیستری مدل AI Vertex ثبت کند، انتخاب کرده و انتخاب کند. شما می توانید در این مورد بیشتر در این وبلاگ بخوانید.
9. خلاصه
در کمتر از 30 دقیقه، ما داریم:
- BigQuery را به عنوان پایگاه داده ما برای پروژه تحلیلی تنظیم کنید
- مدل پیشبینی سفارشی را با استفاده از SQLهای داده BigQuery و بدون کدنویسی دیگر ایجاد کرد
- مدل BQ Auto ML را فقط با استفاده از پرس و جوهای SQL ایجاد کرد
- مدل BQML در رجیستری مدل AI Vertex مستقر شد
10. پاکسازی کنید
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:
- در کنسول Google Cloud، به صفحه مدیریت منابع بروید
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید
- در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود
11. تبریک می گویم
تبریک می گویم! شما با موفقیت یک مدل پیشبینی امتیاز فیلم با سفارشی BQML و AutoML ایجاد کردید و مدل را در Vertex AI Model Registry مستقر کردید و همه اینها فقط با استفاده از SQL.