BigQuery SQL और Vertex AI की मदद से, जनरेटिव इनसाइट की सुविधा

1. परिचय

इस कोडलैब में, हम BigQuery एसक्यूएल क्वेरी और Vertex AI PaLM API की मदद से, फ़िल्म सक्सेस रेटिंग का अनुमान लगाने वाला और डॉक्टर के पर्चे से मिलने वाला ऐप्लिकेशन तैयार करेंगे. टेक्स्ट जनरेट करने के लिए, टेक्स्ट-बायसन मॉडल इस्तेमाल किया जाता है. इसे BigQuery में रिमोट फ़ंक्शन के तौर पर होस्ट किया जाता है.

यहां इस्तेमाल की जाने वाली सेवाओं की सूची दी गई है:

  1. BigQuery ML
  2. Vertex AI PaLM API
  3. Cloud Shell

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

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

  • मॉडल शामिल करने के लिए BigQuery डेटासेट
  • BigQuery ML मॉडल, जो फ़िल्म की शैली और RUNTIME एट्रिब्यूट के आधार पर, किसी फ़िल्म के सक्सेस स्कोर का अनुमान लगाता है
  • ऐसा BigQuery मॉडल जो Vertex AI PaLM API को रिमोट फ़ंक्शन के तौर पर होस्ट करता है
  • BigQuery और Vertex AI को कनेक्ट करने के लिए एक बाहरी कनेक्शन

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

  • Chrome या Firefox जैसा ब्राउज़र
  • आपके पास ऐसा Google Cloud प्रोजेक्ट होना चाहिए जिसमें बिलिंग की सुविधा चालू हो

शुरू करने से पहले

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें
  3. पक्का करें कि सभी ज़रूरी एपीआई (BigQuery API, Vertex AI API, BigQuery कनेक्शन API) चालू हैं
  4. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला एक कमांड-लाइन एनवायरमेंट है. यह bq के साथ पहले से लोड होता है. gcloud के लिए कमांड और इसके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें

Cloud Console में, सबसे ऊपर दाएं कोने में 'Cloud Shell को चालू करें' पर क्लिक करें:

51622c00acec2fa.png

अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए नीचे दिए गए कमांड का इस्तेमाल करें:

gcloud config set project <YOUR_PROJECT_ID>
  1. अपने ब्राउज़र में यह यूआरएल डालकर, सीधे BigQuery कंसोल पर जाएं: https://console.cloud.google.com/bigquery

3. डेटा तैयार हो रहा है

इस्तेमाल के इस उदाहरण में, हम movielens सोर्स से मिले फ़िल्मों के डेटासेट का इस्तेमाल करेंगे.

  1. डेटासेट बनाना:

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

Cloud Shell में, "movie_Insights" नाम का डेटासेट बनाने के लिए bq mk कमांड का इस्तेमाल करना

bq mk --location=us-central1 movie_insights
  1. सोर्स फ़ाइल को क्लाउड शेल मशीन से क्लोन करें:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. अपनी क्लाउड शेल मशीन में बनाई गई नई प्रोजेक्ट डायरेक्ट्री पर जाएं:
cd movie_score_genai_insights
  1. अपनी CSV फ़ाइल को BigQuery टेबल में लोड करने के लिए, bq लोड कमांड का इस्तेमाल करें (कृपया ध्यान दें कि इसे सीधे BigQuery यूज़र इंटरफ़ेस (यूआई) से भी अपलोड किया जा सकता है):
bq load --source_format=CSV --skip_leading_rows=1 movie_insights.movie_score \
./movies_data.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
  1. किसी सैंपल से क्वेरी की जा सकती है, ताकि यह पता लगाया जा सके कि टेबल Movie_score और डेटा, डेटासेट में बनाए गए हैं या नहीं:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. एमएल के लिए डेटा

शैली और RUNTIME एट्रिब्यूट के आधार पर, फ़िल्म के सक्सेस स्कोर का अनुमान लगाने के लिए, एक क्लासिफ़िकेशन मॉडल बनाएं. हम 'LOGISTIC_REG' विकल्प के साथ CREATE MODEL स्टेटमेंट का इस्तेमाल करेंगे लॉजिस्टिक रिग्रेशन मॉडल बनाने और उसे ट्रेनिंग देने के लिए किया जा सकता है.

BigQuery कंसोल के SQL Workspace QUERY EDITOR सेक्शन में, नीचे दी गई क्वेरी चलाएं:

CREATE OR REPLACE MODEL
  `movie_insights.model_rating_by_runtime_genre`
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 name, genre,runtime, score
FROM
  movie_insights.movie_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 डेटासेट चुना जा सके.
  7. नीचे दिए गए स्ट्रक्चर ज़रूरी नहीं हैं. इसलिए, BigQuery ML को सीधे Vertex AI Model Registry में रजिस्टर किया जा सकता है. इस बारे में ज़्यादा जानने के लिए, यह ब्लॉग पढ़ें. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']

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

2e43087f914aa466.png

मॉडल बनाने के बाद, ML.EVALUATE फ़ंक्शन का इस्तेमाल करके, मॉडल की परफ़ॉर्मेंस का आकलन करें. ML.EVALUATE फ़ंक्शन, असल डेटा के मुकाबले अनुमानित वैल्यू का आकलन करता है.

MODEL पेज से भी अपने मॉडल का इवैलुएशन मेट्रिक देखा जा सकता है:

7f2dc168bac0ac1a.png

एक नज़र में ज़रूरी मेट्रिक:

सटीक - सकारात्मक पहचानों का कितना अनुपात वास्तव में सही था? प्रिसिज़न = सही पॉज़िटिव / (सही पॉज़िटिव + फ़ॉल्स पॉज़िटिव) याद रखें - वास्तविक पॉज़िटिव के कितने अनुपात की सही पहचान की गई थी? रीकॉल = सही पॉज़िटिव / (सही पॉज़िटिव + फ़ॉल्स नेगेटिव) ऐक्यूरसी - क्लासिफ़िकेशन मॉडल के आकलन के लिए यह मेट्रिक, हमारे मॉडल के अनुमानों का सटीक हिस्सा है = सही अनुमानों की संख्या / अनुमानों की कुल संख्या

5. मॉडल का इस्तेमाल करके मूवी स्कोर का अनुमान लगाना

अनुमान का समय!!!! नीचे दी गई क्वेरी, डेटासेट में मौजूद हर उस फ़िल्म के स्कोर का अनुमान लगाती है जिसे "TEST" की कैटगरी में रखा गया है डेटा शामिल है.

BigQuery कंसोल के SQL Workspace QUERY EDITOR सेक्शन में, नीचे दी गई क्वेरी चलाएं:

SELECT
  *
FROM
  ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
    (
    SELECT
      *
    FROM
      movie_insights.movie_score
    WHERE
      data_cat= 'TEST'
     )
  );

नतीजा कुछ ऐसा दिखता है:

c719844860ce7c27.png

मॉडल का नतीजा, 1 से 10 के स्केल पर फ़िल्म का value_score (वर्गीकरण) दिखाता है. आपको यह जानने में दिलचस्पी हो रही होगी कि हर फ़िल्म के लिए कई अनुमान क्यों मौजूद हैं. यह इसलिए ज़रूरी है, क्योंकि मॉडल ने संभावित अनुमानित लेबल दिखाए हैं. साथ ही, हर एक लेबल के घटते क्रम में होने की संभावना भी है.

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

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

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

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

6. जनरेटिव एआई के लिए डेटा

फ़िल्म के डेटासेट के बारे में अहम जानकारी पाने के लिए, एलएलएम (लार्ज लैंग्वेज मॉडल) से पूछें कि फ़िल्म स्कोर पांच से ज़्यादा है. जनरेटिव एआई, सिर्फ़ एसक्यूएल क्वेरी का इस्तेमाल करके Vertex AI के टेक्स्ट-बायसन (नए) मॉडल का इस्तेमाल करता है

  1. इसके लिए, Movie_score टेबल में भी इनपुट का इस्तेमाल किया जाएगा.
  2. BigQuery ML और Vertex सेवाओं को ऐक्सेस करने के लिए, बाहरी कनेक्शन बनाया जाएगा.
  3. BigQuery GENERATE_TEXT बिल्ड का इस्तेमाल, Vertex AI की मदद से रिमोट तरीके से PaLM API को शुरू करने के लिए किया जाएगा.

7. कोई बाहरी कनेक्शन बनाएं

अगर अभी तक BQ Connection API को चालू नहीं किया गया है, तो कनेक्शन कॉन्फ़िगरेशन की जानकारी में जाकर सेवा खाता आईडी को नोट कर लें:

  1. BigQuery एक्सप्लोरर पैनल (BigQuery कंसोल के बाईं ओर) में, +जोड़ें बटन पर क्लिक करें. इसके बाद, "बाहरी डेटा सोर्स से कनेक्शन" पर क्लिक करें लोकप्रिय सोर्स का इस्तेमाल करके,
  2. कनेक्शन टाइप को "BigLake और रिमोट फ़ंक्शन" के तौर पर चुनें. साथ ही, जगह का टाइप "क्षेत्र" के तौर पर दें और "us-central1 (आयोवा)" के तौर पर वैल्यू और "bq_llm_कनेक्शन" कनेक्शन आईडी के तौर पर

8a87802ab0846a6.png

  1. कनेक्शन बनाने के बाद, कनेक्शन के कॉन्फ़िगरेशन की जानकारी से जनरेट किए गए सेवा खाते को नोट करें

अनुमतियां दें

इस चरण में, हम सेवा खाते को Vertex AI की सेवा ऐक्सेस करने की अनुमति देंगे:

IAM खोलें और प्रिंसिपल के तौर पर एक्सटर्नल कनेक्शन बनाने के बाद, कॉपी किए गए सेवा खाते को जोड़ें. इसके बाद, "Vertex AI User" चुनें भूमिका

ff8e1d730879f972.png

8. रिमोट एमएल मॉडल बनाना

ऐसा रिमोट मॉडल बनाएं जो होस्ट किया गया Vertex AI बड़ा लैंग्वेज मॉडल दिखाता हो:

CREATE OR REPLACE MODEL
  movie_insights.llm_model REMOTE
WITH CONNECTION `us-central1.bq_llm_connection` OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

यह movie_insights डेटासेट में, llm_model नाम का मॉडल बनाता है. यह Vertex AI के cloud_AI_LARGE_LANGUAGE_MODEL_V1 एपीआई को रिमोट फ़ंक्शन के तौर पर इस्तेमाल करता है. इस प्रोसेस को पूरा होने में कुछ सेकंड लगेंगे.

9. एमएल मॉडल का इस्तेमाल करके टेक्स्ट जनरेट करना

मॉडल बनाने के बाद, उसका इस्तेमाल टेक्स्ट जनरेट करने, उसकी खास जानकारी देने या उसकी कैटगरी तय करने के लिए करें.

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `movie_insights.llm_model`,
    (
 SELECT
      CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
    FROM (
      SELECT
        REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
      FROM (
        SELECT
          *
        FROM
          `movie_insights.movie_score`
        WHERE
          CAST(SCORE AS INT64) > 5
        LIMIT
          50) ) AS MOVIES
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**ज़्यादा जानकारी:

ml_generate_text_result**, JSON फ़ॉर्मैट में टेक्स्ट जनरेट करने वाले मॉडल से मिलने वाला रिस्पॉन्स है. इसमें कॉन्टेंट और सुरक्षा, दोनों एट्रिब्यूट शामिल होते हैं: a. कॉन्टेंट में, जनरेट किए गए टेक्स्ट के नतीजे b के बारे में बताया गया है. सुरक्षा एट्रिब्यूट की वैल्यू, पहले से मौजूद कॉन्टेंट फ़िल्टर में मौजूद, अडजस्ट किए जा सकने वाले थ्रेशोल्ड के साथ दिखती हैं. यह थ्रेशोल्ड, Vertex AI Pal API में चालू होता है. इससे लार्ज लैंग्वेज मॉडल से अनचाहे या अचानक मिलने वाले जवाबों से बचा जा सकता है. सुरक्षा थ्रेशोल्ड का उल्लंघन करने पर, इस तरह के जवाब को ब्लॉक कर दिया जाता है

ML.GENERATE_TEXT एक ऐसा कंस्ट्रक्ट है जिसका इस्तेमाल BigQuery में, टेक्स्ट जनरेट करने के टास्क करने के लिए, Vertex AI LLM को ऐक्सेस करने के लिए किया जाता है

CONCAT आपके सवाल और डेटाबेस रिकॉर्ड को जोड़ता है

movie_insights डेटासेट का नाम है और movie_score उस टेबल का नाम है जिसमें वह डेटा है जिसका इस्तेमाल हम प्रॉम्प्ट डिज़ाइन में करेंगे

तापमान एक प्रॉम्प्ट पैरामीटर है, जिसकी मदद से रिस्पॉन्स की रैंडमनेस को कंट्रोल किया जाता है. यह काम के होने के हिसाब से जितना बेहतर होता है, उतना बेहतर होता है

Max_output_tokens में ऐसे शब्दों की संख्या है जिन्हें आपको जवाब में शामिल करना है

क्वेरी का जवाब कुछ ऐसा दिखेगा:

a3691afc0a97e724.png

जैसा कि यहां देखा जा सकता है, जवाब नेस्ट किया हुआ है और फ़ॉर्मैट नहीं किया गया है.

10. क्वेरी के नतीजे को फ़्लैट करें

चलिए, नतीजे को फ़्लैट करते हैं, ताकि हमें क्वेरी में JSON को साफ़ तौर पर डिकोड नहीं करना पड़े:

SELECT
  *
FROM
  ML.GENERATE_TEXT( MODEL movie_insights.llm_model,
    (
    SELECT
      CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
    FROM (
      SELECT
        REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
      FROM (
        SELECT
          *
        FROM
          `movie_insights.movie_score`
        WHERE
          CAST(SCORE AS INT64) > 5
        LIMIT
          50) ) AS MOVIES),
    STRUCT( 0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**ज़्यादा जानकारी:

Flatten_json_Output** से यह बूलियन वैल्यू के बारे में पता चलता है. अगर इसे 'सही' पर सेट किया जाता है, तो JSON के रिस्पॉन्स से निकाला गया ऐसा टेक्स्ट मिलता है जिसे आसानी से समझा जा सकता है.

क्वेरी का जवाब कुछ ऐसा दिखेगा:

1aaa0c514fccab59.png

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

इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते से जुड़े शुल्क से बचने के लिए, Vertex AI एंडपॉइंट पेज पर जाकर, मशीन लर्निंग चरण के तहत बनाए गए Vertex AI एंडपॉइंट को मिटाया जा सकता है.

12. बधाई हो

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