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

توضح هذه الصفحة كيف يمكنك إجراء اختبار 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. تتيح هذه الإمكانية لاختبار أ / ب تعيين نماذج مختلفة لمستخدمين مختلفين بغرض مقارنتها.
قبل المتابعة ، قم أيضًا بإجراء الإضافة التالية إلى رمز تنزيل الطراز الخاص بك:
سويفت
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 ستستخدمه لاحقًا كتجربة
2. تحديد مقياس الهدف
تتمثل الخطوة التالية في تحديد كيفية قياس نجاح نموذجك ، والتأكد من أن تطبيقك يجمع البيانات اللازمة لاختبار مدى جودة أداء الإصدارات المختلفة من النموذج وفقًا لهذا المقياس.
يحتوي اختبار A / B على العديد من المقاييس المضمنة ، بما في ذلك الإيرادات والمشاركة اليومية والاحتفاظ بالمستخدمين. غالبًا ما تكون هذه المقاييس مفيدة لاختبار تدفقات UX المختلفة أو ضبط المعلمات ، ولكنها قد لا تكون منطقية لتقييم نموذجك وحالة الاستخدام. في هذه الحالة ، يمكنك بدلاً من ذلك محاولة تحسين حدث مخصص في Analytics.
باستخدام ميزة البحث الظاهري عن النبات كمثال ، افترض أنك قدمت نتائج البحث إلى المستخدم بترتيب ثقة النموذج في كل نتيجة. تتمثل إحدى الطرق التي يمكنك من خلالها الحصول على فكرة عن دقة نموذجك في النظر إلى عدد المرات التي فتح فيها المستخدمون نتيجة البحث الأولى.
لاختبار النموذج الذي حقق الهدف المتمثل في زيادة نقرات أعلى النتائج إلى أقصى حد ، يمكنك تسجيل حدث مخصص كلما نقر المستخدم على العنصر الأول في قائمة النتائج.
سويفت
Analytics.logEvent("first_result_opened", parameters: nil)
ج موضوعية
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
يعتمد المقياس الذي تختبر من أجله في النهاية على كيفية استخدام تطبيقك للنموذج الخاص بك.
في هذه المرحلة ، يمكنك نشر تطبيقك على App Store. سيستمر تطبيقك في استخدام نموذجك الأصلي ، لكن رمز Remote Config و Analytics الذي أضفته سيتيح لك تجربة نماذج مختلفة باستخدام وحدة تحكم Firebase فقط.
3. قم بإجراء تجربة اختبار A / B
الآن بعد أن أصبح تطبيقك في أيدي المستخدمين ويقوم بجمع بيانات التحليلات ، قم بإنشاء تجربة اختبار A / B التي تختبر تأثير استخدام النموذج الجديد بدلاً من النموذج الحالي.
لإنشاء التجربة:
في صفحة الأحداث بوحدة تحكم Firebase ، تحقق من تسجيل أحداث Analytics ذات الصلة: حدث التنشيط ومقياس الهدف.
يحتاج تطبيقك إلى تسجيل كل حدث مرة واحدة على الأقل قبل ظهوره في وحدة تحكم Firebase.
في وحدة تحكم Firebase ، افتح قسم اختبار A / B.
قم بإنشاء تجربة جديدة:
انقر فوق إنشاء تجربة> التكوين البعيد .
في قسم الاستهداف :
- اختر تطبيقك من القائمة
- حدد عدد المستخدمين الذين تريد تضمينهم في التجربة
- حدد حدث التنشيط الذي بدأت في التسجيل (في هذا المثال ، nondefault_model_downloaded )
في قسم الأهداف ، اختر مقياس الهدف الذي حددته في القسم السابق (في هذا المثال ، first_result_opened ) من قائمة مقاييس الهدف ، وحدد أي مقاييس إضافية تريد تتبعها ، مثل أرباح الشراء أو المستخدمين الذين لم يتعرضوا لأي أعطال.
في قسم المتغيرات ، حدد متغيرين:
- مجموعة التحكم (تم إنشاؤها تلقائيًا)
- واسم النبات التجريبي
بالنسبة لمجموعة التحكم ، قم بإنشاء معلمة
plant_labeler_model
واضبطها علىplant_labeler_v1
. سيستخدم المستخدمون المعينون لمجموعة التحكم النموذج القديم. (لا تقم بتعيين المعلمة على(no change)
، لأنك في تطبيقك تختبر أنك تستخدم قيمة بعيدة.)بالنسبة لمتغير ملصق النبات التجريبي ، اضبط معلمة
plant_labeler_model
علىplant_labeler_v2
(بافتراض أنك قمت بنشر نموذجك الجديد تحت هذا الاسم). سيستخدم المستخدمون المعينون لهذا المتغير النموذج الجديد.
ابدأ التجربة واتركها تعمل لعدة أيام أو أكثر ، حتى يعلن اختبار أ / ب قائدًا. إذا لم تتمكن التجربة من تحديد قائد ، فقد تحتاج إلى توسيع التجربة لتشمل المزيد من المستخدمين .
4. طرح المتغير الفائز لجميع المستخدمين

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