1. परिचय
इस कोडलैब में, हम BigQuery SQL क्वेरी और Vertex AI PaLM API की मदद से, फ़िल्म की सफलता की रेटिंग का अनुमान लगाने और सुझाव देने वाला ऐप्लिकेशन बनाएंगे. टेक्स्ट जनरेट करने के लिए, text-bison मॉडल का इस्तेमाल किया जाता है. इसे BigQuery में रिमोट फ़ंक्शन के तौर पर होस्ट किया जाता है.
इस्तेमाल की गई सेवाओं की सूची यहां दी गई है:
- BigQuery ML
- Vertex AI PaLM API
- Cloud Shell
आपको क्या बनाना है
आपको
- मॉडल को शामिल करने के लिए BigQuery डेटासेट
- BigQuery ML मॉडल, जो किसी फ़िल्म की शैली और अवधि के आधार पर, उसकी सफलता के स्कोर का अनुमान लगाता है
- BigQuery मॉडल, जो Vertex AI PaLM API को रिमोट फ़ंक्शन के तौर पर होस्ट करता है
- BigQuery और Vertex AI के बीच कनेक्शन बनाने के लिए, बाहरी कनेक्शन
2. ज़रूरी शर्तें
शुरू करने से पहले
- Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर जाकर, Google Cloud प्रोजेक्ट चुनें या बनाएं
- पक्का करें कि आपके क्लाउड प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें
- पक्का करें कि सभी ज़रूरी एपीआई (BigQuery API, Vertex AI API, BigQuery Connection API) चालू हों
- आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. इसमें bq पहले से लोड होता है. gcloud कमांड और उनके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें
Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद, Cloud Shell चालू करें पर क्लिक करें:
अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
- अपने ब्राउज़र में यह यूआरएल डालकर, सीधे BigQuery कंसोल पर जाएं: https://console.cloud.google.com/bigquery
3. डेटा तैयार हो रहा है
इस इस्तेमाल के उदाहरण में, हम movielens सोर्स से मिले movies dataset का इस्तेमाल करेंगे.
- डेटासेट बनाएं:
BigQuery डेटासेट, टेबल का कलेक्शन होता है. डेटासेट की सभी टेबल, एक ही डेटा location में सेव की जाती हैं. डेटासेट और उसकी टेबल का ऐक्सेस सीमित करने के लिए, कस्टम ऐक्सेस कंट्रोल भी अटैच किए जा सकते हैं.
Cloud Shell में, bq mk कमांड का इस्तेमाल करके "movie_insights" नाम का डेटासेट बनाएं
bq mk --location=us-central1 movie_insights
- सोर्स फ़ाइल को अपनी Cloud Shell मशीन पर क्लोन करें:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
- Cloud Shell मशीन में बनाई गई नई प्रोजेक्ट डायरेक्ट्री पर जाएं:
cd movie_score_genai_insights
- bq लोड कमांड का इस्तेमाल करके, अपनी CSV फ़ाइल को BigQuery टेबल में लोड करें. कृपया ध्यान दें कि 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
- यह देखने के लिए कि डेटासेट में movie_score टेबल और डेटा बनाया गया है या नहीं, सैंपल के लिए क्वेरी की जा सकती है:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;
4. डेटा को एमएल में
आइए, GENRE और RUNTIME एट्रिब्यूट के आधार पर, फ़िल्म की सफलता के स्कोर का अनुमान लगाने के लिए क्लासिफ़िकेशन मॉडल बनाएं. लॉजिस्टिक रिग्रेशन मॉडल बनाने और उसे ट्रेन करने के लिए, हम ‘LOGISTIC_REG' विकल्प के साथ CREATE MODEL स्टेटमेंट का इस्तेमाल करेंगे.
BigQuery कंसोल के SQL फ़ाइल फ़ोल्डर के 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';
क्वेरी की जानकारी:
- CREATE MODEL स्टेटमेंट, SELECT स्टेटमेंट में मौजूद ट्रेनिंग डेटा का इस्तेमाल करके मॉडल को ट्रेन करता है.
- OPTIONS क्लॉज़, मॉडल टाइप और ट्रेनिंग के विकल्प तय करता है. यहां LOGISTIC_REG विकल्प, लॉजिस्टिक रिग्रेशन मॉडल टाइप के बारे में बताता है. बाइनरी लॉजिस्टिक रिग्रेशन मॉडल और मल्टीक्लास लॉजिस्टिक रिग्रेशन मॉडल में से किसी एक को चुनना ज़रूरी नहीं है: BigQuery ML, लेबल कॉलम में मौजूद यूनीक वैल्यू की संख्या के आधार पर यह तय कर सकता है कि किस मॉडल को ट्रेन करना है.
- data_split_method=‘NO_SPLIT' विकल्प का इस्तेमाल करने पर, BQML को क्वेरी की शर्तों (data_cat = ‘TRAIN') के हिसाब से डेटा को ट्रेन करने के लिए मजबूर किया जाता है. यह भी ध्यान दें कि इस विकल्प में ‘AUTO_SPLIT' का इस्तेमाल करना बेहतर होता है, ताकि फ़्रेमवर्क (या इस मामले में सेवा) को ट्रेन/टेस्ट स्प्लिट के बंटवारे को रैंडमाइज़ करने की अनुमति दी जा सके.
- input_label_cols विकल्प यह तय करता है कि SELECT स्टेटमेंट में किस कॉलम को लेबल कॉलम के तौर पर इस्तेमाल किया जाए. यहां, लेबल कॉलम स्कोर है. इसलिए, मॉडल यह पता लगाएगा कि हर लाइन में मौजूद अन्य वैल्यू के आधार पर, स्कोर की 10 वैल्यू में से कौनसी वैल्यू सबसे ज़्यादा संभावित है.
- ‘auto_class_weights=TRUE' विकल्प, ट्रेनिंग डेटा में क्लास के लेबल को बैलेंस करता है. डिफ़ॉल्ट रूप से, ट्रेनिंग डेटा को कोई वेट नहीं दिया जाता है. अगर ट्रेनिंग डेटा में लेबल का बैलेंस सही नहीं है, तो मॉडल, लेबल की सबसे लोकप्रिय क्लास का अनुमान ज़्यादा सटीक तरीके से लगा सकता है.
- SELECT स्टेटमेंट, उस टेबल को क्वेरी करता है जिसे हमने CSV डेटा के साथ लोड किया था. WHERE क्लॉज़, इनपुट टेबल में मौजूद लाइनों को फ़िल्टर करता है, ताकि इस चरण में सिर्फ़ TRAIN डेटासेट चुना जा सके.
- यहां दिए गए कंस्ट्रक्ट वैकल्पिक हैं, ताकि BigQuery ML इसे Vertex AI Model Registry में साफ़ तौर पर रजिस्टर कर सके. इस बारे में ज़्यादा जानने के लिए, यह ब्लॉग पढ़ें
. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']
बन जाने के बाद, BigQuery SQL वर्कस्पेस के स्कीमा सेक्शन में यह दिखता है:

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

मुख्य मेट्रिक एक नज़र में:
सटीकता - पॉज़िटिव आइडेंटिफ़िकेशन का कितना हिस्सा सही था? सटीकता = ट्रू पॉज़िटिव / (ट्रू पॉज़िटिव + फ़ॉल्स पॉज़िटिव) रिकॉल - असल पॉज़िटिव का कितना हिस्सा सही तरीके से पहचाना गया? रिकॉल = सही पॉज़िटिव / (सही पॉज़िटिव + गलत नेगेटिव) सटीक अनुमान - यह क्लासिफ़िकेशन मॉडल का आकलन करने वाली मेट्रिक है. यह उन अनुमानों का फ़्रैक्शन है जो हमारे मॉडल ने सही तरीके से लगाए हैं सटीक अनुमान = सही अनुमानों की संख्या / अनुमानों की कुल संख्या
5. मॉडल का इस्तेमाल करके, मूवी के स्कोर का अनुमान लगाना
अनुमान लगाने का समय!!!! नीचे दी गई क्वेरी, डेटासेट में मौजूद हर उस फ़िल्म के स्कोर का अनुमान लगाती है जिसे "TEST" डेटा के तौर पर कैटगरी में रखा गया है.
BigQuery कंसोल के SQL फ़ाइल फ़ोल्डर के QUERY EDITOR सेक्शन में, नीचे दी गई क्वेरी चलाएं:
SELECT
*
FROM
ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
(
SELECT
*
FROM
movie_insights.movie_score
WHERE
data_cat= 'TEST'
)
);
नतीजा इस तरह दिखता है:

मॉडल के नतीजे में, फ़िल्म का अनुमानित स्कोर दिखाया गया है. यह स्कोर, 1 से 10 के स्केल पर होता है (क्लासिफ़िकेशन). आपको लग रहा होगा कि हर फ़िल्म के लिए, अनुमान लगाने वाली कई लाइनें क्यों हैं. ऐसा इसलिए है, क्योंकि मॉडल ने अनुमानित लेबल और उनके होने की संभावना को घटते क्रम में दिखाया है.
अनुमानित नतीजों और मॉडल का विश्लेषण करें:
नतीजों को समझने के लिए, अनुमान लगाने की सुविधा के साथ विश्लेषण के दो बेहतरीन चरण पूरे किए जा सकते हैं:
- आपका मॉडल अनुमान के ये नतीजे क्यों जनरेट कर रहा है, यह समझने के लिए ML.EXPLAIN_PREDICT फ़ंक्शन का इस्तेमाल किया जा सकता है.
- आम तौर पर, आय के ब्रैकेट का पता लगाने के लिए कौनसी सुविधाएं सबसे अहम हैं, यह जानने के लिए ML.GLOBAL_EXPLAIN फ़ंक्शन का इस्तेमाल किया जा सकता है.
इन चरणों के बारे में ज़्यादा जानने के लिए, दस्तावेज़ पढ़ें.
6. जनरेटिव एआई को डेटा देना
आइए, फ़िल्मों के डेटासेट के बारे में अहम जानकारी देते हैं. इसके लिए, एलएलएम (लार्ज लैंग्वेज मॉडल) से उन फ़ैक्टर के बारे में खास जानकारी मांगते हैं जिनकी वजह से फ़िल्म का स्कोर 5 से ज़्यादा होता है. इसके लिए, जनरेटिव एआई के साथ-साथ, Vertex AI के text-bison (नवीनतम) मॉडल का इस्तेमाल करते हैं. साथ ही, सिर्फ़ SQL क्वेरी का इस्तेमाल करते हैं
- हमने जो movie_score टेबल बनाई है वह इस चरण के लिए भी इनपुट होगी.
- BigQuery ML और Vertex की सेवाओं के बीच ऐक्सेस सेट अप करने के लिए, बाहरी कनेक्शन बनाया जाएगा.
- BigQuery के GENERATE_TEXT कंस्ट्रक्ट का इस्तेमाल, Vertex AI से PaLM API को रिमोट तरीके से चालू करने के लिए किया जाएगा.
7. बाहरी कनेक्शन बनाना
अगर आपने BQ Connection API को पहले से चालू नहीं किया है, तो उसे चालू करें. साथ ही, कनेक्शन कॉन्फ़िगरेशन की जानकारी से सेवा खाते का आईडी नोट करें:
- BigQuery एक्सप्लोरर पैनल (BigQuery कंसोल के बाईं ओर) में, +जोड़ें बटन पर क्लिक करें. इसके बाद, सूची में दिए गए लोकप्रिय सोर्स में "बाहरी डेटा सोर्स से कनेक्शन" पर क्लिक करें
- कनेक्शन टाइप के तौर पर "BigLake और रिमोट फ़ंक्शन" चुनें. जगह के टाइप के तौर पर "रीजन" और वैल्यू के तौर पर "us-central1 (Iowa)" डालें. साथ ही, कनेक्शन आईडी के तौर पर "bq_llm_connection" डालें

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

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 API का इस्तेमाल करता है. इस प्रोसेस को पूरा होने में कुछ सेकंड लगेंगे.
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 Palm API में चालू होता है, ताकि लार्ज लैंग्वेज मॉडल से अनचाहे या अप्रत्याशित जवाब न मिलें. अगर जवाब सुरक्षा थ्रेशोल्ड का उल्लंघन करता है, तो उसे ब्लॉक कर दिया जाता है
ML.GENERATE_TEXT का इस्तेमाल BigQuery में किया जाता है. इससे Vertex AI LLM को ऐक्सेस किया जा सकता है, ताकि टेक्स्ट जनरेट करने से जुड़े टास्क पूरे किए जा सकें
CONCAT आपके PROMPT स्टेटमेंट और डेटाबेस रिकॉर्ड को जोड़ता है
movie_insights, डेटासेट का नाम है. साथ ही, movie_score उस टेबल का नाम है जिसमें वह डेटा मौजूद है जिसका इस्तेमाल हम प्रॉम्प्ट डिज़ाइन में करेंगे
टेंपरेचर, प्रॉम्प्ट का एक पैरामीटर है. इसका इस्तेमाल जवाब में मौजूद रैंडमनेस को कंट्रोल करने के लिए किया जाता है. जवाब में रैंडमनेस कम होने पर, वह ज़्यादा काम का होता है
Max_output_tokens से पता चलता है कि आपको जवाब में कितने शब्द चाहिए
क्वेरी का जवाब ऐसा दिखता है:

जैसा कि आप देख सकते हैं, जवाब नेस्ट किया गया है और इसका फ़ॉर्मैट सही नहीं है.
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 रिस्पॉन्स से निकाले गए टेक्स्ट को आसान भाषा में दिखाता है.
क्वेरी का जवाब ऐसा दिखता है:

11. व्यवस्थित करें
इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, Vertex AI एंडपॉइंट को मिटाया जा सकता है. इसे एमएल चरण के दौरान बनाया गया था. इसके लिए, Vertex AI एंडपॉइंट पेज पर जाएं.
12. बधाई हो
बधाई हो! आपने BQML मॉडल बना लिया है. साथ ही, SQL क्वेरी का इस्तेमाल करके, सिर्फ़ फ़िल्मों के डेटासेट पर Vertex AI API की मदद से एलएलएम आधारित विश्लेषण किया है. उपलब्ध मॉडल के बारे में ज़्यादा जानने के लिए, Vertex AI LLM प्रॉडक्ट का दस्तावेज़ देखें.