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

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

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

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

1. اجعل النموذج الخاص بك قابلاً للتكوين عن بعد

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

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

سويفت

let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
    "plant_labeler_model": "plant_labeler_v1" as NSObject,
    // ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()

ج موضوعية

FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
  @"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
  // ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];

بعد ذلك، قم بتغيير رمز إعداد النموذج الخاص بك لتحميل النموذج المحدد بواسطة المعلمة plant_labeler_model :

سويفت

let rcValue = remoteConfig.configValue(forKey: "plant_labeler_model")
guard let remoteModelName = rcValue.stringValue else { return }

// ...

let remoteModel = RemoteModel(
    name: remoteModelName,
    allowsModelUpdates: true,
    initialConditions: initialConditions,
    updateConditions: updateConditions
)
ModelManager.modelManager().register(remoteModel)

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

ج موضوعية

FIRRemoteConfigValue *rcValue = [remoteConfig configValueForKey:@"plant_labeler_model"];
NSString *remoteModelName = [rcValue stringValue];

// ...

FIRRemoteModel *remoteModel = [[FIRRemoteModel alloc] initWithName:remoteModelName
                                                allowsModelUpdates:YES
                                                 initialConditions:initialConditions
                                                  updateConditions:updateConditions];
[[FIRModelManager modelManager] 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 تعيين نماذج مختلفة لمستخدمين مختلفين بغرض مقارنتها.

قبل المتابعة، قم أيضًا بإجراء الإضافة التالية إلى رمز تنزيل النموذج الخاص بك:

سويفت

NotificationCenter.default.addObserver(
    forName: .firebaseMLModelDownloadDidSucceed,
    object: nil,
    queue: nil
) { [weak self] notification in
    guard let _ = self,
        let userInfo = notification.userInfo,
        let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
            as? RemoteModel,
        model.name == remoteModelName
        else { return }
    // If the model downloaded was specified by a remote parameter, log an
    // event, which will be our experiment's activation event.
    if rcValue.source == .remote {
        Analytics.logEvent("nondefault_model_downloaded", parameters: nil)
    }
}

ج موضوعية

__weak typeof(self) weakSelf = self;

[NSNotificationCenter.defaultCenter
    addObserverForName:FIRModelDownloadDidSucceedNotification
                object:nil
                 queue:nil
            usingBlock:^(NSNotification *_Nonnull note) {
              if (weakSelf == nil | note.userInfo == nil) {
                return;
              }

              FIRRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
              if ([model.name isEqualToString:remoteModelName] &&
                  rcValue.source == FIRRemoteConfigSourceRemote) {
                // If the model downloaded was specified by a remote parameter, log an
                // event, which will be our experiment's activation event.
                [FIRAnalytics logEventWithName:@"nondefault_model_downloaded" parameters:nil];
              }
            }];

يسجل الرمز أعلاه حدث Analytics مخصصًا ستستخدمه لاحقًا باعتباره تجربتك حدث التنشيط . حدث التنشيط هو حدث يجب على المستخدم تشغيله قبل اعتباره جزءًا من التجربة. ويضمن هذا عدم تسجيل المستخدمين في اختبار A/B الخاص بك حتى تنتهي أجهزتهم من تنزيل نموذج ML المخصص لهم.

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

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

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

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

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

سويفت

Analytics.logEvent("first_result_opened", parameters: nil)

ج موضوعية

[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];

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

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

3. قم بإجراء تجربة اختبار أ/ب

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

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

  1. في صفحة الأحداث بوحدة تحكم Firebase، تأكد من تسجيل أحداث Analytics ذات الصلة: حدث التنشيط ومقياس الهدف.

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

  2. في وحدة تحكم Firebase، افتح قسم اختبار A/B .

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

    1. انقر فوق إنشاء تجربة > التكوين عن بعد .

    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 عن القائد. إذا لم تتمكن التجربة من تحديد قائد، فقد تحتاج إلى توسيع التجربة لتشمل المزيد من المستخدمين .

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

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

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

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

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

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