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

1. परिचय

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

  1. Cloud Shell का इस्तेमाल करके BigQuery डेटासेट बनाने और फ़ाइल से डेटा लोड करने का तरीका
  2. निगरानी में रखे गए लर्निंग के लिए BigQuery ML का इस्तेमाल करने का तरीका

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

आपको

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

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

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

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

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

जगह की जानकारी को क्षेत्र (asia-south1) पर सेट करें.

  1. पक्का करें कि आपकी डेटा फ़ाइल (.csv) तैयार हो. डेटा स्टोर करने की जगह का क्लोन बनाने और प्रोजेक्ट पर जाने के लिए, Cloud Shell में ये कमांड इस्तेमाल करें:
git clone <<repository link>>

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

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

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

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

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

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, लॉजिस्टिक रिग्रेशन मॉडल टाइप के साथ निगरानी में रखे गए लर्निंग के साथ काम करता है. बाइनरी लॉजिस्टिक रिग्रेशन मॉडल टाइप का इस्तेमाल करके, यह अनुमान लगाया जा सकता है कि कोई वैल्यू इन दो में से किसी एक कैटगरी में आती है या नहीं; इसके अलावा, मल्टी-क्लास रिग्रेशन मॉडल टाइप का इस्तेमाल करके, यह अनुमान लगाया जा सकता है कि कोई वैल्यू कई कैटगरी में से किसी एक में आती है या नहीं. इन्हें क्लासिफ़िकेशन समस्याएं कहा जाता है, क्योंकि ये डेटा को दो या उससे ज़्यादा कैटगरी में बांटने की कोशिश करती हैं.

मॉडल के चुनाव के बारे में ज़रूरी जानकारी: यह प्रयोग के तौर पर यहां चुना गया मॉडल है. शुरुआत में मैंने कुछ मॉडल का आकलन किया. इसके बाद, मैंने इसे आसान रखने और अलग-अलग डेटाबेस से मूवी की असली रेटिंग के करीब नतीजे पाने के लिए लॉजिस्टिक रीजी (लॉजिस्टिक रीजी) के साथ काम किया. कृपया ध्यान दें कि इसे मॉडल लागू करने के लिए सिर्फ़ एक सैंपल के तौर पर देखा जाना चाहिए. साथ ही, इस्तेमाल के इस उदाहरण के लिए यह सुझाया गया मॉडल नहीं है. इसे लागू करने का एक अन्य तरीका यह है कि स्कोर का अनुमान लगाने के बजाय, इस लॉजिस्टिक रिग्रेशन मॉडल का इस्तेमाल करके फ़िल्म के नतीजे का अनुमान अच्छा / खराब के रूप में लगाया जा सकता है.

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

हमने "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&#39; यह BQML को क्वेरी की शर्तों (data_cat = ‘TRAIN') के मुताबिक, डेटा के आधार पर ट्रेनिंग देता है इस विकल्प का इस्तेमाल करके फ़्रेमवर्क (या इस मामले में सेवा) को ट्रेन/टेस्ट स्प्लिट के बंटवारे को किसी भी क्रम में लगाने की अनुमति दें
  4. इनपुट_label_cols विकल्प यह तय करता है कि SELECT स्टेटमेंट में किस कॉलम को लेबल कॉलम के तौर पर इस्तेमाल करना है. यहां, लेबल कॉलम को स्कोर के तौर पर दिखाया जाता है. इसलिए, मॉडल यह पता लगा लेता है कि हर लाइन में मौजूद अन्य वैल्यू के आधार पर, स्कोर के 10 वैल्यू में से कौनसी वैल्यू सबसे ज़्यादा है
  5. 'auto_class_weights=TRUE' विकल्प की मदद से, ट्रेनिंग डेटा में क्लास के लेबल को बैलेंस किया जा सकता है. डिफ़ॉल्ट रूप से, ट्रेनिंग डेटा तय नहीं होता. अगर ट्रेनिंग डेटा में मौजूद लेबल असंतुलित हैं, तो मॉडल सबसे ज़्यादा लोकप्रिय लेबल का अनुमान लगाना सीख सकता है
  6. SELECT स्टेटमेंट उस टेबल के लिए क्वेरी करता है जिसे हमने csv डेटा के साथ लोड किया है. WHERE क्लॉज़ इनपुट टेबल की पंक्तियों को फ़िल्टर करता है, ताकि इस चरण में सिर्फ़ TRAIN डेटासेट को चुना जा सके

इवेंट बनाने के बाद, BigQuery एसक्यूएल वर्कस्पेस के SCHEMA सेक्शन में यह दिखेगा:

लेबल

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-score, 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 को इस्तेमाल करना चाहिए. ऐसा तब तक होगा, जब तक मॉडल के नतीजे जनरेट नहीं हो जाते. 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 Model Registry में, 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';

Model_registry="कोणीय_एआई" शामिल करें 'बनाएं मॉडल' क्वेरी में मौजूद विकल्प का इस्तेमाल करें, ताकि BigQuery ML यह चुन सके कि उसे Vertex AI Model Registry में कौनसे मॉडल रजिस्टर करने हैं. इस बारे में ज़्यादा जानने के लिए, यह ब्लॉग पढ़ें.

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

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

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

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

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

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

11. बधाई हो

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