रिमोट मॉडल की मदद से, BigQuery में फ़िल्म के पोस्टर का विश्लेषण करना

1. परिचय

इस लैब में, आपको रिमोट मॉडल ( Gemini मॉडल) के साथ अनुमान लगाने के लिए, BigQuery Machine Learning का इस्तेमाल करने का तरीका बताया जाएगा. इससे, फ़िल्म के पोस्टर की इमेज का विश्लेषण किया जा सकता है. साथ ही, सीधे तौर पर अपने BigQuery डेटा वेयरहाउस में मौजूद पोस्टरों के आधार पर फ़िल्मों के बारे में खास जानकारी जनरेट की जा सकती है.

3e75cd7cdc8ffcf6.jpeg

ऊपर दी गई इमेज में, मूवी पोस्टर की उन इमेज का सैंपल दिखाया गया है जिनका आपको विश्लेषण करना है.

BigQuery, डेटा का विश्लेषण करने वाला एक प्लैटफ़ॉर्म है, जो पहले से ही पूरी तरह व्यवस्थित है. साथ ही, इसमें एआई का इस्तेमाल किया जा सकता है. इससे आपको अपने डेटा से ज़्यादा से ज़्यादा फ़ायदा पाने में मदद मिलती है. इसे अलग-अलग डेटा प्रोसेसिंग इंजन, फ़ॉर्मैट, और क्लाउड के साथ काम करने के हिसाब से डिज़ाइन किया गया है. इसकी एक मुख्य सुविधा, अनुमान लगाने के लिए BigQuery Machine Learning है. इसकी मदद से, GoogleSQL क्वेरी का इस्तेमाल करके मशीन लर्निंग (एमएल) मॉडल बनाए और चलाए जा सकते हैं.

Gemini, Google के बनाए गए जनरेटिव एआई मॉडल का एक परिवार है. इसे मल्टीमॉडल इस्तेमाल के लिए डिज़ाइन किया गया है.

GoogleSQL क्वेरी का इस्तेमाल करके मशीन लर्निंग मॉडल चलाना

आम तौर पर, बड़े डेटासेट पर एमएल या आर्टिफ़िशियल इंटेलिजेंस (एआई) का इस्तेमाल करने के लिए, प्रोग्रामिंग और एमएल फ़्रेमवर्क की जानकारी होना ज़रूरी है. इससे, हर कंपनी में विशेषज्ञों के एक छोटे ग्रुप को ही समाधान डेवलप करने का मौका मिलता है. अनुमान के लिए BigQuery Machine Learning की मदद से, एसक्यूएल का इस्तेमाल करने वाले लोग मॉडल बनाने के लिए, एसक्यूएल के मौजूदा टूल और कौशल का इस्तेमाल कर सकते हैं. साथ ही, एलएलएम और Cloud AI API से नतीजे जनरेट कर सकते हैं.

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

  • Google Cloud Console के बारे में बुनियादी जानकारी
  • BigQuery का अनुभव होना ज़रूरी है

आपको क्या सीखने को मिलेगा

  • एपीआई इस्तेमाल करने के लिए, अपने एनवायरमेंट और खाते को कॉन्फ़िगर करने का तरीका
  • BigQuery में Cloud Resource कनेक्शन बनाने का तरीका
  • फ़िल्म के पोस्टर की इमेज के लिए, BigQuery में डेटासेट और ऑब्जेक्ट टेबल कैसे बनाएं
  • BigQuery में Gemini के रिमोट मॉडल बनाने का तरीका
  • हर पोस्टर के लिए, फ़िल्म की खास जानकारी देने के लिए Gemini मॉडल को प्रॉम्प्ट करने का तरीका
  • हर पोस्टर में दिखाई गई फ़िल्म के लिए, टेक्स्ट एम्बेडिंग जनरेट करने का तरीका
  • डेटासेट में मौजूद फ़िल्मों से मिलते-जुलते पोस्टर की इमेज का मिलान करने के लिए, BigQuery VECTOR_SEARCH का इस्तेमाल कैसे करें

आपको इन चीज़ों की ज़रूरत होगी

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

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते हैं. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो आपके पास कोई दूसरा रैंडम आईडी जनरेट करने का विकल्प होता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग की सुविधा चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को शट डाउन करें. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मुफ़्त में आज़माने का प्रोग्राम मिलता है.

Cloud Shell शुरू करें

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में, सबसे ऊपर दाएं कोने में मौजूद टूलबार पर, Cloud Shell आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगते हैं. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में मौजूद सभी टास्क, ब्राउज़र में किए जा सकते हैं. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

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

BigQuery में Gemini मॉडल का इस्तेमाल करने के लिए, सेटअप से जुड़े कुछ चरण पूरे करने होते हैं. इनमें एपीआई चालू करना, Cloud संसाधन कनेक्शन बनाना, और Cloud संसाधन कनेक्शन के लिए सेवा खाते को कुछ अनुमतियां देना शामिल है. ये चरण हर प्रोजेक्ट के लिए एक बार पूरे करने होते हैं. इनके बारे में अगले कुछ सेक्शन में बताया जाएगा.

एपीआई चालू करना

Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो:

gcloud config set project [YOUR-PROJECT-ID]

एनवायरमेंट वैरिएबल PROJECT_ID सेट करें:

PROJECT_ID=$(gcloud config get-value project)

Vertex AI मॉडल के लिए, डिफ़ॉल्ट क्षेत्र कॉन्फ़िगर करें. Vertex AI की सुविधा देने वाले देशों/इलाकों के बारे में ज़्यादा जानें. इस उदाहरण में, हम us-central1 क्षेत्र का इस्तेमाल कर रहे हैं.

gcloud config set compute/region us-central1

एनवायरमेंट वैरिएबल REGION सेट करें:

REGION=$(gcloud config get-value compute/region)

ज़रूरी सभी सेवाएं चालू करें:

gcloud services enable bigqueryconnection.googleapis.com \
                       aiplatform.googleapis.com

ऊपर दिए गए सभी निर्देश चलाने के बाद, अनुमानित आउटपुट:

student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417
Updated property [core/project].
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable bigqueryconnection.googleapis.com \
                       aiplatform.googleapis.com
Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.

4. क्लाउड संसाधन कनेक्शन बनाना

इस टास्क में, आपको Cloud Resource कनेक्शन बनाना होगा. इससे BigQuery, Cloud Storage में मौजूद इमेज फ़ाइलों को ऐक्सेस कर पाएगा और Vertex AI को कॉल कर पाएगा.

  1. Google Cloud Console में, नेविगेशन मेन्यू ( नेविगेशन मेन्यू का आइकॉन) में जाकर BigQuery पर क्लिक करें.

68ddff3628a55957.png

  1. कनेक्शन बनाने के लिए, + जोड़ें पर क्लिक करें. इसके बाद, बाहरी डेटा सोर्स से कनेक्शन पर क्लिक करें.

8b70fdd209f540b6.png

  1. कनेक्शन टाइप की सूची में, Vertex AI रिमोट मॉडल, रिमोट फ़ंक्शन, और BigLake (क्लाउड रिसॉर्स) को चुनें.
  2. कनेक्शन आईडी फ़ील्ड में, अपने कनेक्शन के लिए gemini_conn डालें.
  3. जगह का टाइप के लिए, एक से ज़्यादा इलाके चुनें. इसके बाद, ड्रॉपडाउन से अमेरिका के लिए एक से ज़्यादा इलाके चुनें.
  4. अन्य सेटिंग के लिए डिफ़ॉल्ट वैल्यू का इस्तेमाल करें.

deb25a1dd65ee9dd.png

  1. कनेक्शन बनाएं पर क्लिक करें.
  2. कनेक्शन पर जाएं पर क्लिक करें.
  3. 'कनेक्शन की जानकारी' पैनल में, सेवा खाते के आईडी को टेक्स्ट फ़ाइल में कॉपी करें, ताकि इसका इस्तेमाल अगले टास्क में किया जा सके. आपको यह भी दिखेगा कि BigQuery एक्सप्लोरर में, आपके प्रोजेक्ट के बाहरी कनेक्शन सेक्शन में कनेक्शन जोड़ दिया गया है.

5. कनेक्शन के सेवा खाते को IAM अनुमतियां देना

इस टास्क में, Cloud Resource Connection के सेवा खाते को आईएएम की अनुमतियां दी जाती हैं. इसके लिए, भूमिका का इस्तेमाल किया जाता है, ताकि वह Vertex AI की सेवाओं को ऐक्सेस कर सके.

  1. Google Cloud Console में, नेविगेशन मेन्यू पर जाकर, आईएएम और एडमिन पर क्लिक करें.
  2. ऐक्सेस दें पर क्लिक करें.
  3. नए प्रिंसिपल फ़ील्ड में, सेवा खाते का वह आईडी डालें जिसे आपने पहले कॉपी किया था.
  4. 'भूमिका चुनें' फ़ील्ड में, Vertex AI डालें. इसके बाद, Vertex AI उपयोगकर्ता की भूमिका चुनें.

55ed0ac6cd92aa1e.png

  1. सेव करें पर क्लिक करें. नतीजे के तौर पर, सेवा खाते के आईडी में अब Vertex AI User की भूमिका शामिल है.

6. फ़िल्म के पोस्टर की इमेज के लिए, BigQuery में डेटासेट और ऑब्जेक्ट टेबल बनाना

इस टास्क में, आपको प्रोजेक्ट के लिए एक डेटासेट और उसमें एक ऑब्जेक्ट टेबल बनानी होगी, ताकि पोस्टर की इमेज सेव की जा सकें.

इस ट्यूटोरियल में इस्तेमाल की गई फ़िल्म के पोस्टर की इमेज का डेटासेट, सार्वजनिक Google Cloud Storage बकेट में सेव किया जाता है: gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters

डेटासेट बनाना

इस ट्यूटोरियल में इस्तेमाल किए गए डेटाबेस ऑब्जेक्ट, जैसे कि टेबल और मॉडल को सेव करने के लिए, आपको डेटासेट बनाना होगा.

  1. Google Cloud Console में, नेविगेशन मेन्यू ( नेविगेशन मेन्यू का आइकॉन) को चुनें. इसके बाद, BigQuery को चुनें.
  2. एक्सप्लोरर पैनल में, अपने प्रोजेक्ट के नाम के बगल में मौजूद, कार्रवाइयां देखें ( ज़्यादा मेन्यू आइकॉन) को चुनें. इसके बाद, डेटासेट बनाएं को चुनें.
  3. डेटासेट बनाएं पैनल में, यह जानकारी डालें:
  • डेटासेट आईडी: gemini_demo
  • जगह का टाइप: एक से ज़्यादा क्षेत्र चुनें
  • एक से ज़्यादा क्षेत्र: अमेरिका को चुनें
  1. अन्य फ़ील्ड को डिफ़ॉल्ट पर रहने दें.

9a787006017d5b47.png

  1. डेटासेट बनाएं पर क्लिक करें.

इसके बाद, gemini_demo डेटासेट बन जाता है और BigQuery Explorer में आपके प्रोजेक्ट के नीचे दिखता है.

ऑब्जेक्ट टेबल बनाना

BigQuery में सिर्फ़ स्ट्रक्चर्ड डेटा नहीं होता. यह ऑब्जेक्ट टेबल के ज़रिए अनस्ट्रक्चर्ड डेटा (जैसे, पोस्टर इमेज) को भी ऐक्सेस कर सकता है.

Cloud Storage बकेट की ओर पॉइंट करके, ऑब्जेक्ट टेबल बनाई जाती है. इससे बनने वाली ऑब्जेक्ट टेबल में, बकेट के हर ऑब्जेक्ट के लिए एक लाइन होती है. इसमें ऑब्जेक्ट का स्टोरेज पाथ और मेटाडेटा होता है.

ऑब्जेक्ट टेबल बनाने के लिए, एसक्यूएल क्वेरी का इस्तेमाल किया जाएगा.

  1. नई एसक्यूएल क्वेरी बनाएं के लिए, + पर क्लिक करें.
  2. क्वेरी एडिटर में, नीचे दी गई क्वेरी चिपकाएं.
CREATE OR REPLACE EXTERNAL TABLE
  `gemini_demo.movie_posters`
WITH CONNECTION `us.gemini_conn`
OPTIONS (
  object_metadata = 'SIMPLE',
  uris = ['gs://cloud-samples-data/vertex-ai/dataset-management/datasets/classic-movie-posters/*']
  );
  1. क्वेरी चलाएं. इसके बाद, movie_posters ऑब्जेक्ट टेबल को gemini_demo डेटासेट में जोड़ दिया जाता है. साथ ही, हर फ़िल्म के पोस्टर की इमेज के URI (Cloud Storage की जगह) को लोड कर दिया जाता है.
  2. एक्सप्लोरर में, movie_posters पर क्लिक करें और स्कीमा और जानकारी की समीक्षा करें. किसी खास रिकॉर्ड की समीक्षा करने के लिए, टेबल में क्वेरी करें.

7. BigQuery में Gemini रिमोट मॉडल बनाना

ऑब्जेक्ट टेबल बन गई है. अब इस पर काम किया जा सकता है. इस टास्क में, BigQuery में Gemini 1.5 Flash को उपलब्ध कराने के लिए, एक रिमोट मॉडल बनाया जाएगा.

Gemini 1.5 Flash का रिमोट मॉडल बनाना

  1. नई एसक्यूएल क्वेरी बनाएं के लिए, + पर क्लिक करें.
  2. क्वेरी एडिटर में, यहां दी गई क्वेरी चिपकाएं और उसे रन करें.
CREATE OR REPLACE MODEL `gemini_demo.gemini_1_5_flash`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'gemini-1.5-flash')

इसके बाद, gemini_1_5_flash मॉडल बन जाता है और आपको यह मॉडल सेक्शन में, gemini_demo डेटासेट में जोड़ा हुआ दिखता है.

  1. एक्सप्लोरर में, gemini_1_5_flash मॉडल पर क्लिक करें और जानकारी देखें.

8. Gemini मॉडल को हर पोस्टर के लिए फ़िल्म की खास जानकारी देने का प्रॉम्प्ट देना

इस टास्क में, आपको अभी-अभी बनाए गए Gemini रिमोट मॉडल का इस्तेमाल करना होगा. इससे फ़िल्म के पोस्टर की इमेज का विश्लेषण किया जा सकेगा. साथ ही, हर फ़िल्म के लिए खास जानकारी जनरेट की जा सकेगी.

पैरामीटर में मॉडल को रेफ़रंस करके, ML.GENERATE_TEXT फ़ंक्शन का इस्तेमाल करके मॉडल को अनुरोध भेजे जा सकते हैं.

Gemini 1.5 Flash मॉडल की मदद से इमेज का विश्लेषण करना

  1. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
CREATE OR REPLACE TABLE
`gemini_demo.movie_posters_results` AS (
SELECT
    uri,
    ml_generate_text_llm_result
FROM
    ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_1_5_flash`,
    TABLE `gemini_demo.movie_posters`,
    STRUCT( 0.2 AS temperature,
        'For the movie represented by this poster, what is the movie title and year of release? Answer in JSON format with two keys: title, year. title should be string, year should be integer. Do not use JSON decorators.' AS PROMPT,
        TRUE AS FLATTEN_JSON_OUTPUT)));

क्वेरी चलाने पर, BigQuery, ऑब्जेक्ट टेबल की हर लाइन के लिए Gemini मॉडल को प्रॉम्प्ट करता है. इसमें इमेज को तय किए गए स्टैटिक प्रॉम्प्ट के साथ जोड़ा जाता है. इसका नतीजा यह होता है कि movie_posters_results टेबल बन जाती है.

  1. अब नतीजे देखते हैं. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
SELECT * FROM `gemini_demo.movie_posters_results`

नतीजे में, हर मूवी पोस्टर के लिए पंक्तियां दिखती हैं. इनमें URI (मूवी पोस्टर इमेज की Cloud Storage लोकेशन) और JSON फ़ॉर्मैट में नतीजा शामिल होता है. इस नतीजे में, Gemini 1.5 Flash मॉडल से मिली जानकारी के आधार पर, मूवी का टाइटल और रिलीज़ होने का साल शामिल होता है.

अगली क्वेरी का इस्तेमाल करके, इन नतीजों को ज़्यादा आसानी से समझा जा सकता है. इस क्वेरी में एसक्यूएल का इस्तेमाल किया गया है. इससे इन जवाबों से फ़िल्म का टाइटल और रिलीज़ होने का साल, नए कॉलम में डाला जाता है.

  1. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
CREATE OR REPLACE TABLE
  `gemini_demo.movie_posters_results_formatted` AS (
  SELECT
    uri,
    JSON_VALUE(ml_generate_text_llm_result, "$.title") AS title,
    JSON_VALUE(ml_generate_text_llm_result, "$.year") AS year
  FROM
    `gemini_demo.movie_posters_results` results )

इसका नतीजा यह होता है कि movie_posters_result_formatted टेबल बन जाती है.

  1. बनाई गई पंक्तियों को देखने के लिए, नीचे दी गई क्वेरी का इस्तेमाल करके टेबल से क्वेरी की जा सकती है.
SELECT * FROM `gemini_demo.movie_posters_results_formatted`

ध्यान दें कि URI कॉलम के नतीजे पहले जैसे ही हैं. हालांकि, अब हर लाइन के लिए JSON को title और year कॉलम में बदल दिया गया है.

Gemini 1.5 Flash मॉडल को फ़िल्मों की खास जानकारी देने के लिए प्रॉम्प्ट करना

अगर आपको इन फ़िल्मों के बारे में थोड़ी और जानकारी चाहिए, तो क्या होगा? जैसे, हर फ़िल्म के बारे में टेक्स्ट में जानकारी. कॉन्टेंट जनरेट करने के इस इस्तेमाल के उदाहरण के लिए, Gemini 1.5 Flash मॉडल जैसे एलएलएम मॉडल सबसे सही हैं.

  1. नीचे दी गई क्वेरी चलाकर, हर पोस्टर के लिए फ़िल्म की खास जानकारी पाने के लिए, Gemini 1.5 Flash का इस्तेमाल किया जा सकता है:
SELECT
  uri,
  title,
  year,
  prompt,
  ml_generate_text_llm_result
  FROM
 ML.GENERATE_TEXT( MODEL `gemini_demo.gemini_1_5_flash`,
   (
   SELECT
     CONCAT('Provide a short summary of movie titled ',title, ' from the year ',year,'.') AS prompt,
     uri,
     title,
     year
   FROM
     `gemini_demo.movie_posters_results_formatted`
   LIMIT
     20 ),
   STRUCT(0.2 AS temperature,
     TRUE AS FLATTEN_JSON_OUTPUT));     

नतीजों के ml_generate_text_llm_result फ़ील्ड पर ध्यान दें. इसमें फ़िल्म के बारे में खास जानकारी शामिल होती है.

9. रिमोट मॉडल का इस्तेमाल करके टेक्स्ट एम्बेडिंग जनरेट करना

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

डेटा जोड़ने के लिए, आपको एक कुंजी की ज़रूरत होगी. इस मामले में, ऐसा हो सकता है कि Gemini मॉडल से जनरेट किए गए फ़िल्म के टाइटल, IMDB डेटासेट में मौजूद टाइटल से पूरी तरह मेल न खाएं.

इस टास्क में, आपको दोनों डेटासेट से फ़िल्मों के टाइटल और रिलीज़ होने के साल के टेक्स्ट एम्बेडिंग जनरेट करने होंगे. इसके बाद, इन एम्बेडिंग के बीच की दूरी का इस्तेमाल करके, सबसे मिलते-जुलते IMDB टाइटल को अपने नए बनाए गए डेटासेट में मौजूद फ़िल्म के पोस्टर के टाइटल से जोड़ना होगा.

रिमोट मॉडल बनाना

टेक्स्ट एम्बेडिंग जनरेट करने के लिए, आपको एक नया रिमोट मॉडल बनाना होगा. यह मॉडल, text-multilingual-embedding-002 एंडपॉइंट पर पॉइंट करेगा.

  1. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
CREATE OR REPLACE MODEL `gemini_demo.text_embedding`
REMOTE WITH CONNECTION `us.gemini_conn`
OPTIONS (endpoint = 'text-multilingual-embedding-002')

इसके बाद, text_embedding मॉडल बन जाता है और एक्सप्लोरर में gemini_demo डेटासेट के नीचे दिखता है.

पोस्टर से जुड़े टाइटल और साल के लिए टेक्स्ट एम्बेडिंग जनरेट करना

अब आपको इस रिमोट मॉडल का इस्तेमाल, ML.GENERATE_EMBEDDING फ़ंक्शन के साथ करना होगा. इससे हर फ़िल्म के पोस्टर के टाइटल और रिलीज़ होने के साल के लिए, एम्बेडिंग बनाई जा सकेगी.

  1. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
CREATE OR REPLACE TABLE
  `gemini_demo.movie_posters_results_embeddings` AS (
  SELECT
    *
  FROM
    ML.GENERATE_EMBEDDING(
    MODEL `gemini_demo.text_embedding`,
    (
    SELECT
      CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
      title,
      year,
      uri
    FROM
      `gemini_demo.movie_posters_results_formatted` ),
    STRUCT(TRUE AS flatten_json_output)));

इसका नतीजा यह होता है कि movie_poster_results_embeddings टेबल बन जाती है. इसमें gemini_demo.movie_posters_results_formatted टेबल की हर लाइन के लिए, टेक्स्ट कॉन्टेंट के एम्बेडिंग होते हैं.

  1. यहां दी गई नई क्वेरी का इस्तेमाल करके, क्वेरी के नतीजे देखे जा सकते हैं:
SELECT * FROM `gemini_demo.movie_posters_results_embeddings`

यहां आपको मॉडल से जनरेट की गई हर फ़िल्म के लिए एम्बेडिंग (नंबर के तौर पर दिखाए गए वेक्टर) दिखती हैं.

IMDB डेटासेट के सबसेट के लिए टेक्स्ट एम्बेडिंग जनरेट करना

आपको सार्वजनिक IMDB डेटासेट से डेटा का एक नया व्यू बनाना होगा. इसमें सिर्फ़ वे फ़िल्में शामिल होंगी जो 1935 से पहले रिलीज़ हुई थीं. यह वह समय अवधि है जब पोस्टर इमेज से फ़िल्मों के बारे में जानकारी मिलती थी.

  1. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
CREATE OR REPLACE VIEW
  `gemini_demo.imdb_movies` AS (
  WITH
    reviews AS (
      SELECT
        reviews.movie_id AS movie_id,
        title.primary_title AS title,
        title.start_year AS year,
        reviews.review AS review
      FROM
        `bigquery-public-data.imdb.reviews` reviews
      LEFT JOIN
        `bigquery-public-data.imdb.title_basics` title
      ON
        reviews.movie_id = title.tconst)
  SELECT
    DISTINCT(movie_id),
    title,
    year
  FROM
    reviews
  WHERE
    year < 1935)

नतीजे के तौर पर, एक नया व्यू मिलता है. इसमें bigquery-public-data.imdb.reviews टेबल में मौजूद उन सभी फ़िल्मों के आईडी, टाइटल, और रिलीज़ होने का साल शामिल होता है जो 1935 से पहले रिलीज़ हुई थीं.

  1. अब आपको IMDB से फ़िल्मों के सबसेट के लिए एम्बेडिंग बनानी होंगी. इसके लिए, पिछले सेक्शन में बताई गई प्रोसेस का इस्तेमाल करें. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
CREATE OR REPLACE TABLE
  `gemini_demo.imdb_movies_embeddings` AS (
  SELECT
    *
  FROM
    ML.GENERATE_EMBEDDING( MODEL `gemini_demo.text_embedding`,
      (
      SELECT
        CONCAT('The movie titled ', title, ' from the year ', year,'.') AS content,
        title,
        year,
        movie_id
      FROM
        `gemini_demo.imdb_movies` ),
      STRUCT(TRUE AS flatten_json_output) )
  WHERE
    ml_generate_embedding_status = '' );

क्वेरी का नतीजा एक टेबल है. इसमें gemini_demo.imdb_movies टेबल के टेक्स्ट कॉन्टेंट के लिए एम्बेडिंग शामिल हैं.

अब VECTOR_SEARCH फ़ंक्शन का इस्तेमाल करके, दोनों टेबल को जोड़ा जा सकता है.

  1. यहां दिए गए एसक्यूएल स्टेटमेंट का इस्तेमाल करके, नई क्वेरी बनाएं और चलाएं:
SELECT
  query.uri AS poster_uri,
  query.title AS poster_title,
  query.year AS poster_year,
  base.title AS imdb_title,
  base.year AS imdb_year,
  base.movie_id AS imdb_movie_id,
  distance
FROM
 VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
   'ml_generate_embedding_result',
   TABLE `gemini_demo.movie_posters_results_embeddings`,
   'ml_generate_embedding_result',
   top_k => 1,
   distance_type => 'COSINE');

क्वेरी में VECTOR_SEARCH फ़ंक्शन का इस्तेमाल किया गया है. इससे gemini_demo.movie_posters_results_embeddings टेबल की हर लाइन के लिए, gemini_demo.imdb_movies_embeddings टेबल में सबसे नज़दीकी पड़ोसी को ढूंढा जा सकता है. सबसे मिलते-जुलते पड़ोसी को कोसाइन दूरी की मेट्रिक का इस्तेमाल करके खोजा जाता है. इससे यह पता चलता है कि दो एम्बेडिंग कितनी मिलती-जुलती हैं.

इस क्वेरी का इस्तेमाल करके, IMDB डेटासेट में मौजूद हर फ़िल्म के लिए, Gemini 1.5 Flash की ओर से फ़िल्म के पोस्टरों में पहचानी गई सबसे मिलती-जुलती फ़िल्म का पता लगाया जा सकता है. उदाहरण के लिए, इस क्वेरी का इस्तेमाल करके, IMDB के सार्वजनिक डेटासेट में "Au Secours!" फ़िल्म के सबसे मिलते-जुलते नतीजे खोजे जा सकते हैं. इस डेटासेट में, इस फ़िल्म का रेफ़रंस अंग्रेज़ी भाषा में दिए गए इसके टाइटल, "Help!" के हिसाब से दिया गया है.

  1. IMDB के पब्लिक डेटासेट में दी गई फ़िल्मों की रेटिंग के बारे में कुछ और जानकारी जोड़ने के लिए, नई क्वेरी बनाएं और उसे चलाएं:
SELECT
  query.uri AS poster_uri,
  query.title AS poster_title,
  query.year AS poster_year,
  base.title AS imdb_title,
  base.year AS imdb_year,
  base.movie_id AS imdb_movie_id,
  distance,
  imdb.average_rating,
  imdb.num_votes
FROM
  VECTOR_SEARCH( TABLE `gemini_demo.imdb_movies_embeddings`,
    'ml_generate_embedding_result',
    TABLE `gemini_demo.movie_posters_results_embeddings`,
    'ml_generate_embedding_result',
    top_k => 1,
    distance_type => 'COSINE') DATA
LEFT JOIN
  `bigquery-public-data.imdb.title_ratings` imdb
ON
  base.movie_id = imdb.tconst
ORDER BY
  imdb.average_rating DESC

यह क्वेरी, पिछली क्वेरी से मिलती-जुलती है. यह अब भी वेक्टर एम्बेडिंग नाम के खास संख्यात्मक प्रजेंटेशन का इस्तेमाल करता है. इससे, किसी फ़िल्म के पोस्टर से मिलती-जुलती फ़िल्में खोजी जा सकती हैं. हालांकि, यह IMDB के सार्वजनिक डेटासेट से अलग टेबल में मौजूद, सबसे मिलती-जुलती हर फ़िल्म के लिए औसत रेटिंग और वोटों की संख्या को भी जोड़ता है.

10. बधाई हो

कोड लैब पूरा करने के लिए बधाई. आपने BigQuery में, पोस्टर इमेज के लिए ऑब्जेक्ट टेबल बना ली है. साथ ही, रिमोट Gemini मॉडल बना लिया है. आपने Gemini मॉडल को इमेज का विश्लेषण करने और फ़िल्म की खास जानकारी देने के लिए, मॉडल का इस्तेमाल किया है. आपने फ़िल्म के टाइटल के लिए टेक्स्ट एम्बेडिंग जनरेट की हैं. साथ ही, उन एम्बेडिंग का इस्तेमाल करके, IMDB डेटासेट में फ़िल्म के पोस्टर की इमेज को उससे जुड़े फ़िल्म के टाइटल से मैच किया है.

हमने क्या-क्या बताया

  • एपीआई इस्तेमाल करने के लिए, अपने एनवायरमेंट और खाते को कॉन्फ़िगर करने का तरीका
  • BigQuery में Cloud Resource कनेक्शन बनाने का तरीका
  • फ़िल्म के पोस्टर की इमेज के लिए, BigQuery में डेटासेट और ऑब्जेक्ट टेबल कैसे बनाएं
  • BigQuery में Gemini के रिमोट मॉडल बनाने का तरीका
  • हर पोस्टर के लिए, फ़िल्म की खास जानकारी देने के लिए Gemini मॉडल को प्रॉम्प्ट करने का तरीका
  • हर पोस्टर में दिखाई गई फ़िल्म के लिए, टेक्स्ट एम्बेडिंग जनरेट करने का तरीका
  • डेटासेट में मौजूद फ़िल्मों से मिलते-जुलते पोस्टर की इमेज का मिलान करने के लिए, BigQuery VECTOR_SEARCH का इस्तेमाल कैसे करें

अगले चरण / ज़्यादा जानें

11. सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें