پیش‌بینی رتبه‌بندی فیلم با BQML با استفاده از SQL، پیش‌بینی رتبه‌بندی فیلم با BQML با استفاده از SQL

۱. مقدمه

در این آزمایشگاه کد، ما یک مدل پیش‌بینی امتیاز فیلم را با مدل سفارشی BigQuery ML و تنها با استفاده از SQL ایجاد خواهیم کرد و مدل را در VertexAI مستقر خواهیم کرد. شما یاد خواهید گرفت:

  1. نحوه ایجاد مجموعه داده BigQuery با استفاده از Cloud Shell و بارگذاری داده‌ها از فایل
  2. نحوه استفاده از BigQuery ML برای یادگیری نظارت شده جهت ایجاد یک مدل پیش‌بینی رگرسیون چند کلاسه برای پیش‌بینی امتیاز فیلم بدون کدنویسی زیاد، اما فقط با استفاده از کوئری‌های SQL

آنچه خواهید ساخت

شما یک [چیز/چیزی] ایجاد خواهید کرد

  • یک مجموعه داده BigQuery برای شامل کردن اجزای جدول و مدل
  • مدل BigQuery ML برای پیش‌بینی رتبه‌بندی فیلم با استفاده از کوئری‌های SQL
  • مدل را در Vertex AI Model Registry مستقر کنید

الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس
  • یک پروژه گوگل کلود با قابلیت پرداخت صورتحساب

۲. پروژه خود را ایجاد کنید

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
  3. برای فعال کردن API به BigQuery بروید. همچنین می‌توانید با وارد کردن آدرس اینترنتی زیر در مرورگر خود، رابط کاربری وب BigQuery را مستقیماً باز کنید: https://console.cloud.google.com/bigquery

۳. فعال کردن پوسته ابری

  1. شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود و bq از قبل روی آن بارگذاری شده است، استفاده خواهید کرد: از کنسول Cloud، روی فعال کردن Cloud Shell در گوشه بالا سمت راست کلیک کنید: 6757b2fb50ddcc2d.png
  2. پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شده‌اید و پروژه از قبل روی شناسه پروژه شما تنظیم شده است. دستور زیر را در Cloud Shell اجرا کنید تا تأیید شود که احراز هویت شده‌اید:
gcloud auth list
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
  1. اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <PROJECT_ID>

برای دستورات و نحوه‌ی استفاده از gcloud به مستندات مراجعه کنید.

۴. آماده‌سازی داده‌های آموزشی

این یک گام بزرگ در تمام پروژه‌ها، محصولات و برنامه‌های مرتبط با داده است که علاوه بر فناوری، به تخصص زیادی در آن حوزه نیاز دارد تا یک مجموعه داده بهینه تهیه شود و برای پروژه یادگیری ماشینی شما آماده شود. برای هدف این آزمایشگاه کد، ما از فایل داده‌ای که از قبل آماده شده است استفاده خواهیم کرد.

۵. ایجاد و بارگذاری مجموعه داده‌ها

یک مجموعه داده BigQuery مجموعه‌ای از جداول است. تمام جداول موجود در یک مجموعه داده در یک مکان داده ذخیره می‌شوند. همچنین می‌توانید کنترل‌های دسترسی سفارشی را برای محدود کردن دسترسی به یک مجموعه داده و جداول آن پیوست کنید.

  1. در Cloud Shell، از دستور bq mk برای ایجاد یک مجموعه داده به نام "movies" استفاده کنید.
bq mk --location=<<LOCATION>> movies

مکان را روی یک منطقه (asia-south1) تنظیم کنید.

  1. مطمئن شوید که فایل داده (.csv) را آماده دارید. دستورات زیر را در Cloud Shell اجرا کنید تا مخزن را کلون کنید و به پروژه بروید:
git clone <<repository link>>

cd movie-score
  1. از دستور 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 با آدرس‌های اینترنتی gs://my_bucket/path/to/file بارگذاری کند. یک طرحواره، که می‌تواند در یک فایل طرحواره JSON یا به عنوان یک لیست جدا شده با کاما تعریف شود (من از یک لیست جدا شده با کاما استفاده کردم). هورا! داده‌های csv ما اکنون در جدول movies.movies بارگذاری شده‌اند.

  1. به یکی از ۳ روش زیر استعلام کنید:

ما می‌توانیم به سه روش با BigQuery تعامل داشته باشیم، که دو مورد از آنها را امتحان خواهیم کرد: الف. رابط کاربری وب BigQuery ب. دستور bq ج. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

من از BigQuery Web SQL Workspace برای اجرای کوئری‌ها استفاده کرده‌ام. SQL Workspace به شکل زیر است:

109a0b2c7155e9b3.png

با استفاده از دستور bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

۶. پیش‌بینی امتیاز فیلم در مقیاس ۱ تا ۱۰

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';

جزئیات استعلام:

  1. دستور CREATE MODEL با استفاده از داده‌های آموزشی موجود در دستور SELECT، یک مدل را آموزش می‌دهد.
  2. بند OPTIONS نوع مدل و گزینه‌های آموزش را مشخص می‌کند. در اینجا، گزینه LOGISTIC_REG نوع مدل رگرسیون لجستیک را مشخص می‌کند. لازم نیست یک مدل رگرسیون لجستیک دودویی در مقابل یک مدل رگرسیون لجستیک چندکلاسه مشخص شود: BigQuery ML می‌تواند بر اساس تعداد مقادیر منحصر به فرد در ستون برچسب، تعیین کند که کدام را آموزش دهد.
  3. data_split_method='NO_SPLIT'، BQML را مجبور می‌کند که بر اساس شرایط پرس‌وجو (data_cat = 'TRAIN') روی داده‌ها آموزش ببیند، همچنین توجه داشته باشید که بهتر است از 'AUTO_SPLIT' در این گزینه استفاده کنید تا به چارچوب (یا سرویس در این مورد) اجازه دهید تقسیم‌بندی آموزش/آزمون را تصادفی کند.
  4. گزینه input_label_cols مشخص می‌کند که کدام ستون در دستور SELECT به عنوان ستون برچسب استفاده شود. در اینجا، ستون برچسب، score است، بنابراین مدل یاد می‌گیرد که کدام یک از 10 مقدار score بر اساس سایر مقادیر موجود در هر سطر، محتمل‌تر است.
  5. گزینه 'auto_class_weights=TRUE' برچسب‌های کلاس را در داده‌های آموزشی متعادل می‌کند. به طور پیش‌فرض، داده‌های آموزشی بدون وزن هستند. اگر برچسب‌های موجود در داده‌های آموزشی نامتعادل باشند، مدل ممکن است یاد بگیرد که محبوب‌ترین کلاس برچسب‌ها را با دقت بیشتری پیش‌بینی کند.
  6. دستور SELECT از جدولی که با داده‌های csv بارگذاری کرده‌ایم، پرس‌وجو می‌کند. عبارت WHERE ردیف‌های جدول ورودی را فیلتر می‌کند تا فقط مجموعه داده‌های TRAIN در این مرحله انتخاب شوند.

پس از ایجاد، موارد زیر در بخش SCHEMA در BigQuery SQL Workspace ظاهر می‌شود:

برچسب‌ها

93efd0c1a7883690.png

ویژگی‌ها

8c539338df1a9652.png

مدل رگرسیون لجستیک خود را ارزیابی کنید

پس از ایجاد مدل خود، عملکرد مدل را با استفاده از تابع ML.EVALUATE ارزیابی کنید. تابع ML.EVALUATE مقادیر پیش‌بینی‌شده را در مقابل داده‌های واقعی ارزیابی می‌کند. پرس‌وجو برای ارزیابی مدل به شرح زیر است:

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= TEST'
    )
  )

تابع ML.EVALUATE مدل آموزش داده شده در مرحله قبل و داده‌های ارزیابی برگردانده شده توسط یک subquery SELECT را دریافت می‌کند. این تابع یک ردیف از آمار مربوط به مدل را برمی‌گرداند.

b54b0ebd6514a498.png

از آنجا که شما یک رگرسیون لجستیک انجام داده‌اید، نتایج شامل معیارهایی است که در تصویر بالا مشاهده می‌کنید - دقت، یادآوری، صحت، امتیاز f1، log_loss، roc_auc که در ارزیابی عملکرد مدل واقعاً حیاتی هستند. همچنین می‌توانید ML.EVALUATE را بدون ارائه داده‌های ورودی فراخوانی کنید. ML.EVALUATE معیارهای ارزیابی به‌دست‌آمده در طول آموزش را بازیابی می‌کند، که از مجموعه داده‌های ارزیابی که به‌طور خودکار رزرو شده‌اند استفاده می‌کند.

شاخص‌های کلیدی در یک نگاه:

دقت - چه نسبتی از شناسایی‌های مثبت واقعاً درست بودند؟ دقت = مثبت واقعی / (مثبت واقعی + مثبت کاذب) یادآوری - چه نسبتی از مثبت‌های واقعی به درستی شناسایی شدند؟ یادآوری = مثبت واقعی / (مثبت واقعی + منفی کاذب) دقت - معیاری برای ارزیابی مدل‌های طبقه‌بندی، کسری از پیش‌بینی‌هایی است که مدل ما واقعاً درست انجام داده است. دقت = تعداد پیش‌بینی‌های صحیح / تعداد کل پیش‌بینی‌ها

پیش‌بینی رتبه‌بندی فیلم با استفاده از ML.PREDICT

کوئری زیر امتیاز هر فیلم را در بخش PREDICT از مجموعه داده‌ها پیش‌بینی می‌کند.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= PREDICT'
     )
  )

در زیر گزیده‌ای از نتایج آمده است:

1efb91967acc1f0c.png

نتیجه مدل، امتیاز پیش‌بینی‌شده فیلم را در مقیاس ۱ تا ۱۰ (طبقه‌بندی) نشان می‌دهد. حتماً از خود می‌پرسید که چرا چندین ردیف پیش‌بینی در مقابل هر فیلم وجود دارد. دلیلش این است که مدل، برچسب‌های پیش‌بینی‌شده ممکن و احتمال وقوع هر یک را به ترتیب نزولی برگردانده است.

تحلیل نتایج پیش‌بینی‌شده و مدل

علاوه بر این، می‌توانید دو مرحله تحلیل عالی را به عنوان بخشی از نتایج پیش‌بینی انجام دهید:

  1. برای درک اینکه چرا مدل شما این نتایج پیش‌بینی را تولید می‌کند، می‌توانید از تابع ML.EXPLAIN_PREDICT استفاده کنید.
  2. برای اینکه بدانید کدام ویژگی‌ها برای تعیین طبقه درآمدی به طور کلی مهم‌تر هستند، می‌توانید از تابع ML.GLOBAL_EXPLAIN استفاده کنید.

می‌توانید جزئیات این مراحل را در مستندات مطالعه کنید.

۷. پیش‌بینی رتبه‌بندی فیلم با استفاده از 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;

پس از ایجاد مدل، می‌توانید مراحل ارزیابی (EALUATE)، پیش‌بینی (PREDICT) و توضیح (EXPLAIN_PREDICT) را همانطور که در مدل سفارشی BQML بحث کردیم، انجام دهید. برای اطلاعات بیشتر در مورد BigQuery AutoML به مستندات مراجعه کنید.

۸. استقرار مدل‌های BQML در رجیستری مدل Vertex AI با یک کلیک

اکنون می‌توانید تمام مدل‌های یادگیری ماشین خود را در 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 بتواند مدل‌هایی را که می‌خواهد صریحاً در Vertex AI Model Registry ثبت کند، انتخاب کند. می‌توانید در این وبلاگ اطلاعات بیشتری در این مورد بخوانید.

۹. خلاصه

در کمتر از 30 دقیقه، موارد زیر را داریم:

  1. BigQuery را به عنوان پایگاه داده ما برای پروژه تحلیلی تنظیم کنید
  2. مدل پیش‌بینی سفارشی ایجاد شده فقط با استفاده از SQLهای داده BigQuery و بدون هیچ کدنویسی دیگری
  3. مدل BQ Auto ML را فقط با استفاده از کوئری‌های SQL ایجاد کرد.
  4. مدل BQML در رجیستری مدل Vertex AI مستقر شد.

۱۰. تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:

  1. در کنسول گوگل کلود، به صفحه مدیریت منابع بروید
  2. در لیست پروژه‌ها، پروژه‌ای را که می‌خواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
  3. در کادر محاوره‌ای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.

۱۱. تبریک

تبریک! شما با موفقیت یک مدل پیش‌بینی امتیاز فیلم با BQML سفارشی و AutoML ایجاد کردید و مدل را در Vertex AI Model Registry مستقر کردید و همه این کارها را فقط با استفاده از SQL انجام دادید.