1. مقدمة
في هذا الدرس التطبيقي حول الترميز، سننشئ نموذجًا لتوقُّع تقييم الأفلام باستخدام نموذج مخصّص من BigQuery ML باستخدام لغة الاستعلامات البنيوية (SQL) فقط، ثم سننشره في Vertex AI. ستتعرّف على:
- كيفية إنشاء مجموعة بيانات BigQuery باستخدام Cloud Shell وتحميل البيانات من ملف
- كيفية استخدام BigQuery ML للتعلُّم الموجَّه من أجل إنشاء نموذج توقّع الانحدار المتعدد الفئات لتوقّع تقييم الأفلام بدون الحاجة إلى الكثير من الترميز ولكن باستخدام طلبات SQL فقط
ما ستنشئه
ستنشئ
- مجموعة بيانات في BigQuery تحتوي على مكوّنات الجدول والنموذج
- نموذج BigQuery ML لتوقُّع تقييم الفيلم باستخدام طلبات بحث SQL
- تفعيل النموذج في "سجلّ نماذج Vertex AI"
المتطلبات
2. إنشاء مشروعك
- في Google Cloud Console، ضمن صفحة اختيار المشروع، اختَر مشروعًا على Google Cloud أو أنشِئه.
- تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
- انتقِل إلى BigQuery لتفعيل واجهة برمجة التطبيقات. يمكنك أيضًا فتح واجهة مستخدم الويب في BigQuery مباشرةً من خلال إدخال عنوان URL التالي في المتصفح: https://console.cloud.google.com/bigquery
3- تفعيل Cloud Shell
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومحمّلة مسبقًا بأداة bq: من Cloud Console، انقر على "تفعيل Cloud Shell" في أعلى يسار الصفحة:

- بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك. نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك
gcloud config list project
- إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <PROJECT_ID>
راجِع المستندات لمعرفة أوامر gcloud وطريقة استخدامها.
4. إعداد بيانات التدريب
هذه خطوة رئيسية في جميع المشاريع والمنتجات والتطبيقات المرتبطة بالبيانات، وتتطلّب الكثير من الخبرة في المجال بالإضافة إلى التكنولوجيا لإعداد مجموعة بيانات مثالية وتجهيزها لمشروع تعلُّم الآلة. لأغراض هذا الدرس التطبيقي حول الترميز، سنستخدم ملف البيانات الذي تم إعداده مسبقًا.
5- إنشاء مجموعة البيانات وتحميلها
مجموعة بيانات BigQuery هي مجموعة من الجداول. يتم تخزين جميع الجداول في مجموعة البيانات في الموقع الجغرافي نفسه. يمكنك أيضًا إرفاق عناصر تحكّم مخصّصة في الوصول للحدّ من الوصول إلى مجموعة بيانات وجداولها.
- في Cloud Shell، استخدِم الأمر bq mk لإنشاء مجموعة بيانات باسم "movies".
bq mk --location=<<LOCATION>> movies
اضبط الموقع الجغرافي على منطقة (asia-south1).
- تأكَّد من أنّ ملف البيانات (.csv) جاهز. نفِّذ الأوامر التالية في Cloud Shell لاستنساخ المستودع والانتقال إلى المشروع:
git clone <<repository link>>
cd movie-score
- استخدِم الأمر bq load لتحميل ملف CSV إلى جدول BigQuery (يُرجى العِلم أنّه يمكنك أيضًا التحميل مباشرةً من واجهة مستخدم BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.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
وصف الخيارات: –source_format=CSV - يستخدم تنسيق بيانات CSV عند تحليل ملف البيانات. –skip_leading_rows=1: يتخطّى السطر الأول في ملف CSV لأنّه صف عناوين. Movies.movies - يحدّد وسيط الموضع الأول الجدول الذي يجب تحميل البيانات إليه. يحدّد ./movies.csv، وهو وسيطة موضعية ثانية، الملف الذي سيتم تحميله. بالإضافة إلى الملفات المحلية، يمكن للأمر bq load تحميل الملفات من Cloud Storage باستخدام معرّفات الموارد الموحّدة gs://my_bucket/path/to/file. مخطط يمكن تحديده في ملف مخطط JSON أو كقائمة مفصولة بفواصل (استخدمتُ قائمة مفصولة بفواصل) ممتاز! تم الآن تحميل بيانات csv في الجدول movies.movies.
- يمكنك البحث بإحدى الطرق الثلاث التالية:
يمكننا التفاعل مع BigQuery بثلاث طرق، وسنجرّب اثنتين منها: أ. واجهة مستخدم الويب في BigQuery ب. الأمر bq c. واجهة برمجة التطبيقات
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
لقد استخدمتُ مساحة عمل BigQuery Web SQL لتنفيذ طلبات البحث. تبدو "مساحة عمل SQL" على النحو التالي:

باستخدام الأمر bq:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. توقُّع تقييم فيلم على مقياس من 1 إلى 10
تتيح ميزة BigQuery ML التعلّم الموجّه باستخدام نوع نموذج الانحدار اللوجستي. يمكنك استخدام نوع نموذج الانحدار اللوجستي الثنائي للتنبؤ بما إذا كانت القيمة تندرج ضمن إحدى الفئتَين، أو يمكنك استخدام نوع نموذج الانحدار المتعدد الفئات للتنبؤ بما إذا كانت القيمة تندرج ضمن إحدى الفئات المتعددة. وتُعرف هذه المشاكل باسم مشاكل التصنيف، لأنّها تحاول تصنيف البيانات إلى فئتين أو أكثر.
ملاحظة سريعة حول اختيار النموذج: هذا هو الخيار التجريبي للنموذج الذي تم اختياره هنا، استنادًا إلى تقييم النتائج التي صادفتها في عدة نماذج في البداية، ثمّ اخترت LOGISTIC REG في النهاية لإبقاء الأمر بسيطًا والحصول على نتائج أقرب إلى تقييم الفيلم الفعلي من عدة قواعد بيانات. يُرجى العِلم أنّ هذا النموذج يجب اعتباره مجرد مثال لتنفيذ النموذج وليس النموذج المقترَح بالضرورة لحالة الاستخدام هذه. هناك طريقة أخرى لتنفيذ ذلك وهي توقُّع نتيجة الفيلم على أنّها جيدة أو سيئة باستخدام نموذج الانحدار اللوجستي هذا بدلاً من توقُّع التقييم.
اختيار بيانات التدريب
لقد قسّمنا بيانات الأفلام (في ملف CSV) إلى 3 فئات في الجدول باستخدام الحقل "data_cat" الذي يتضمّن إحدى القيم الثلاث: TRAIN وTEST وPREDICT. يُعد تقسيم مجموعة البيانات لأغراض الاختبار والتدريب جانبًا مهمًا في النموذج. إذا كنت بحاجة إلى مزيد من المعلومات حول فهم تقسيم مجموعات البيانات، يمكنك الرجوع إلى المستندات.
إنشاء نموذج الانحدار اللوجستي
يمكننا استخدام عبارة CREATE MODEL مع الخيار LOGISTIC_REG لإنشاء نموذج انحدار لوجستي وتدريبه.
نفِّذ طلب البحث أدناه في "مساحة عمل SQL" ضمن واجهة مستخدم الويب في BigQuery:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_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 فقط في هذه الخطوة.
بعد الإنشاء، يظهر ما يلي في قسم SCHEMA ضمن مساحة عمل BigQuery SQL:
التصنيفات

الميزات

تقييم نموذج الانحدار اللوجستي
بعد إنشاء النموذج، يمكنك تقييم أدائه باستخدام الدالة ML.EVALUATE. تقيّم الدالة ML.EVALUATE القيم المتوقّعة مقارنةً بالبيانات الفعلية. يكون طلب البحث لتقييم النموذج على النحو التالي:
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
تأخذ الدالة ML.EVALUATE النموذج الذي تم تدريبه في الخطوة السابقة وبيانات التقييم التي تم إرجاعها من خلال طلب فرعي SELECT. تعرض الدالة صفًا واحدًا من الإحصاءات حول النموذج.

بما أنّك أجريت انحدارًا لوجستيًا، تتضمّن النتائج المقاييس التي تراها في لقطة الشاشة أعلاه، وهي مقياس صحة النموذج ومقياس المراجعة والدقة وf1-score والخسارة اللوغاريتمية والمساحة تحت منحنى ROC، وكلّها مقاييس مهمة جدًا في تقييم أداء النموذج. يمكنك أيضًا استدعاء ML.EVALUATE بدون تقديم بيانات إدخال. تسترد الدالة ML.EVALUATE مقاييس التقييم التي تم الحصول عليها أثناء التدريب، والتي تستخدم مجموعة بيانات التقييم المحجوزة تلقائيًا.
نظرة سريعة على المقاييس الرئيسية:
الدقة: ما هي نسبة عمليات التعريف الإيجابية التي كانت صحيحة فعلاً؟ الدقة = عدد موجب صائب / (عدد موجب صائب + عدد سالب خاطئ) التذكّر: ما هي نسبة النتائج الموجبة الفعلية التي تم تحديدها بشكل صحيح؟ الاسترجاع = الموجب الصائب / (الموجب الصائب + السالب الخاطئ) الدقة: مقياس لتقييم نماذج التصنيف، وهو جزء من التوقعات التي حققها نموذجنا بالفعل الدقة = عدد التوقعات الصحيحة / إجمالي عدد التوقعات
توقُّع تقييم الفيلم باستخدام ML.PREDICT
يتوقّع الاستعلام التالي نتيجة كل فيلم في جزء PREDICT من مجموعة البيانات.
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
في ما يلي مقتطف من النتائج:

تعرض نتيجة النموذج "النتيجة" المتوقّعة للفيلم على مقياس من 1 إلى 10 (التصنيف). قد تتساءل عن سبب وجود عدة صفوف للتوقعات مقابل كل فيلم. ويرجع ذلك إلى أنّ النموذج قد عرض التصنيفات المتوقّعة المحتملة واحتمالية حدوث كل تصنيف بترتيب تنازلي.
تحليل النتائج المتوقّعة والنموذج
بالإضافة إلى ذلك، يمكنك اتّخاذ خطوتَين رائعتَين للتحليل كجزء من نتائج التوقّع:
- لمعرفة سبب إنشاء نموذجك لنتائج التوقّعات هذه، يمكنك استخدام الدالة ML.EXPLAIN_PREDICT.
- لمعرفة الميزات الأكثر أهمية لتحديد الفئة الضريبية بشكل عام، يمكنك استخدام الدالة ML.GLOBAL_EXPLAIN.
يمكنك الاطّلاع على هذه الخطوات بالتفصيل في المستندات.
7. توقُّع تقييمات الأفلام باستخدام BigQuery AutoML
تكون أداة AutoML مفيدة إذا كنت تريد أن تتيح لخدمة BigQuery إنشاء النموذج نيابةً عنك والاسترخاء إلى أن يتم إنشاء نتائج النموذج. تتوفّر إمكانية AutoML مباشرةً في BQML (model_type=AUTOML_CLASSIFIER أو AutoML_REGRESSOR)، ويسهل استدعاؤها إذا كانت البيانات متوفّرة في BigQuery.
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
بعد إنشاء النموذج، يمكنك تنفيذ خطوات EVALUATE وPREDICT وEXPLAIN_PREDICT كما ذكرنا في نموذج BQML المخصّص. يمكنك الاطّلاع على مزيد من المعلومات عن BigQuery AutoML في المستندات.
8. تفعيل نماذج BQML في سجلّ نماذج Vertex AI بنقرة واحدة
يمكنك الآن الاطّلاع على جميع نماذج تعلُّم الآلة ضمن "سجلّ نماذج Vertex AI"، ما يسهّل على مؤسستك إدارة النماذج ونشرها. ويشمل ذلك النماذج التي تم إنشاؤها باستخدام BigQuery ML وAutoML والنماذج المدرَّبة بشكل مخصّص. وإليك كيفية عمل ذلك:
CREATE OR REPLACE MODEL
`movies.movies_score_model`
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
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
أدرِج الخيار model_registry="vertex_ai" في طلب البحث CREATE MODEL لكي تتمكّن BigQuery ML من اختيار النماذج التي تريد تسجيلها بشكلٍ صريح في سجلّ نماذج Vertex AI. يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع في هذه المدوّنة.
9- ملخّص
في أقل من 30 دقيقة، سننفّذ ما يلي:
- إعداد BigQuery كقاعدة بيانات لمشروع الإحصاءات
- إنشاء نموذج توقّع مخصّص باستخدام لغة الاستعلامات البنيوية (SQL) لبيانات BigQuery فقط بدون أي ترميز آخر
- إنشاء نموذج BQ Auto ML باستخدام طلبات SQL فقط
- تفعيل نموذج BQML في سجلّ نماذج Vertex AI
10. تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذه المشاركة، اتّبِع الخطوات التالية:
- في Google Cloud Console، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على "حذف".
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على "إيقاف" لحذف المشروع.
11. تهانينا
تهانينا! لقد أنشأت بنجاح نموذجًا لتوقُّع تقييمات الأفلام باستخدام BQML المخصّصة وAutoML، ونشرت النموذج في "سجلّ نماذج Vertex AI"، وكل ذلك باستخدام لغة الاستعلامات البنيوية (SQL) فقط.