اختبار A/B نسختان من نموذج

بعد تدريب نموذج مخصّص جديد أو نموذج AutoML Vision Edge، يمكنك استخدام A/B Testing لمعرفة مستوى أداء النموذج الجديد في الظروف الفعلية، مقارنةً بالنموذج الذي تستخدمه بالفعل. بعد أن تتأكد من أن نموذجك الجديد التحسين، يمكنك بسهولة طرح النموذج الجديد لجميع المستخدمين، بدون الحاجة إلى تحديث التطبيق.

توضّح هذه الصفحة كيفية إجراء اختبار أ/ب لتقييم نسختَين. لنموذج يشغّل ميزة افتراضية للبحث عن النباتات. هذه الميزة نموذج تصنيف مخصص للصور لمساعدة المستخدمين في تحديد أنواع النباتات من صور لها.

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

1- جعل النموذج قابلاً للضبط عن بُعد

تتمثل الخطوة الأولى لإجراء اختبار A/B في نماذجك في تعديل تطبيقك لاستخدام مَعلمة Remote Config لتحديد النموذج الذي تستخدمه. في البداية، سيتم ضبط القيمة التلقائية لهذه المعلمة لتكون النموذج الذي سيستخدمه تطبيقك تستخدمها بالفعل، ولكن نظرًا لأن اسم النموذج يتم التحكم فيه عن بُعد قابلة للتهيئة، يمكنك تغيير نماذج مختلفة وتجربتها بدون الحاجة إلى إرسال تحديثات التطبيقات إلى المستخدمين في كل مرة.

إذًا، إذا نشرت النموذج الحالي تحت هذا الاسم، plant_labeler_v1، يمكنك في رمز إعداد تطبيقك ضبط plant_labeler_v1 كقيمة تلقائية المعلمة plant_labeler_model، كما في المثال التالي:

Kotlin+KTX

val remoteConfig = FirebaseRemoteConfig.getInstance()

val remoteConfigDefaults = HashMap<String, Any>()
remoteConfigDefaults["plant_labeler_model"] = "plant_labeler_v1"
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults))

remoteConfig.fetchAndActivate().addOnSuccessListener { success ->
    if (success) {
      // Okay to get remote values.
      // ...
    }
}

Java

final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();

Map<String, Object> remoteConfigDefaults = new HashMap<>();
remoteConfigDefaults.put("plant_labeler_model", "plant_labeler_v1");
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults));

remoteConfig.fetchAndActivate().addOnSuccessListener(
        new OnSuccessListener<Boolean>() {
            @Override
            public void onSuccess(Boolean success) {
                if (success) {
                  // Okay to get remote values.
                  // ...
                }
            }
        });

بعد ذلك، غيِّر رمز إعداد النموذج لتحميل النموذج الذي حدّدته السمة مَعلمة plant_labeler_model:

Kotlin+KTX

val rcValue = remoteConfig.getValue("plant_labeler_model")
val remoteModelName = rcValue.asString()

// ...

val remoteModel = FirebaseRemoteModel.Builder(remoteModelName)
        .enableModelUpdates(true)
        .setInitialDownloadConditions(initialConditions)
        .setUpdatesDownloadConditions(updateConditions)
        .build()
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel)

// Optionally configure a local model:
// https://firebase.google.com/docs/ml/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

Java

FirebaseRemoteConfigValue rcValue = remoteConfig.getValue("plant_labeler_model");
String remoteModelName = rcValue.asString();

// ...

FirebaseRemoteModel remoteModel = new FirebaseRemoteModel.Builder(remoteModelName)
        .enableModelUpdates(true)
        .setInitialDownloadConditions(initialConditions)
        .setUpdatesDownloadConditions(updateConditions)
        .build();
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel);

// Optionally configure a local model:
// https://firebase.google.com/docs/ml/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

والآن بعد أن أصبح تطبيقك يستخدم مَعلمة Remote Config لتحديد النموذج الذي يجب تنفيذه. التحميل، يمكنك تغيير النموذج بمجرد نشر نموذج جديد وتعيين إلى المعلَمة Remote Config. وتتيح هذه الميزة لـ "A/B Testing" تنفيذ نماذج مختلفة لمستخدمين مختلفين بغرض المقارنة بينها.

قبل المتابعة، أضِف أيضًا الإضافة التالية إلى عملية تنزيل النموذج. الرمز:

Kotlin+KTX

FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
    .addOnSuccessListener {
        // If the model downloaded was specified by a remote parameter, log an
        // event, which will be our experiment's activation event.
        if (rcValue.source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
            FirebaseAnalytics.getInstance(this).logEvent("nondefault_model_downloaded", null)
        }
    }

Java

FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // If the model downloaded was specified by a remote parameter, log an
                // event, which will be our experiment's activation event.
                if (rcValue.getSource() == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
                    FirebaseAnalytics.getInstance(YourActivity.this)
                            .logEvent("nondefault_model_downloaded", null);
                }
            }
        });

يسجِّل الرمز أعلاه حدثًا مخصّصًا في "إحصاءات Google" ستستخدمه لاحقًا حدث التفعيل للتجربة. حدث التفعيل هو حدث أن يبدأ المستخدم في الظهور قبل أن يتم اعتباره جزءًا من التجربة. هذا النمط يضمن عدم تسجيل المستخدمين في اختبار أ/ب حتى يتم تسجيل شركة من تنزيل نموذج تعلُّم الآلة المخصّص.

2- تحديد مقياس الهدف

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

يتضمّن "A/B Testing" عدّة مقاييس مضمّنة، بما في ذلك الأرباح اليومية. والتفاعل والاحتفاظ بالمستخدمين. غالبًا ما تكون هذه المقاييس مفيدة للاختبار. تدفقات تجربة مستخدم مختلفة أو معلمات ضبط دقيقة، ولكن قد لا تكون منطقية لتقييم النموذج وحالة الاستخدام. في هذه الحالة، يمكنك بدلاً من ذلك محاولة إجراء تحسين لحدث مخصّص في "إحصاءات Google"

باستخدام ميزة البحث المرئي عن النباتات الافتراضية كمثال، افترض أنك قدم نتائج البحث للمستخدم بترتيب ثقة النموذج في لكل نتيجة. ومن بين الطرق التي يمكنك من خلالها الحصول على فكرة عن دقة النموذج التحقق من عدد المرات التي فتح فيها المستخدمون أول نتيجة بحث

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

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Java

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

يعتمد المقياس الذي تختبره على كيفية استخدام تطبيقك الأمثل.

في هذه المرحلة، يمكنك نشر تطبيقك في "متجر Play". سيواصل تطبيقك استخدام نموذجك الأصلي. ولكن الرمز Remote Config ورمز "إحصاءات Google" الذي أضفته سيتيح لك تجربة مع طُرز مختلفة باستخدام وحدة تحكم Firebase فقط.

3- تنفيذ تجربة "A/B Testing"

بعد أن أصبح تطبيقك متاحًا للمستخدمين وتجمع البيانات التحليلية، إنشاء تجربة "A/B Testing" التي تختبر تأثير استخدام تجربتك الجديدة النموذج بدلاً من النموذج الحالي.

لإنشاء التجربة:

  1. حول الأحداث في وحدة تحكم Firebase، فتأكد من أنك تقوم بتسجيل الدخول أحداث "إحصاءات Google": حدث التفعيل ومقياس الهدف.

    يحتاج تطبيقك إلى تسجيل كل حدث مرة واحدة على الأقل قبل ظهوره في وحدة تحكّم "Firebase"

  2. في وحدة تحكُّم Firebase، افتح القسم A/B Testing.

  3. إنشاء تجربة جديدة:

    1. انقر على إنشاء تجربة >. Remote Config

    2. في قسم الاستهداف:

      • اختَر تطبيقك من القائمة.
      • تحديد عدد المستخدمين الذين تريد تضمينهم في التجربة
      • اختَر حدث التفعيل الذي بدأت تسجيله (في هذا المثال، nondefault_model_downloaded)
    3. في قسم الأهداف، اختر مقياس الهدف الذي حدّدته في القسم السابق (في هذا المثال، first_result_opened) من قائمة مقاييس الأهداف، وتحديد أي مقاييس إضافية التي تريد تتبعها، مثل أرباح الشراء أو المستخدمين الذين لم يواجهوا أعطالاً

    4. في قسم خيارات المنتج، حدِّد خيارَين:

      • مجموعة التحكّم (يتم إنشاؤها تلقائيًا)
      • مُصنِّف النباتات التجريبي

      بالنسبة إلى مجموعة التحكّم، أنشئ plant_labeler_model وضبطها على plant_labeler_v1 المستخدمون الذين تم تعيينهم لمجموعة التحكم النموذج القديم. (لا تضبط المَعلمة على (no change)، لأنّك في تطبيقك تختبر استخدام قيمة بعيدة).

      بالنسبة إلى الصيغة مصنِّف النباتات التجريبي، عليك ضبط plant_labeler_model معلمة إلى plant_labeler_v2 (بافتراض أنك نشرت نموذجك الجديد تحت هذا الاسم). سيستخدم المستخدمون الذين تم تحديد لهم خيار المنتج هذا الخيار الجديد. الأمثل.

    شاشة إعداد اختبار أ/ب

ابدأ التجربة واتركها قيد التنفيذ لعدة أيام أو أكثر حتى تُعلن A/B Testing عن القائد. إذا لم تستطع التجربة تحديد قائد، قد تحتاج إلى توسيع التجربة لتشمل المزيد من المستخدمين

4. طرح الصيغة الفائزة لجميع المستخدمين

بطاقة نتائج اختبار أ/ب

بعد أن جمع A/B Testing معلومات كافية للإعلان عن الصفحة الرئيسية—في هذه الحالة، الصيغة التي عملت على زيادة أعلى نتيجة بحث إلى أقصى حد من النقرات، يمكنك تحديد ما إذا كنت ستطرح الصيغة الفائزة (أو مختلفة) لجميع المستخدمين.

في القسم A/B Testing ضمن وحدة تحكّم Firebase، افتح التفاصيل. للتجربة المكتملة. من طريقة العرض هذه، يمكنك التعرّف على كيفية مساهمة كل خيار في أدائك وفقًا لمقياس هدفك وأي مقاييس ثانوية اخترتها. وباستخدام هذه المعلومات، يمكنك أن تقرّر ما إذا كنت ستطرح الصيغة الرائدة أو لمتغير آخر.

لطرح صيغة لجميع المستخدمين، انقر على طرح الصيغة على صفحة تفاصيل التجربة. بمجرد القيام بذلك، يتم حساب قيمة قيمة المعلَمة plant_labeler_model هي plant_labeler_v2 لجميع المستخدمين.

في أي تحديث مستقبلي للتطبيق، يجب عليك تغيير القيمة الافتراضية مَعلمة plant_labeler_model إلى plant_labeler_v2 وتعديل القيم المجمَّعة نموذجك إذا كنت تستخدم واحدًا. ومع ذلك، يستخدم المستخدمون لديك أحدث طراز، لذا يمكنك فرض هذا التحديث كجزء من التطبيق المنشور متى كان ذلك مناسبًا، مثلاً، عند إجراء تحديث لإحدى الميزات في المرة التالية.