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

1. परिचय

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

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

आपको क्या बनाना है

आपको एक

  • टेबल और मॉडल कॉम्पोनेंट वाला BigQuery डेटासेट
  • एसक्यूएल क्वेरी का इस्तेमाल करके, मूवी रेटिंग का अनुमान लगाने के लिए 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. Cloud Shell में यह कमांड चलाकर पुष्टि करें कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है
gcloud config list project
  1. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <PROJECT_ID>

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

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

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

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

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

  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. अपनी CSV फ़ाइल को BigQuery टेबल में लोड करने के लिए, bq load कमांड का इस्तेमाल करें. कृपया ध्यान दें कि सीधे 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 कमांड, लोकल फ़ाइलों के अलावा, gs://my_bucket/path/to/file यूआरआई की मदद से Cloud Storage से फ़ाइलें लोड कर सकता है. स्कीमा, जिसे JSON स्कीमा फ़ाइल में या कॉमा लगाकर अलग की गई सूची के तौर पर तय किया जा सकता है. मैंने कॉमा लगाकर अलग की गई सूची का इस्तेमाल किया है. हुर्रे! हमारा CSV डेटा अब movies.movies टेबल में लोड हो गया है.

  1. इन तीन में से किसी एक तरीके से क्वेरी करें:

BigQuery के साथ तीन तरीकों से इंटरैक्ट किया जा सकता है. हम इनमें से दो तरीकों को आज़माएंगे: a. BigQuery वेब यूज़र इंटरफ़ेस b. bq कमांड c. एपीआई

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

मैंने क्वेरी चलाने के लिए, BigQuery वेब एसक्यूएल वर्कस्पेस का इस्तेमाल किया है. 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. टेस्टिंग और ट्रेनिंग के लिए डेटासेट को अलग-अलग हिस्सों में बांटना, मॉडल का एक अहम हिस्सा है. डेटासेट को अलग-अलग हिस्सों में बांटने के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.

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

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

BigQuery वेब यूज़र इंटरफ़ेस (यूआई) के SQL फ़ाइल फ़ोल्डर में, नीचे दी गई क्वेरी चलाएं:

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. Vertex AI मॉडल रजिस्ट्री में BQML मॉडल को एक क्लिक में डिप्लॉय करना

अब आपके पास 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 मॉडल रजिस्ट्री में किन मॉडल को रजिस्टर करना है. इस बारे में ज़्यादा जानने के लिए, यह ब्लॉग पढ़ें.

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

30 मिनट से भी कम समय में, हमने:

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

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

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

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

11. बधाई हो

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