1. نظرة عامة
مرحبًا بك في ورشة رموز التحسين في الوقت الفعلي لعمليات الشراء داخل التطبيق على الجهاز. في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية استخدام TensorFlow Lite وFirebase لتدريب نموذج تخصيص مخصّص ونشره في تطبيقك.
يوضّح هذا البرنامج التعليمي كيفية إنشاء نموذج تعلُّم آلي لتخصيص المحتوى، لا سيما النموذج الذي يتوقّع العرض الأمثل لإجراء عملية شراء داخل التطبيق استنادًا إلى الحالة التي يواجهها المستخدم الحالي. هذا مثال على مشكلة "قطاع الطرق السياقي"، وهو نوع مهم من مشاكل تعلُّم الآلة وقابل للتطبيق على نطاق واسع، ويمكنك الاطّلاع على مزيد من المعلومات عنه في هذا الدليل التعليمي.
ما ستتعرّف عليه
- جمع بيانات الإحصاءات من خلال "إحصاءات Firebase"
- معالجة بيانات الإحصاءات مسبقًا باستخدام BigQuery
- تدريب نموذج تعلُّم آلة بسيط لتحسين عمليات الشراء داخل التطبيق على الجهاز
- نشر نماذج TFLite في تكنولوجيا تعلُّم الآلة من Firebase والوصول إليها من تطبيقك
- قياس النماذج المختلفة واختبارها من خلال ميزة "اختبار A/B من Firebase"
- تدريب النماذج الجديدة ونشرها باستخدام أحدث البيانات بمعدل متكرر
المتطلبات
- الإصدار 3.4 من Android Studio والإصدارات الأحدث
- جهاز اختبار أصلي يعمل بنظام التشغيل Android 2.3 أو الإصدارات الأحدث و"خدمات Google Play" 9.8 أو الإصدارات الأحدث، أو جهاز محاكاة يعمل بنظام التشغيل "خدمات Google Play" 9.8 أو الإصدارات الأحدث
- إذا كنت تستخدم جهاز اختبار فعليًا، يجب استخدام كابل اتصال.
- المعرفة الأساسية حول تعلُّم الآلة
كيف ستستخدم هذا الدليل التعليمي؟
ما هو تقييمك لتجربتك في إنشاء تطبيقات Android؟
2- بيان المشكلة
لنفترض أنّك مطوّر ألعاب تريد عرض اقتراحات مخصّصة لعمليات الشراء داخل التطبيق (IAP) في نهاية كل مستوى. يمكنك عرض عدد محدود فقط من خيارات الدفع داخل التطبيق في كل مرة، ولا يمكنك معرفة الخيارات التي ستحقق أفضل إحالة ناجحة. بما أنّ كل مستخدم وكل جلسة مختلفان، كيف يمكننا العثور على عرض IAP الذي يقدّم أعلى مكافأة متوقّعة؟
3- الحصول على الرمز النموذجي
استنسِخ مستودع GitHub من سطر الأوامر.
git clone https://github.com/googlecodelabs/firebase-iap-optimization.git
يحتوي هذا المستودع على ما يلي:
- دفتر ملاحظات Jupyter (.ipynb) لتدريب نموذج التخصيص وتجميعه في نموذج TFLite
- نموذج تطبيق Kotlin يستخدم نموذج TFLite لإجراء توقّعات على الجهاز
4. تشغيل التطبيق باستخدام Firebase
في هذا الدليل التعليمي حول رموز البرامج، سنعمل على تحسين عمليات الشراء داخل التطبيق لتطبيقنا الخيالي المخصّص للألعاب، وهو Flappy Sparky. هذه اللعبة من نوع التمرير الجانبي حيث يتحكّم اللاعب في Sparky ويحاول الطيران بين أعمدة الجدران بدون اصطدامها. في بداية المستوى، يظهر للمستخدم عرض لتطبيق داخل التطبيق يمنحه ميزة مساعدة. سننفّذ فقط جزء تحسين عمليات الشراء داخل التطبيق من التطبيق في هذا الدليل التعليمي حول رموز البرامج.
ستتمكّن من تطبيق ما تتعلمه هنا على تطبيقك المرتبط بمشروع على Firebase. يمكنك بدلاً من ذلك إنشاء مشروع جديد على Firebase لهذا الدليل التعليمي. إذا كنت بحاجة إلى مساعدة في بدء استخدام Firebase، يُرجى الاطّلاع على الأدلة التعليمية حول هذا الموضوع ( Android وiOS).
5- جمع أحداث الإحصاءات في تطبيقك
توفّر أحداث "إحصاءات Google" إحصاءات عن سلوك المستخدِم، ويتم استخدامها لتدريب نموذج الذكاء الاصطناعي. على سبيل المثال، قد يتعلم النموذج أنّه من المرجّح أن يجري المستخدمون الذين يلعبون لفترة أطول عملية شراء داخل التطبيق للحصول على محاولات إضافية. يحتاج نموذج تعلُّم الآلة إلى أحداث الإحصاءات كمدخلات للتعرّف على هذه المعلومات.
تشمل بعض أحداث الإحصاءات التي قد نريد تسجيلها ما يلي:
- مدة لعب المستخدم للّعبة
- المستوى الذي يصل إليه المستخدم
- عدد العملات التي ينفقها المستخدم
- السلع التي يشتريها المستخدم
تنزيل نموذج البيانات (اختياري)
في الخطوات التالية، سنستخدم "إحصاءات Firebase" لتسجيل أحداث الإحصاءات لاستخدامها في النموذج. إذا كانت لديك بيانات إحصاءات تريد استخدامها، انتقِل إلى قسم "تدريب نموذج التحسين" في هذا الدليل التعليمي حول رموز البرامج، ويمكنك اتّباع الخطوات باستخدام نموذج البيانات المتوفّر لدينا.
جمع البيانات باستخدام حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Firebase"
سنستخدم "إحصاءات Firebase" للمساعدة في جمع أحداث الإحصاءات هذه. تسجِّل حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Firebase" تلقائيًا عددًا من الأحداث وخصائص المستخدِمين. ويسمح لك أيضًا بتحديد أحداثك المخصّصة لقياس الأحداث الفريدة لتطبيقك.
تثبيت حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Firebase"
يمكنك بدء استخدام "إحصاءات Firebase" في تطبيقك باتّباع مستندات "البدء باستخدام إحصاءات Google". يتضمّن مستودع firebase-iap-optimization
الذي تمّت نسخه في بداية هذا الدليل التدريبي حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Firebase".
تسجيل الأحداث المخصّصة
بعد إعداد حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Firebase"، يمكننا البدء في تسجيل الأحداث التي نحتاجها لتدريب النموذج.
قبل إجراء ذلك، من المهم ضبط معرّف مستخدم في حدث الإحصاءات، حتى نتمكّن من ربط بيانات الإحصاءات لهذا المستخدم ببياناته الحالية في التطبيق.
MainActivity.kt
firebaseAnalytics.setUserId("player1")
بعد ذلك، يمكننا تسجيل أحداث اللاعبين. لتحسين عمليات الشراء داخل التطبيق، نريد تسجيل كل عرض شراء داخل التطبيق يتم تقديمه للمستخدم وما إذا نقر المستخدم على هذا العرض. سيمنحنا ذلك حدثَي إحصاءات: offer_iap
وoffer_accepted
. سنتتبّع أيضًا مَعلمة offer_id الفريدة لنتمكّن من استخدامها لاحقًا لدمج هذه البيانات لمعرفة ما إذا تم قبول أحد العروض.
MainActivity.kt
predictButton?.setOnClickListener {
predictionResult = iapOptimizer.predict()
firebaseAnalytics.logEvent("offer_iap"){
param("offer_type", predictionResult)
param("offer_id", sessionId)
}
}
acceptButton?.setOnClickListener {
firebaseAnalytics.logEvent("offer_accepted") {
param("offer_type", predictionResult)
param("offer_id", sessionId)
}
}
لمزيد من المعلومات عن تسجيل الأحداث المخصّصة، يُرجى الانتقال إلى مستندات تسجيل الأحداث في "إحصاءات Firebase".
6- معالجة البيانات مسبقًا في BigQuery
في الخطوة الأخيرة، جمعنا أحداثًا حول عرض التطبيقات داخل التطبيق الذي يتم تقديمه للمستخدم وعرض التطبيقات داخل التطبيق الذي ينقر عليه المستخدم. في هذه الخطوة، سنجمع بيانات الأحداث هذه مع بيانات المستخدمين حتى يتمكّن النموذج من التعلّم من صورة كاملة.
لإجراء ذلك، سنحتاج إلى البدء بتصدير أحداث الإحصاءات إلى BigQuery.
ربط مشروعك على Firebase بخدمة BigQuery
لربط مشروع Firebase وتطبيقاته بخدمة BigQuery:
- سجّل الدخول إلى Firebase.
- انقر على
، ثم اختَر Project Settings (إعدادات المشروع).
- في صفحة "إعدادات المشروع"، انقر على علامة التبويب "عمليات الدمج".
- في بطاقة BigQuery، انقر على "ربط" (Link).
(اختياري) تصدير مجموعات Firestore إلى BigQuery
في هذه الخطوة، يتوفّر لك خيار تصدير بيانات مستخدِمين إضافية من Firestore إلى BigQuery لاستخدامها للمساعدة في تدريب النموذج. إذا أردت تخطّي هذه الخطوة في الوقت الحالي، انتقِل إلى قسم "إعداد البيانات في BigQuery" في هذا الدليل التعليمي للترميز، ويمكنك متابعة أحداث "إحصاءات Firebase" التي تم تسجيلها في الخطوة الأخيرة.
قد يكون Firestore هو المكان الذي تخزّن فيه تاريخ اشتراك المستخدمين أو عمليات الشراء التي أجروها داخل التطبيق أو المستويات في اللعبة أو العملات في الرصيد أو أي سمات أخرى قد تكون مفيدة في تدريب النموذج.
لتصدير مجموعات Firestore إلى BigQuery، يمكنك تثبيت إضافة Firestore BigQuery Export. بعد ذلك، يمكنك دمج الجداول في BigQuery لدمج هذه البيانات مع البيانات من "إحصاءات Google" لاستخدامها في نموذج التخصيص وخلال بقية هذا الدليل التعليمي.
إعداد البيانات في BigQuery
في الخطوات القليلة التالية، سنستخدم BigQuery لتحويل بيانات الإحصاءات الأوّلية إلى بيانات قابلة للاستخدام لتدريب النموذج.
لكي يتعرّف النموذج على عرض IAP الذي يجب عرضه استنادًا إلى المستخدم وحالة اللعبة، علينا تنظيم البيانات حول ما يلي:
- المستخدم
- حالة محاكاة تفاصيل اللعبة
- العرض المقدَّم
- ما إذا تم النقر على العرض المقدَّم أم لا
يجب تنظيم كل هذه البيانات في صف واحد في جدول ليتمكّن نموذجنا من معالجتها. لحسن الحظ، تم إعداد BigQuery لمساعدتنا في إجراء ذلك.
تسمح لك خدمة BigQuery بإنشاء "جداول اطّلاع" للحفاظ على طلب البحث منظَّمًا. العرض هو جدول افتراضي يحدِّده استعلام SQL. عند إنشاء عرض، يمكنك إجراء طلب بحث عنه بالطريقة نفسها التي تُجري بها طلب بحث عن جدول. باستخدام هذا الإجراء، يمكننا أولاً تنظيف بيانات الإحصاءات.
لمعرفة ما إذا كان يتم النقر على كل عرض لشراء داخل التطبيق، سنحتاج إلى دمج حدثَي offer_iap
وoffer_accepted
اللذَين سجّلناهما في الخطوة السابقة.
all_offers_joined - عرض BigQuery
SELECT
iap_offers.*,
CASE
WHEN accepted_offers.accepted IS NULL THEN FALSE ELSE TRUE
END
is_clicked,
FROM
`iap-optimization.ml_sample.accepted_offers` AS accepted_offers
RIGHT JOIN
`iap-optimization.ml_sample.iap_offers` AS iap_offers
ON
accepted_offers.offer_id =iap_offers.offer_id;
all_offers_with_user_data - عرض BigQuery
SELECT
offers.is_clicked,
offers.presented_powerup,
offers.last_run_end_reason,
offers.event_timestamp,
users.*
FROM
`iap-optimization.ml_sample.all_offers_joined` AS offers
LEFT JOIN
`iap-optimization.ml_sample.all_users` AS users
ON
users.user_id = offers.user_id;
تصدير مجموعة بيانات BigQuery إلى Google Cloud Storage
أخيرًا، يمكننا تصدير مجموعة بيانات BigQuery إلى GCS حتى نتمكّن من استخدامها في تدريب النماذج.
7. تدريب نموذج التحسين
عيّنات البيانات
استخدِم بياناتك من الخطوة السابقة، "المعالجة المُسبَقة للبيانات في BigQuery"، أو عيّنة البيانات القابلة للتنزيل المقدَّمة هنا لمتابعة بقية هذا الدليل التعليمي.
تعريف المشكلة
قبل بدء تدريب النموذج، لنقضي بعض الوقت في تحديد مشكلة "قطاع الطرق السياقي".
شرح أسلوب "القراصنة السياقيين"
في بداية كل مستوى في Flappy Sparky، يتم عرض عرض لشراء المحتوى داخل التطبيق يمنح المستخدم ميزة إضافية. يمكننا عرض خيار واحد فقط من ميزات الدفع داخل التطبيق في كل مرة، ولا نعرف أيّ منها سيحقّق أفضل إحالة ناجحة. بما أنّ كل مستخدم وكل جلسة مختلفان، كيف يمكننا العثور على عرض IAP الذي يقدّم أعلى مكافأة متوقّعة؟
في هذه الحالة، لنفترض أنّ المكافأة هي 0 إذا لم يقبل المستخدم عرض الشراء داخل التطبيق، وقيمة الشراء داخل التطبيق إذا وافق عليه. لمحاولة زيادة المكافأة إلى أقصى حد، يمكننا استخدام بياناتنا السابقة لتدريب نموذج يتوقّع المكافأة المتوقّعة لكل إجراء يقدّمه المستخدم، والعثور على الإجراء الذي يحقّق أعلى مكافأة.
في ما يلي ما سنستخدمه في التنبؤ:
- الحالة: معلومات عن المستخدم وجلسته الحالية
- الإجراء: عروض الشراء داخل التطبيق التي يمكننا اختيار عرضها
- المكافأة: قيمة عرض الشراء داخل التطبيق
الاستغلال مقابل الاستكشاف
بالنسبة إلى جميع مشاكل "القراصنة المتعدّدين الأسلحة"، يجب أن توازن الخوارزمية بين الاستكشاف (الحصول على المزيد من البيانات لمعرفة الإجراء الذي يحقّق النتيجة المثلى) والاستغلال (استخدام النتيجة المثلى للحصول على أعلى مكافأة).
في نسختنا من المشكلة، سنبسّط ذلك لتدريب النموذج بشكل دوري في السحابة الإلكترونية فقط وإجراء التوقّعات فقط عند استخدام النموذج على جهاز المستخدم (بدلاً من التدريب على جهاز المستخدم أيضًا). للتأكّد من توفّر بيانات تدريب كافية بعد استخدام النموذج، سنحتاج إلى عرض نتائج عشوائية لمستخدمي تطبيقنا في بعض الأحيان (مثلاً %30). تُعرف استراتيجية موازنة الاستكشاف والاستغلال هذه باسم Epsilon-greedy.
تدريب النموذج
يمكنك استخدام النص البرمجي التدريبي (training.ipynb
) المتوفّر مع الدرس التطبيقي حول الترميز للبدء. هدفنا هو تدريب نموذج يتنبّأ بالمكافآت المتوقّعة لكل إجراء في ظلّ حالة معيّنة، ثم نبحث عن الإجراء الذي يمنحنا أعلى مكافآت متوقّعة.
التدريب على مستوى البلد
إنّ أسهل طريقة للبدء في تدريب النموذج الخاص بك هي إنشاء نسخة من دفتر البيانات في نموذج التعليمات البرمجية الخاص بهذا الدليل التعليمي.
لا تحتاج إلى وحدة معالجة رسومات (GPU) لاستخدام هذا الإصدار التجريبي من "محرّر الرموز البرمجية"، ولكن إذا كنت بحاجة إلى جهاز أكثر فعالية لاستكشاف بياناتك الخاصة وتدريب النموذج الخاص بك، يمكنك الحصول على مثيل "دفتر ملاحظات" في "منصّة الذكاء الاصطناعي" لتسريع عملية التدريب.
في النص البرمجي للتدريب المقدَّم، أنشأنا أداة تكرار تنشئ بيانات تدريب من ملفات CSV التي صدّرناها من BigQuery. بعد ذلك، استخدمنا البيانات لبدء تدريب النموذج باستخدام Keras. يمكن العثور على تفاصيل حول كيفية تدريب النموذج في تعليقات دفتر ملاحظات Python.
قياس أداء النموذج
أثناء تدريب النموذج، سنقارنه بوكيل عشوائي يختار عروض التطبيقات داخل التطبيق بشكل عشوائي لمعرفة ما إذا كان نموذجنا يتعلّم فعلاً. يمكن العثور على هذا المنطق ضمن ValidationCallback
.
.
في نهاية عملية التدريب، نستخدم البيانات في test.csv
لاختبار النموذج مرة أخرى. لم يسبق للنموذج الاطّلاع على هذه البيانات، لذا يمكننا التأكّد من أنّ النتيجة ليست ناتجة عن الملاءمة الزائدة. في هذه الحالة، يحقّق النموذج أداءً أفضل بنسبة% 28 من الوكيل العشوائي.
تصدير نموذج TFLite
لدينا الآن نموذج مدرب جاهز للاستخدام، إلا أنّه بتنسيق TensorFlow حاليًا. سنحتاج إلى تصدير النموذج بتنسيق TFLite حتى يمكن تشغيله على الأجهزة الجوّالة.
train.ipynb
converter = tflite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with tf.io.gfile.GFile('iap-optimizer.tflite', 'wb') as f:
f.write(tflite_model)
من هنا، يمكنك تنزيل النموذج وتجميعه مع تطبيقك.
بالنسبة إلى التطبيقات المتوفّرة للاستخدام العام، ننصحك بنشر النموذج في تكنولوجيا تعلُّم الآلة من Firebase وطلب استضافة النموذج من Firebase. ويعود ذلك لسببَين رئيسيَّين:
- يمكننا إبقاء حجم تثبيت التطبيق صغيرًا وتنزيل النموذج فقط عند الحاجة.
- يمكن تعديل النموذج بانتظام وبدورة إصدار مختلفة عن دورة إصدار التطبيق بأكمله.
للتعرّف على كيفية نشر النموذج في تكنولوجيا تعلُّم الآلة من Firebase، يمكنك اتّباع دورة تعلم الترميز إضافة Firebase إلى تطبيق Android المستنِد إلى TFLite. يمكنك نشر التطبيق باستخدام وحدة تحكّم Firebase أو Python API.
8. إجراء التنبؤات على الجهاز
الخطوة التالية هي إجراء توقّعات باستخدام النموذج على الجهاز. يمكنك العثور على مثال لتطبيق يقوم بتنزيل نموذج من تكنولوجيا تعلُّم الآلة من Firebase في مجلد app
من نموذج الرمز البرمجي الذي نزّلته، واستخدامه لإجراء الاستنتاج باستخدام بعض البيانات من جهة العميل.
بما أنّنا طبّقنا بعض المعالجة المُسبَقة أثناء تدريب النموذج، سنحتاج إلى تطبيق المعالجة المُسبَقة نفسها على إدخال النموذج عند التشغيل على الجهاز. وإحدى الطرق البسيطة لإجراء ذلك هي استخدام تنسيق مستقل عن النظام الأساسي واللغة، مثل ملف JSON يحتوي على خريطة لكل ميزة تشير إلى البيانات الوصفية حول كيفية إجراء المعالجة المُسبَقة. يمكنك الاطّلاع على مزيد من التفاصيل حول كيفية إجراء ذلك في مثال التطبيق.
بعد ذلك، نعطي النموذج مدخلات اختبارية على النحو التالي:
IapOptimzer.kt
val testInput = mapOf(
"coins_spent" to 2048f,
"distance_avg" to 1234f,
"device_os" to "ANDROID",
"game_day" to 10f,
"geo_country" to "Canada",
"last_run_end_reason" to "laser"
)
يقترح النموذج أنّ sparky_armor
هو أفضل ميزة متوفّرة في التطبيق لإضافتها من خلال ميزة "الشراء داخل التطبيق" لهذا المستخدم بالتحديد.
قياس دقة النموذج
لقياس دقة نموذجنا، يمكننا ببساطة تتبُّع عروض الشراء داخل التطبيق التي يتوقّعها نموذجنا وما إذا تم النقر عليها باستخدام "إحصاءات Firebase". ويمكنك استخدام ذلك مع اختبار A/B من Firebase لقياس الأداء الفعلي للنموذج. يمكنك أيضًا إجراء اختبارات أ/ب على تكرارات مختلفة من النموذج. يمكنك الاطّلاع على مزيد من المعلومات عن اختبار A/B باستخدام Firebase في مستندات إنشاء تجارب "الإعداد عن بُعد في Firebase" باستخدام ميزة "اختبار A/B".
9. (اختياري): تعديل النموذج بانتظام باستخدام بيانات جديدة
إذا كنت بحاجة إلى تعديل النموذج عند ورود بيانات جديدة، يمكنك إعداد مسار بيانات لإعادة تدريب النموذج بشكل متكرّر. لإجراء ذلك، عليك أولاً التأكّد من توفّر بيانات جديدة لاستخدامها في عملية التدريب باستخدام استراتيجية "الاستغلال الأمثل لعامل الاتّفاق" التي ذكرناها أعلاه. (على سبيل المثال، استخدام نتيجة توقّعات النموذج بنسبة% 70 من الوقت واستخدام النتائج العشوائية بنسبة% 30 من الوقت)
لا يتناول هذا الدليل التعليمي كيفية إعداد مسار تدريب ونشر باستخدام بيانات جديدة، ويمكنك الاطّلاع على Google Cloud AI Platform وTFX للبدء.
10. تهانينا!
في هذا الدرس التطبيقي حول الترميز، تعرّفت على كيفية تدريب نموذج TFLite على الجهاز ونشره لتحسين عمليات الشراء داخل التطبيق باستخدام Firebase. للاطّلاع على مزيد من المعلومات عن TFLite وFirebase، يمكنك الاطّلاع على نماذج TFLite الأخرى وأدلة بدء استخدام Firebase.
إذا كان لديك أي أسئلة، يمكنك طرحها على Stack Overflow #firebase-machine-learning.
المواضيع التي تناولناها
- TensorFlow Lite
- Firebase ML
- "إحصاءات Firebase"
- BigQuery
الخطوات التالية
- تدريب نموذج محسِّن لتطبيقك ونشره