الإحصاءات التوليدية باستخدام BigQuery SQL وVertex AI

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، سننشئ تطبيقًا لتوقّع تقييم نجاح الأفلام وتطبيق وصفة طبية باستخدام طلبات بحث BigQuery SQL وواجهة برمجة تطبيقات Vertex AI PaLM. النموذج المستخدَم لإنشاء النص هو text-bison وتتم استضافته كدالة عن بُعد في BigQuery.

في ما يلي قائمة بالخدمات المستخدمة:

  1. BigQuery ML
  2. واجهة برمجة تطبيقات Vertex AI PaLM
  3. Cloud Shell

ما الذي ستقوم ببنائه

ستقوم بإنشاء

  • مجموعة بيانات BigQuery لاحتواء النموذج
  • يشير ذلك المصطلح إلى نموذج تعلُّم الآلة في BigQuery الذي يتوقّع نتيجة نجاح فيلم استنادًا إلى سمتَي GENRE وRUNTIME.
  • نموذج من BigQuery يستضيف واجهة Vertex AI PaLM API كدالة عن بُعد
  • يشير هذا المصطلح إلى اتصال خارجي لإنشاء اتصال بين BigQuery وVertex AI.

2. المتطلبات

  • متصفح، مثل Chrome أو Firefox
  • مشروع على Google Cloud تم تفعيل الفوترة فيه

قبل البدء

  1. في Google Cloud Console، ضمن صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. التعرُّف على كيفية التحقّق مما إذا كانت الفوترة مفعّلة في مشروع
  3. تأكَّد من تفعيل جميع واجهات برمجة التطبيقات اللازمة (BigQuery API وVertex AI API وBigQuery Connection API).
  4. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud وتكون محمَّلة مسبقًا بـ bq. يمكنك الرجوع إلى المستندات حول أوامر gcloud واستخدامها.

من Cloud Console، انقر على "تفعيل Cloud Shell" في أعلى يسار الصفحة:

51622c00acec2fa.png

إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:

gcloud config set project <YOUR_PROJECT_ID>
  1. انتقِل إلى وحدة تحكُّم BigQuery مباشرةً من خلال إدخال عنوان URL التالي في متصفّحك: https://console.cloud.google.com/bigquery

3- يتم تجهيز البيانات.

في حالة الاستخدام هذه، سنستخدم مجموعة بيانات الأفلام المستمدة من مصدر movielens.

  1. إنشاء مجموعة بيانات:

مجموعة بيانات BigQuery هي مجموعة من الجداول. يتم تخزين جميع الجداول في مجموعة بيانات في موقع البيانات نفسه. يمكنك أيضًا إرفاق عناصر تحكّم مخصّصة في الوصول لفرض قيود على الوصول إلى مجموعة بيانات وجداولها.

في Cloud Shell، استخدم الأمر bq mk لإنشاء مجموعة بيانات تسمى "movie_insights"

bq mk --location=us-central1 movie_insights
  1. استنساخ الملف المصدر إلى جهاز Cloud Shell:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. انتقِل إلى دليل المشروع الجديد الذي تم إنشاؤه في Cloud Shell Machine:
cd movie_score_genai_insights
  1. استخدم أمر bq load لتحميل ملف 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
  1. يمكنك الاستعلام عن عينة للتحقق مما إذا تم إنشاء الجدول movie_score والبيانات في مجموعة البيانات:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. البيانات إلى تعلُّم الآلة

لننشئ نموذجًا تصنيفيًا للتنبؤ بنتيجة نجاح الفيلم استنادًا إلى السمتين GENRE وRUNTIME. سنستخدم عبارة CREATE MODEL مع الخيار "LOGISTIC_REG" لإنشاء وتدريب أحد نماذج الانحدار اللوجستي.

نفِّذ الطلب أدناه في قسم SQL Workspace QUERY EDITOR في وحدة تحكّم BigQuery:

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 تحديد النموذج الذي يجب تدريبه استنادًا إلى عدد القيم الفريدة في عمود التصنيف.
  3. data_split_method=‘NO_SPLIT&#39; لفرض تدريب BQML على البيانات وفقًا لشروط طلب البحث (data_cat = ‘TRAIN')، لاحظ أيضًا أنه من الأفضل استخدام ‘auto_SPLIT' في هذا الخيار للسماح لإطار العمل (أو الخدمة في هذه الحالة) بترتيب تقسيمات التطبيق/الاختبار عشوائيًا.
  4. يحدد خيار enter_label_cols العمود الذي سيتم استخدامه كعمود التصنيف في جملة SELECT. هنا، عمود التسمية هو النتيجة، وبالتالي سيتعلم النموذج أي من قيم الدرجة العشر التي يرجح أن يستند إلى القيم الأخرى الموجودة في كل صف.
  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'].

بعد الإنشاء، يظهر ما يلي في قسم SCHEMA في BigQuery SQL Workspace:

2e43087f914aa466.png

بعد إنشاء النموذج، قيِّم أداء النموذج باستخدام الدالة ML.EVALUATE. تقيّم الدالة ML.EVALUATE القيم المتوقعة مقابل البيانات الفعلية.

ويمكنك أيضًا عرض مقاييس التقييم لنموذجك من صفحة MODEL:

7f2dc168bac0ac1a.png

نظرة سريعة على المقاييس الرئيسية:

الدقة - ما نسبة التحديدات الإيجابية التي كانت صحيحة بالفعل؟ الدقة = عدد موجب صائب / (عدد موجب صائب + عدد موجب خاطئ) التذكر - ما نسبة النتائج الموجبة الفعلية التي تم تحديدها بشكل صحيح؟ التذكر = عدد موجب صائب / (عدد موجب صائب + عدد سالب خاطئ) الدقة - مقياس لتقييم نماذج التصنيف، وهو جزء من التنبؤات التي حصل نموذجنا عليها فعلاً الدقة = عدد التوقعات الصحيحة / إجمالي عدد التوقعات

5- توقع نتيجة الفيلم باستخدام النموذج

وقت التوقع!! يتنبأ الاستعلام التالي بدرجة كل فيلم في مجموعة البيانات المصنفة على أنها "TEST" البيانات.

نفِّذ الطلب أدناه في قسم SQL Workspace QUERY EDITOR في وحدة تحكّم BigQuery:

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، مع استخدام الذكاء الاصطناعي التوليدي من خلال نموذج نص بيسون (أحدث) Vertex AI مع طلبات بحث SQL (لغة الاستعلام البنيوية) فقط.

  1. سيكون الجدول الذي أنشأناه movie_score هو المدخل لهذه الخطوة أيضًا.
  2. سيتم إنشاء اتصال خارجي لإنشاء الوصول بين خدمتَي BigQuery ML وVertex.
  3. سيتم استخدام بنية BigQuery GENERATE_TEXT لاستدعاء PaLM API عن بُعد من Vertex AI.

7. إنشاء اتصال خارجي

فعِّل واجهة برمجة التطبيقات BQ Connection API إذا لم يسبق لك تفعيلها ودوِّن رقم تعريف حساب الخدمة من تفاصيل إعدادات الاتصال:

  1. انقر فوق الزر "+إضافة" في جزء "مستكشف BigQuery" (على يمين وحدة تحكم BigQuery) وانقر على "الاتصال بمصادر البيانات الخارجية" في المصادر الرائجة المدرَجة في القائمة
  2. اختَر نوع الاتصال باعتباره "BigLake والوظائف عن بُعد"، وأدخِل نوع الموقع الجغرافي على "المنطقة". والقيمة كـ "us-central1 (آيوا)" و"bq_llm_connection" كمعرّف الاتصال

8a87802ab0846a6.png

  1. بعد إنشاء عملية الربط، دوِّن حساب الخدمة الذي تم إنشاؤه من تفاصيل إعدادات الربط.

منح الأذونات

في هذه الخطوة، سنمنح حساب الخدمة أذونات الوصول إلى خدمة Vertex AI:

افتح "إدارة الهوية وإمكانية الوصول" وأضِف حساب الخدمة الذي نسخته بعد إنشاء الاتصال الخارجي كمدير رئيسي، ثم اختَر "مستخدم Vertex AI". الدور

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');

تنشئ الأداة نموذجًا باسم llm_model في مجموعة البيانات movie_insights التي تستفيد من واجهة برمجة التطبيقات CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 في Vertex AI كدالة عن بُعد. سيستغرق إكمال هذه الخطوة عدة ثوانٍ.

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 هو عدد الكلمات التي تريد الردّ عليها.

يبدو رد الاستعلام كما يلي:

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 Endpoint.

12. تهانينا

تهانينا! لقد أنشأت بنجاح نموذج BQML وأجريت إحصاءات مستندة إلى النموذج اللغوي الكبير (LLM) باستخدام Vertex AI API على مجموعة بيانات أفلامك باستخدام طلبات بحث SQL فقط. يمكنك الاطّلاع على مستندات منتجات Vertex AI LLM لمعرفة المزيد من المعلومات حول النماذج المتوفّرة.