1. مقدمة
في هذا الدرس التطبيقي حول الترميز، سننشئ تطبيقًا لتوقُّع تقييم نجاح الأفلام واقتراحها باستخدام طلبات BigQuery SQL وVertex AI PaLM API. النموذج المستخدَم لإنشاء النصوص هو text-bison، ويتم استضافته كدالة عن بُعد في BigQuery.
قائمة الخدمات المستخدَمة هي:
- BigQuery ML
- Vertex AI PaLM API
- Cloud Shell
ما ستنشئه
عليك إنشاء
- مجموعة بيانات في BigQuery لاحتواء النموذج
- نموذج BigQuery ML يتوقّع نتيجة نجاح فيلم استنادًا إلى سمات GENRE وRUNTIME الخاصة بالفيلم
- نموذج 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 مباشرةً من خلال إدخال عنوان URL التالي في المتصفّح: https://console.cloud.google.com/bigquery
3- يتم تجهيز البيانات.
في حالة الاستخدام هذه، سنستخدم مجموعة بيانات الأفلام المستمدّة من مصدر movielens.
- إنشاء مجموعة بيانات:
مجموعة بيانات BigQuery هي مجموعة من الجداول. يتم تخزين جميع الجداول في مجموعة البيانات في الموقع الجغرافي نفسه. يمكنك أيضًا إرفاق عناصر تحكّم مخصّصة في الوصول للحدّ من الوصول إلى مجموعة بيانات وجداولها.
في 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 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
- يمكنك طلب عيّنة للتحقّق مما إذا كان الجدول 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" في وحدة تحكّم 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';
تفاصيل طلب البحث:
- تعمل عبارة CREATE MODEL على تدريب نموذج باستخدام بيانات التدريب في عبارة SELECT.
- تحدّد عبارة OPTIONS نوع النموذج وخيارات التدريب. في هذا المثال، يحدّد الخيار LOGISTIC_REG نوع نموذج الانحدار اللوجستي. ليس من الضروري تحديد نموذج انحدار لوجستي ثنائي مقابل نموذج انحدار لوجستي متعدد الفئات: يمكن لـ BigQuery ML تحديد النموذج الذي سيتم تدريبه استنادًا إلى عدد القيم الفريدة في عمود التصنيف.
- يفرض الخيار data_split_method=‘NO_SPLIT' على BQML التدريب على البيانات وفقًا لشروط طلب البحث (data_cat = ‘TRAIN'). يُرجى أيضًا العِلم أنّه من الأفضل استخدام الخيار AUTO_SPLIT في هذه الحالة للسماح للإطار (أو الخدمة في هذه الحالة) بترتيب أقسام بيانات التدريب/الاختبار بشكل عشوائي.
- يحدّد الخيار input_label_cols العمود الذي سيتم استخدامه كعمود تصنيف في عبارة SELECT. في هذا المثال، عمود التصنيف هو "النتيجة"، لذا سيتعلّم النموذج أيّ من القيم العشر للنتيجة هو الأكثر احتمالاً استنادًا إلى القيم الأخرى المتوفّرة في كل صف.
- يعمل الخيار auto_class_weights=TRUE على موازنة تصنيفات الفئات في بيانات التدريب. تكون بيانات التدريب غير مرجّحة تلقائيًا. إذا كانت التصنيفات في بيانات التدريب غير متوازنة، قد يتعلّم النموذج توقّع فئة التصنيفات الأكثر شيوعًا بشكل أكبر.
- يستعلم بيان SELECT عن الجدول الذي حمّلناه ببيانات CSV. تعمل عبارة WHERE على فلترة الصفوف في جدول الإدخال بحيث يتم اختيار مجموعة بيانات TRAIN فقط في هذه الخطوة.
- تكون البُنى التالية اختيارية، لذا يمكن لـ BigQuery ML تسجيلها بشكلٍ صريح في "سجلّ نماذج Vertex AI". يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع في هذه المدوّنة
. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental'].
بعد الإنشاء، يظهر ما يلي في قسم SCHEMA ضمن مساحة عمل BigQuery SQL:

بعد إنشاء النموذج، يمكنك تقييم أدائه باستخدام الدالة ML.EVALUATE. تقيّم الدالة ML.EVALUATE القيم المتوقّعة مقارنةً بالبيانات الفعلية.
يمكنك أيضًا الاطّلاع على مقاييس تقييم النموذج من صفحة "النموذج":

نظرة سريعة على المقاييس الرئيسية:
الدقة: ما هي نسبة عمليات التعريف الإيجابية التي كانت صحيحة فعلاً؟ الدقة = عدد موجب صائب / (عدد موجب صائب + عدد سالب خاطئ) التذكّر: ما هي نسبة النتائج الموجبة الفعلية التي تم تحديدها بشكل صحيح؟ الاسترجاع = الموجب الصائب / (الموجب الصائب + السالب الخاطئ) الدقة: مقياس لتقييم نماذج التصنيف، وهو جزء من التوقعات التي حققها نموذجنا بالفعل الدقة = عدد التوقعات الصحيحة / إجمالي عدد التوقعات
5- توقُّع نتيجة الفيلم باستخدام النموذج
حان وقت التوقّع!!!! يتوقّع الاستعلام التالي نتيجة كل فيلم في مجموعة البيانات المصنّفة كبيانات "اختبار".
نفِّذ طلب البحث أدناه في قسم "محرّر طلبات البحث" ضمن "مساحة عمل SQL" في وحدة تحكّم BigQuery:
SELECT
*
FROM
ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
(
SELECT
*
FROM
movie_insights.movie_score
WHERE
data_cat= 'TEST'
)
);
تظهر النتيجة على النحو التالي:

تعرض نتيجة النموذج predicted_score للفيلم على مقياس من 1 إلى 10 (تصنيف). قد تتساءل عن سبب وجود عدة صفوف للتوقعات مقابل كل فيلم. ويرجع ذلك إلى أنّ النموذج قد عرض التصنيفات المتوقّعة المحتملة واحتمالية حدوث كل تصنيف بترتيب تنازلي.
تحليل النتائج المتوقّعة والنموذج:
يمكنك اتّخاذ خطوتَين رائعتَين لتحليل التوقّعات من أجل فهم النتائج:
- لمعرفة سبب إنشاء نموذجك لنتائج التوقّعات هذه، يمكنك استخدام الدالة ML.EXPLAIN_PREDICT.
- لمعرفة الميزات الأكثر أهمية لتحديد الفئة الضريبية بشكل عام، يمكنك استخدام الدالة ML.GLOBAL_EXPLAIN.
يمكنك الاطّلاع على هذه الخطوات بالتفصيل في المستندات.
6. البيانات إلى الذكاء الاصطناعي التوليدي
لنقدّم إحصاءات حول مجموعة بيانات الأفلام من خلال الطلب من النموذج اللغوي الكبير (LLM) تقديم ملخّص للعوامل التي تؤثّر في حصول الفيلم على تقييم أعلى من 5، وذلك باستخدام الذكاء الاصطناعي التوليدي من خلال نموذج text-bison (الأحدث) من Vertex AI باستخدام طلبات SQL فقط.
- سيكون الجدول الذي أنشأناه movie_score هو الإدخال لهذه الخطوة أيضًا.
- سيتم إنشاء اتصال خارجي لإنشاء إذن الوصول بين BigQuery ML وخدمات Vertex.
- سيتم استخدام بنية GENERATE_TEXT في BigQuery لاستدعاء PaLM API عن بُعد من Vertex AI.
7. إنشاء اتصال خارجي
فعِّل BQ Connection API إذا لم يسبق لك إجراء ذلك، واحتفِظ بمعرّف حساب الخدمة من تفاصيل إعدادات الربط:
- انقر على الزر "إضافة" (+) في جزء "مستكشف BigQuery" (على يمين وحدة تحكّم BigQuery)، ثمّ انقر على "الربط بمصادر البيانات الخارجية" في المصادر الشائعة المُدرَجة.
- اختَر نوع الاتصال على أنّه "BigLake ووظائف عن بُعد"، وقدِّم نوع الموقع الجغرافي على أنّه "منطقة" والقيمة على أنّها "us-central1 (آيوا)" و "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');
يتم إنشاء نموذج باسم 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 الذي يحتوي على سمات المحتوى والسلامة: أ. يمثّل المحتوى نتيجة النص الذي تم إنشاؤه (ب). تمثّل "سمات الأمان" فلتر المحتوى المضمّن الذي يتضمّن حدًا قابلاً للتعديل ويتم تفعيله في Vertex AI Palm API لتجنُّب أي ردود غير مقصودة أو غير متوقّعة من النموذج اللغوي الكبير، ويتم حظر الردّ إذا كان ينتهك حد الأمان.
ML.GENERATE_TEXT هي البنية التي تستخدمها في BigQuery للوصول إلى النموذج اللغوي الكبير (LLM) من Vertex AI لتنفيذ مهام إنشاء النصوص
تضيف الدالة 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. تهانينا
تهانينا! لقد أنشأت نموذجًا في BigQuery ML وأجريت تحليلات مستندة إلى نموذج لغوي كبير باستخدام Vertex AI API على مجموعة بيانات الأفلام باستخدام طلبات SQL فقط. يمكنك الاطّلاع على مستندات منتج Vertex AI LLM لمعرفة المزيد عن النماذج المتاحة.