BigQuery SQL এবং Vertex AI এর সাথে জেনারেটিভ ইনসাইট

1। পরিচিতি

এই কোডল্যাবে, আমরা BigQuery SQL ক্যোয়ারী এবং Vertex AI PaLM API সহ একটি মুভি সাকসেস রেটিং পূর্বাভাস এবং প্রেসক্রিপশন অ্যাপ তৈরি করব। টেক্সট তৈরি করার জন্য ব্যবহৃত মডেলটি হল টেক্সট-বাইসন এবং এটি BigQuery-এ রিমোট ফাংশন হিসেবে হোস্ট করা হয়।

ব্যবহৃত পরিষেবার তালিকা হল:

  1. BigQuery ML
  2. Vertex AI PaLM API
  3. মেঘের শেল

আপনি কি নির্মাণ করবেন

আপনি তৈরি করবেন

  • মডেল ধারণ করার জন্য একটি BigQuery ডেটাসেট
  • একটি BigQuery ML মডেল যা সিনেমার GENRE এবং RUNTIME বৈশিষ্ট্যের উপর ভিত্তি করে একটি সিনেমার সাফল্যের স্কোরের পূর্বাভাস দেয়
  • একটি BigQuery মডেল যা একটি দূরবর্তী ফাংশন হিসাবে Vertex AI PaLM API হোস্ট করে৷
  • BigQuery এবং Vertex AI-এর মধ্যে সংযোগ স্থাপনের জন্য একটি বাহ্যিক সংযোগ

2. প্রয়োজনীয়তা

তুমি শুরু করার আগে

  1. Google ক্লাউড কনসোলে , প্রকল্প নির্বাচক পৃষ্ঠায়, একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন৷
  2. নিশ্চিত করুন যে আপনার ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে৷ একটি প্রকল্পে বিলিং সক্ষম কিনা তা পরীক্ষা করতে শিখুন
  3. নিশ্চিত করুন যে সমস্ত প্রয়োজনীয় API (BigQuery API, Vertex AI API, BigQuery Connection API) সক্ষম করা আছে
  4. আপনি ক্লাউড শেল ব্যবহার করবেন, Google ক্লাউডে চলমান একটি কমান্ড-লাইন পরিবেশ যা bq এর সাথে প্রি-লোড করা হয়। জিক্লাউড কমান্ড এবং ব্যবহারের জন্য ডকুমেন্টেশন পড়ুন

ক্লাউড কনসোল থেকে, উপরের ডানদিকে কোণায় ক্লাউড শেল সক্রিয় করুন ক্লিক করুন:

51622c00acec2fa.png

যদি আপনার প্রজেক্ট সেট করা না থাকে, তাহলে এটি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

gcloud config set project <YOUR_PROJECT_ID>
  1. আপনার ব্রাউজারে নিম্নলিখিত URLটি প্রবেশ করে সরাসরি BigQuery কনসোলে নেভিগেট করুন: https://console.cloud.google.com/bigquery

3. তথ্য প্রস্তুত করা হচ্ছে

এই ব্যবহারের ক্ষেত্রে, আমরা মুভিলেন্স উৎস থেকে প্রাপ্ত মুভি ডেটাসেট ব্যবহার করব।

  1. একটি ডেটাসেট তৈরি করুন:

একটি BigQuery ডেটাসেট হল টেবিলের একটি সংগ্রহ৷ একটি ডেটাসেটের সমস্ত টেবিল একই ডেটা অবস্থানে সংরক্ষণ করা হয়। আপনি একটি ডেটাসেট এবং এর টেবিলগুলিতে অ্যাক্সেস সীমিত করতে কাস্টম অ্যাক্সেস নিয়ন্ত্রণগুলিও সংযুক্ত করতে পারেন।

ক্লাউড শেলে, "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. একটি BigQuery টেবিলে আপনার CSV ফাইল লোড করতে bq লোড কমান্ড ব্যবহার করুন (দয়া করে মনে রাখবেন যে আপনি BigQuery UI থেকে সরাসরি আপলোড করতে পারেন):
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. টেবিল মুভি_স্কোর এবং ডেটা ডেটাসেটে তৈরি হয়েছে কিনা তা পরীক্ষা করতে আপনি একটি নমুনা জিজ্ঞাসা করতে পারেন:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. ML থেকে ডেটা

চলুন GENRE এবং 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. বিকল্প ধারাটি মডেলের ধরন এবং প্রশিক্ষণের বিকল্পগুলি নির্দিষ্ট করে৷ এখানে, 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 ডেটাসেট নির্বাচন করা হয়।
  7. নিম্নলিখিত নির্মাণগুলি ঐচ্ছিক তাই BigQuery ML এটিকে Vertex AI মডেল রেজিস্ট্রিতে স্পষ্টভাবে নিবন্ধন করতে পারে। আপনি এই ব্লগে এই সম্পর্কে আরো পড়তে পারেন . model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']

একবার তৈরি হয়ে গেলে, নিচেরটি BigQuery SQL ওয়ার্কস্পেসের 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 (শ্রেণীবিন্যাস) স্কেলে চলচ্চিত্রের পূর্বাভাসিত_স্কোর দেখায়। আপনি নিশ্চয়ই ভাবছেন কেন প্রতিটি সিনেমার বিপরীতে বেশ কয়েকটি ভবিষ্যদ্বাণী সারি রয়েছে। এর কারণ হল মডেলটি সম্ভাব্য ভবিষ্যদ্বাণীকৃত লেবেল এবং প্রতিটির হওয়ার সম্ভাবনা হ্রাসকারী ক্রমে ফিরিয়ে দিয়েছে।

পূর্বাভাসিত ফলাফল এবং মডেল বিশ্লেষণ করুন:

ফলাফলগুলি বোঝার জন্য আপনি ভবিষ্যদ্বাণী সহ দুটি দুর্দান্ত বিশ্লেষণ পদক্ষেপ করতে পারেন:

  1. আপনার মডেল কেন এই ভবিষ্যদ্বাণী ফলাফলগুলি তৈরি করছে তা বোঝার জন্য, আপনি ML.EXPLAIN_PREDICT ফাংশন ব্যবহার করতে পারেন৷
  2. সাধারণভাবে আয় বন্ধনী নির্ধারণের জন্য কোন বৈশিষ্ট্যগুলি সবচেয়ে গুরুত্বপূর্ণ তা জানতে, আপনি ML.GLOBAL_EXPLAIN ফাংশনটি ব্যবহার করতে পারেন৷

আপনি ডকুমেন্টেশনে এই পদক্ষেপগুলি সম্পর্কে বিস্তারিত পড়তে পারেন।

6. জেনারেটিভ এআই-এর ডেটা

চলুন LLM (লার্জ ল্যাঙ্গুয়েজ মডেল) কে মুভির স্কোরকে 5-এর বেশি হতে প্রভাবিত করে এমন ফ্যাক্টরগুলির সারাংশ জিজ্ঞাসা করে মুভি ডেটাসেটের অন্তর্দৃষ্টি প্রদান করি, জেনারেটিভ AI শুধুমাত্র sql কোয়েরি ব্যবহার করে Vertex AI-এর টেক্সট-বাইসন (সর্বশেষ) মডেল ব্যবহার করে।

  1. আমরা যে টেবিলটি মুভি_স্কোর তৈরি করেছি তা এই ধাপের জন্যও ইনপুট হবে।
  2. BigQuery ML এবং Vertex পরিষেবাগুলির মধ্যে অ্যাক্সেস স্থাপন করতে বাহ্যিক সংযোগ তৈরি করা হবে৷
  3. BigQuery GENERATE_TEXT কনস্ট্রাক্ট Vertex AI থেকে দূরবর্তীভাবে PaLM API চালু করতে ব্যবহার করা হবে।

7. একটি বাহ্যিক সংযোগ তৈরি করুন৷

BQ সংযোগ API সক্ষম করুন যদি ইতিমধ্যে সম্পন্ন না হয় এবং সংযোগ কনফিগারেশন বিশদ থেকে পরিষেবা অ্যাকাউন্ট আইডি নোট করুন:

  1. BigQuery এক্সপ্লোরার প্যানে (BigQuery কনসোলের বাঁদিকে) +ADD বোতামে ক্লিক করুন এবং তালিকাভুক্ত জনপ্রিয় উত্সগুলিতে "বাহ্যিক ডেটা উত্সের সাথে সংযোগ" এ ক্লিক করুন
  2. "BigLake এবং দূরবর্তী ফাংশন" হিসাবে সংযোগের ধরন নির্বাচন করুন, "অঞ্চল" হিসাবে অবস্থানের প্রকার এবং "us-central1 (Iowa)" হিসাবে মান এবং সংযোগ ID হিসাবে "bq_llm_connection" প্রদান করুন

8a87802ab0846a6.png

  1. সংযোগ তৈরি হয়ে গেলে, সংযোগ কনফিগারেশন বিশদ থেকে তৈরি পরিষেবা অ্যাকাউন্টের একটি নোট নিন

অনুমতি দিন

এই ধাপে আমরা Vertex AI পরিষেবা অ্যাক্সেস করার জন্য পরিষেবা অ্যাকাউন্টকে অনুমতি দেব:

IAM খুলুন এবং প্রিন্সিপাল হিসাবে বাহ্যিক সংযোগ তৈরি করার পরে আপনি যে পরিষেবা অ্যাকাউন্টটি কপি করেছেন সেটি যোগ করুন এবং "Vertex AI ব্যবহারকারী" ভূমিকা নির্বাচন করুন

ff8e1d730879f972.png

8. একটি দূরবর্তী এমএল মডেল তৈরি করুন

রিমোট মডেল তৈরি করুন যা হোস্ট করা ভার্টেক্স এআই বৃহৎ ভাষা মডেলকে উপস্থাপন করে:

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. ML মডেল ব্যবহার করে পাঠ্য তৈরি করুন

মডেলটি তৈরি হয়ে গেলে, পাঠ্য তৈরি, সংক্ষিপ্ত বা শ্রেণিবদ্ধ করতে মডেলটি ব্যবহার করুন।

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 ফরম্যাটে টেক্সট জেনারেশন মডেলের প্রতিক্রিয়া যা কন্টেন্ট এবং নিরাপত্তা বৈশিষ্ট্য উভয়ই ধারণ করে: ক. বিষয়বস্তু উত্পন্ন পাঠ্য ফলাফল প্রতিনিধিত্ব করে খ. সুরক্ষা বৈশিষ্ট্যগুলি একটি সামঞ্জস্যযোগ্য থ্রেশহোল্ড সহ অন্তর্নির্মিত বিষয়বস্তু ফিল্টারকে উপস্থাপন করে যা ভার্টেক্স এআই পাম এপিআই তে সক্ষম করা হয়েছে বৃহৎ ভাষার মডেল থেকে কোনও অনিচ্ছাকৃত বা অপ্রত্যাশিত প্রতিক্রিয়া এড়াতে - যদি এটি সুরক্ষা থ্রেশহোল্ড লঙ্ঘন করে তবে প্রতিক্রিয়াটি অবরুদ্ধ করা হয়

ML.GENERATE_TEXT হল সেই কনস্ট্রাক্ট যা আপনি BigQuery-এ ব্যবহার করেন Vertex AI LLM অ্যাক্সেস করার জন্য টেক্সট তৈরির কাজগুলি সম্পাদন করতে

CONCAT আপনার প্রম্পট স্টেটমেন্ট এবং ডাটাবেস রেকর্ড যুক্ত করে

মুভি_ইনসাইটস হল ডেটাসেটের নাম এবং মুভি_স্কোর হল টেবিলের নাম যেখানে ডেটা রয়েছে যা আমরা প্রম্পট ডিজাইনে ব্যবহার করব

তাপমাত্রা হল প্রতিক্রিয়ার এলোমেলোতা নিয়ন্ত্রণ করার জন্য প্রম্পট প্যারামিটার - প্রাসঙ্গিকতার দিক থেকে কম বেশি ভালো

সর্বাধিক_আউটপুট_টোকেন হল আপনার প্রতিক্রিয়াতে যে সংখ্যাটি শব্দ

প্রশ্নের উত্তর এই মত দেখায়:

a3691afc0a97e724.png

আপনি দেখতে পাচ্ছেন, প্রতিক্রিয়া নেস্টেড এবং বিন্যাসহীন।

10. প্রশ্নের ফলাফল সমতল করুন

আসুন ফলাফলটিকে সমতল করি যাতে আমাদের জেএসওএনকে প্রশ্নে স্পষ্টভাবে ডিকোড করতে না হয়:

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 প্রতিক্রিয়া থেকে নিষ্কাশিত একটি সমতল বোধগম্য পাঠ্য প্রদান করে।

প্রশ্নের উত্তর এই মত দেখায়:

1aa0c514fccab59.png

11. পরিষ্কার করুন

এই পোস্টে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, আপনি Vertex AI এন্ডপয়েন্ট পৃষ্ঠায় নেভিগেট করে ML ধাপের অংশ হিসাবে তৈরি করা Vertex AI এন্ডপয়েন্টটি মুছে ফেলতে পারেন।

12. অভিনন্দন

অভিনন্দন! আপনি সফলভাবে একটি BQML মডেল তৈরি করেছেন এবং শুধুমাত্র SQL-queries ব্যবহার করে আপনার মুভি ডেটাসেটে Vertex AI API ব্যবহার করে LLM ভিত্তিক বিশ্লেষণ করেছেন। উপলব্ধ মডেল সম্পর্কে আরও জানতে Vertex AI LLM পণ্যের ডকুমেন্টেশন দেখুন।