SQL का इस्तेमाल करके, BQML के साथ फ़िल्म रेटिंग का अनुमान लगाना

1. परिचय

इस कोडलैब में, हम सिर्फ़ एसक्यूएल का इस्तेमाल करके, BigQuery ML के कस्टम मॉडल की मदद से, मूवी के स्कोर का अनुमान लगाने वाला मॉडल बनाएंगे. साथ ही, मॉडल को VertexAI में डिप्लॉय करेंगे. आपको इनके बारे में जानकारी मिलेगी:

  1. Cloud Shell का इस्तेमाल करके BigQuery डेटासेट बनाने और फ़ाइल से डेटा लोड करने का तरीका
  2. ज़्यादा कोडिंग किए बिना, सिर्फ़ एसक्यूएल क्वेरी का इस्तेमाल करके, मूवी के स्कोर का अनुमान लगाने के लिए मल्टी-क्लास रिग्रेशन अनुमान मॉडल बनाने के लिए, सुपरवाइज़्ड लर्निंग के लिए BigQuery ML का इस्तेमाल कैसे करें

आपको क्या बनाने को मिलेगा

आपको एक

  • टेबल और मॉडल कॉम्पोनेंट को शामिल करने के लिए, BigQuery डेटासेट
  • SQL क्वेरी का इस्तेमाल करके, फ़िल्म की रेटिंग का अनुमान लगाने के लिए BigQuery ML मॉडल
  • मॉडल को Vertex AI Model Registry में डिप्लॉय करना

ज़रूरी शर्तें

  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट

2. अपना प्रोजेक्ट बनाना

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें.
  3. एपीआई चालू करने के लिए, BigQuery पर जाएं. अपने ब्राउज़र में यह यूआरएल डालकर, BigQuery वेब यूज़र इंटरफ़ेस (यूआई) को सीधे तौर पर भी खोला जा सकता है: https://console.cloud.google.com/bigquery

3. Cloud Shell चालू करें

  1. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. इसमें bq पहले से लोड होता है: Cloud Console में, सबसे ऊपर दाईं ओर मौजूद 'Cloud Shell चालू करें' पर क्लिक करें: 6757b2fb50ddcc2d.png
  2. Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर पहले ही सेट कर दिया गया है. पुष्टि करें कि आपने Cloud Shell में पुष्टि कर ली है. इसके लिए, यह कमांड चलाएं:
gcloud auth list
  1. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं
gcloud config list project
  1. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <PROJECT_ID>

gcloud कमांड और उनके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें.

4. ट्रेनिंग डेटा तैयार किया जा रहा है

यह डेटा से जुड़े सभी प्रोजेक्ट, प्रॉडक्ट, और ऐप्लिकेशन के लिए एक अहम चरण है. इसमें टेक्नोलॉजी के साथ-साथ, डोमेन के बारे में काफ़ी जानकारी की ज़रूरत होती है. इससे बेहतर डेटासेट तैयार किया जा सकता है और उसे आपके एमएल प्रोजेक्ट के लिए तैयार किया जा सकता है. इस कोडलैब के लिए, हम पहले से तैयार की गई data फ़ाइल का इस्तेमाल करेंगे.

5. डेटासेट बनाना और लोड करना

BigQuery डेटासेट, टेबल का कलेक्शन होता है. किसी डेटासेट की सभी टेबल, एक ही डेटा location में सेव की जाती हैं. डेटासेट और उसकी टेबल का ऐक्सेस सीमित करने के लिए, कस्टम ऐक्सेस कंट्रोल भी अटैच किए जा सकते हैं.

  1. Cloud Shell में, "movies" नाम का डेटासेट बनाने के लिए, bq mk कमांड का इस्तेमाल करें.
bq mk --location=<<LOCATION>> movies

location को किसी क्षेत्र (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 के साथ तीन तरीकों से इंटरैक्ट किया जा सकता है. हम इनमें से दो तरीकों को आज़माएंगे: a. BigQuery वेब यूज़र इंटरफ़ेस (यूआई) b. bq कमांड c. एपीआई

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

मैंने क्वेरी चलाने के लिए, BigQuery Web SQL Workspace का इस्तेमाल किया है. SQL वर्कस्पेस ऐसा दिखता है:

109a0b2c7155e9b3.png

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 का इस्तेमाल किया गया है. कृपया ध्यान दें कि इसे मॉडल लागू करने के लिए सिर्फ़ एक सैंपल के तौर पर माना जाना चाहिए. यह ज़रूरी नहीं है कि इस्तेमाल के इस मामले के लिए, सुझाया गया मॉडल यही हो. इसे लागू करने का एक और तरीका यह है कि स्कोर का अनुमान लगाने के बजाय, इस लॉजिस्टिक रिग्रेशन मॉडल का इस्तेमाल करके, यह अनुमान लगाया जाए कि फ़िल्म अच्छी है या बुरी.

ट्रेनिंग के लिए डेटा चुनना

हमने टेबल में, फ़ील्ड "data_cat" का इस्तेमाल करके, मूवी के डेटा (csv फ़ॉर्मैट में) को तीन कैटगरी में पहले ही बांट दिया है. इस फ़ील्ड की तीन वैल्यू हैं - TRAIN, TEST, और PREDICT. मॉडल के लिए, डेटासेट को टेस्टिंग और ट्रेनिंग के मकसद से अलग-अलग हिस्सों में बांटना ज़रूरी है. अगर आपको डेटासेट को बांटने के बारे में ज़्यादा जानकारी चाहिए, तो दस्तावेज़ देखें.

लॉजिस्टिक रिग्रेशन मॉडल बनाना

लॉजिस्टिक रिग्रेशन मॉडल बनाने और उसे ट्रेन करने के लिए, हम ‘LOGISTIC_REG' विकल्प के साथ CREATE MODEL स्टेटमेंट का इस्तेमाल कर सकते हैं.

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

क्वेरी की जानकारी:

  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 स्टेटमेंट में किस कॉलम को लेबल कॉलम के तौर पर इस्तेमाल किया जाए. यहां, लेबल कॉलम स्कोर है. इसलिए, मॉडल यह पता लगाएगा कि हर लाइन में मौजूद अन्य वैल्यू के आधार पर, स्कोर की 10 वैल्यू में से कौनसी वैल्यू सबसे ज़्यादा संभावित है
  5. ‘auto_class_weights=TRUE' विकल्प, ट्रेनिंग डेटा में क्लास के लेबल को बैलेंस करता है. डिफ़ॉल्ट रूप से, ट्रेनिंग डेटा को कोई वेट नहीं दिया जाता है. अगर ट्रेनिंग डेटा में लेबल का बैलेंस सही नहीं है, तो मॉडल, लेबल की सबसे लोकप्रिय क्लास का अनुमान ज़्यादा सटीक तरीके से लगा सकता है
  6. SELECT स्टेटमेंट, उस टेबल को क्वेरी करता है जिसे हमने CSV डेटा के साथ लोड किया था. WHERE क्लॉज़, इनपुट टेबल में मौजूद लाइनों को फ़िल्टर करता है, ताकि इस चरण में सिर्फ़ TRAIN डेटासेट चुना जा सके

बन जाने के बाद, BigQuery SQL वर्कस्पेस के स्कीमा सेक्शन में यह दिखता है:

लेबल

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 फ़ंक्शन, पिछले चरण में ट्रेन किए गए मॉडल और 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 से 10 के स्केल पर होता है (क्लासिफ़िकेशन). आपको यह जानकर हैरानी हो सकती है कि हर फ़िल्म के लिए, अनुमानित कमाई की कई लाइनें क्यों दी गई हैं. ऐसा इसलिए है, क्योंकि मॉडल ने अनुमानित लेबल और उनके होने की संभावना को घटते क्रम में दिखाया है.

अनुमानित नतीजों और मॉडल का विश्लेषण करना

इसके अलावा, अनुमान के नतीजों के साथ-साथ, विश्लेषण के दो बेहतरीन चरण भी पूरे किए जा सकते हैं:

  1. आपका मॉडल अनुमान के ये नतीजे क्यों जनरेट कर रहा है, यह समझने के लिए ML.EXPLAIN_PREDICT फ़ंक्शन का इस्तेमाल किया जा सकता है
  2. यह जानने के लिए कि आम तौर पर आय के ब्रैकेट का पता लगाने के लिए, कौनसी सुविधाएं सबसे अहम हैं, ML.GLOBAL_EXPLAIN फ़ंक्शन का इस्तेमाल किया जा सकता है

इन चरणों के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.

7. BigQuery 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 Model Registry में एक क्लिक में डिप्लॉय करने की सुविधा

अब आपको अपने सभी एमएल मॉडल, 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';

CREATE MODEL क्वेरी में model_registry="vertex_ai" विकल्प शामिल करें, ताकि BigQuery ML यह चुन सके कि उसे Vertex AI Model Registry में कौनसे मॉडल रजिस्टर करने हैं. इस बारे में ज़्यादा जानने के लिए, यह ब्लॉग पढ़ें.

9. खास जानकारी

30 मिनट से कम समय में, हमने ये काम किए:

  1. Analytics प्रोजेक्ट के लिए, BigQuery को डेटाबेस के तौर पर सेट अप करना
  2. सिर्फ़ BigQuery डेटा एसक्यूएल का इस्तेमाल करके कस्टम अनुमान मॉडल बनाया गया है. इसमें किसी अन्य कोडिंग का इस्तेमाल नहीं किया गया है
  3. सिर्फ़ एसक्यूएल क्वेरी का इस्तेमाल करके, BQ Auto ML मॉडल बनाया गया
  4. BQML मॉडल को Vertex AI Model Registry में डिप्लॉय किया गया हो

10. व्यवस्थित करें

इस पोस्ट में इस्तेमाल की गई संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, संसाधन मैनेज करें पेज पर जाएं
  2. प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे आपको मिटाना है. इसके बाद, मिटाएं पर क्लिक करें
  3. डायलॉग बॉक्स में, प्रोजेक्ट आईडी डालें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें

11. बधाई हो

बधाई हो! आपने BQML कस्टम और AutoML की मदद से, मूवी के स्कोर का अनुमान लगाने वाला मॉडल बना लिया है. साथ ही, आपने इस मॉडल को Vertex AI Model Registry में डिप्लॉय कर दिया है. यह सब सिर्फ़ एसक्यूएल का इस्तेमाल करके किया गया है.