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

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

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

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

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

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

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

Swift

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

Objective-C

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

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

Swift

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

Objective-C

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

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

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

Swift

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)
    }
}

Objective-C

__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];
              }
            }];

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

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

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

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

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

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

Swift

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

Objective-C

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

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

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

3- إجراء تجربة في اختبار A/B

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

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

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

    يحتاج تطبيقك إلى تسجيل كل حدث مرة واحدة على الأقل قبل ظهوره في "وحدة تحكُّم 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 (بافتراض أنك نشرت نموذجك الجديد تحت هذا الاسم). سيستخدم المستخدمون الذين تم تحديد لهم خيار المنتج هذا الخيار الجديد. model.

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

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

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

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

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

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

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

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