توقع تقييم الأفلام مع BQML باستخدام SQL

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، سننشئ نموذجًا لتوقّع نتيجة الأفلام باستخدام نموذج مخصّص لتكنولوجيا تعلُّم الآلة في BigQuery باستخدام لغة SQL فقط، وسننشر النموذج في VertexAI. سوف تتعلم ما يلي:

  1. كيفية إنشاء مجموعة بيانات BigQuery باستخدام Cloud Shell وتحميل البيانات من ملف
  2. كيفية استخدام BigQuery ML في التعلّم الخاضع للإشراف لإنشاء نموذج توقُّع انحدار متعدد الفئات لتوقّع نتيجة الفيلم بدون ترميز كبير ولكن باستخدام طلبات بحث SQL (لغة الاستعلام البنيوية) فقط

ما الذي ستنشئه

ستقوم بإنشاء

  • مجموعة بيانات BigQuery لتحتوي على مكونات الجدول والنموذج
  • نموذج BigQuery ML للتنبؤ بتقييم الفيلم باستخدام طلبات بحث SQL
  • نشر النموذج في سجلّ نماذج Vertex AI

المتطلبات

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

2. إنشاء مشروعك

  1. في Google Cloud Console، ضمن صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
  3. انتقِل إلى BigQuery لتفعيل واجهة برمجة التطبيقات. يمكنك أيضًا فتح واجهة مستخدم الويب في BigQuery مباشرةً عن طريق إدخال عنوان URL التالي في متصفّحك: https://console.cloud.google.com/bigquery

3- تفعيل Cloud Shell

  1. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud وتكون محمَّلة مسبقًا بـ bq: من Cloud Console، انقر على Activate Cloud Shell في أعلى يسار الشاشة: 6757b2fb50ddcc2d.png
  2. بعد الربط بخدمة Cloud Shell، من المفترض أن يظهر لك أنّه قد تمت مصادقتك وأنّ المشروع معيّن سبق أن تم ضبطه على رقم تعريف مشروعك. شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:
gcloud auth list
  1. شغّل الأمر التالي في Cloud Shell للتأكد من معرفة الأمر gcloud بمشروعك
gcloud config list project
  1. إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <PROJECT_ID>

يمكنك الرجوع إلى المستندات حول أوامر gcloud واستخدامها.

4. جارٍ إعداد بيانات التدريب

وهذه خطوة رئيسية في جميع المشاريع والمنتجات والتطبيقات المتعلّقة بالبيانات والتي تتطلّب الكثير من الخبرة في المجال بالإضافة إلى التكنولوجيا لإعداد مجموعة بيانات مثالية وتجهيزها لمشروع تعلُّم الآلة. لأغراض هذا الدرس التطبيقي، سنستخدم ملف data الذي تم إعداده مسبقًا.

5- إنشاء مجموعة البيانات وتحميلها

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

  1. في Cloud Shell، استخدِم الأمر bq mk لإنشاء مجموعة بيانات تُسمى "movies".
bq mk --location=<<LOCATION>> movies

اضبط الموقع الجغرافي على منطقة (asia-south1).

  1. تأكد من أن ملف البيانات (.csv) جاهز. نفِّذ الأوامر التالية في Cloud Shell لاستنساخ المستودع وانتقِل إلى المشروع:
git clone <<repository link>>

cd movie-score
  1. استخدم أمر 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 تحميل الملفات من Cloud Storage باستخدام معرّفات الموارد المنتظمة (URI) gs://my_bucket/path/to/file. هو مخطط يمكن تحديده في ملف مخطط JSON أو كقائمة مفصولة بفاصلة (أستخدم قائمة مفصولة بفواصل). ممتاز! يتم الآن تحميل بيانات csv لدينا في الجدول movies.movies.

  1. طلب البحث بإحدى الطرق الثلاث:

يمكننا التفاعل مع BigQuery بثلاث طرق، فسنجرب طريقتين مما يلي: أ. واجهة مستخدم الويب في BigQuery، ب. الأمر bq c. واجهة برمجة التطبيقات

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

لقد استخدمت BigQuery Web SQL Workspace لتشغيل الاستعلامات. تظهر مساحة عمل SQL على النحو التالي:

109a0b2c7155e9b3.png

استخدام الأمر 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';

تفاصيل طلب البحث:

  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 فقط في هذه الخطوة

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

التصنيفات

93efd0c1a7883690.png

الميزات

8c539338df1a9652.png

تقييم نموذج الانحدار اللوجستي

بعد إنشاء النموذج، قيِّم أداء النموذج باستخدام الدالة 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 فرعي. تعرض الدالة صفًا واحدًا من الإحصائيات حول النموذج.

b54b0ebd6514a498.png

بما أنك أجريت انحدارًا لوجستيًا، تشتمل النتائج على المقاييس التي تظهر لك في لقطة الشاشة أعلاه، وهي: الدقة والتذكر والدقة ومقياس دقة الاختبار وlog_loss وroc_auc، وهي عناصر بالغة الأهمية في تقييم أداء النموذج. يمكنك أيضًا استدعاء 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'
     )
  )

في ما يلي مقتطف من النتائج:

1efb91967acc1f0c.png

تعرض نتيجة النموذج النتيجة المتوقعة للفيلم على مقياس من 1 إلى 10 (التصنيف). يجب أن تتساءل عن سبب وجود عدة صفوف للتنبؤ مقابل كل فيلم. ويرجع ذلك إلى أنّ النموذج قد عرض التصنيفات المتنبأ بها المحتملة واحتمالية حدوث كل منها بالترتيب التنازلي.

تحليل النتائج المتوقَّعة والنموذج

بالإضافة إلى ذلك، يمكنك إجراء خطوتين لتحليليتين رائعتين كجزء من نتائج التنبؤ:

  1. لفهم سبب إنشاء النموذج لنتائج التوقّع هذه، يمكنك استخدام الدالة ML.EXPLAIN_PREDICT.
  2. لمعرفة الميزات الأهم لتحديد فئة الدخل بشكل عام، يمكنك استخدام الدالة 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 دقيقة، نجحنا في:

  1. إعداد BigQuery كقاعدة بيانات لمشروع الإحصاءات
  2. تم إنشاء نموذج توقّع مخصّص باستخدام أوامر لغة الاستعلامات البنيوية (SQL) لبيانات BigQuery فقط وبدون ترميز آخر.
  3. تم إنشاء نموذج BQ Auto ML باستخدام طلبات بحث SQL فقط.
  4. تم نشر نموذج BQML في سجلّ نماذج Vertex AI.

10. تَنظيم

لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذه المشاركة، يُرجى اتّباع الخطوات التالية:

  1. في وحدة التحكّم في Google Cloud، انتقِل إلى صفحة إدارة الموارد.
  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على "حذف".
  3. في مربّع الحوار، اكتب معرّف المشروع، ثم انقر على "إيقاف التشغيل" لحذف المشروع.

11. تهانينا

تهانينا! لقد نجحت في إنشاء نموذج لتوقّع نتائج الفيلم باستخدام ميزة BQML المخصّصة وAutoML ونشر النموذج في Vertex AI Model Registry، وكل ذلك باستخدام لغة الاستعلامات البنيوية (SQL) فقط.