بعد تدريب نموذج مخصّص جديد أو نموذج 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 تختبر تأثير استخدام النموذج بدلاً من النموذج الحالي.
لإنشاء التجربة:
-
حول الأحداث بوحدة تحكُّم Firebase، تأكَّد من تسجيلك الملف أحداث "إحصاءات Google": حدث التفعيل ومقياس الهدف.
يحتاج تطبيقك إلى تسجيل كل حدث مرة واحدة على الأقل قبل ظهوره في "وحدة تحكُّم Firebase".
-
في "وحدة تحكُّم Firebase"، افتح قسم اختبار A/B.
-
إنشاء تجربة جديدة:
انقر على إنشاء تجربة >. الإعداد عن بُعد:
-
في قسم الاستهداف:
- اختَر تطبيقك من القائمة.
- تحديد عدد المستخدمين الذين تريد تضمينهم في التجربة
- اختَر حدث التفعيل الذي بدأت تسجيله (في هذا المثال، nondefault_model_downloaded)
-
في قسم الأهداف، اختر مقياس الهدف الذي حدّدته في القسم السابق (في هذا المثال، first_result_opened) من قائمة مقاييس الأهداف، وتحديد أي مقاييس إضافية التي تريد تتبعها، مثل أرباح الشراء أو المستخدمين الذين لم يواجهوا أعطالاً
-
في قسم خيارات المنتج، حدِّد خيارَين:
- مجموعة التحكّم (يتم إنشاؤها تلقائيًا)
- مُصنِّف النباتات التجريبي
بالنسبة إلى مجموعة التحكّم، أنشئ
plant_labeler_model
وضبطها علىplant_labeler_v1
المستخدمون الذين تم تعيينهم لمجموعة التحكم النموذج القديم. (لا تضبط المَعلمة على(no change)
، لأنّك في تطبيقك تختبر استخدام قيمة بعيدة).بالنسبة إلى الصيغة مصنِّف النباتات التجريبي، عليك ضبط
plant_labeler_model
معلمة إلىplant_labeler_v2
(بافتراض أنك نشرت نموذجك الجديد تحت هذا الاسم). سيستخدم المستخدمون الذين تم تحديد لهم خيار المنتج هذا الخيار الجديد. model.
ابدأ التجربة واتركها قيد التنفيذ لعدة أيام أو أكثر حتى من خلال اختبار A/B، يتم التعرّف على القائد. إذا لم تستطع التجربة تحديد قائد، قد تحتاج إلى توسيع التجربة لتشمل المزيد من المستخدمين
4. طرح الصيغة الفائزة لجميع المستخدمين
بعد أن يجمع اختبار A/B معلومات كافية للإعلان عن الصفحة الرئيسية—في هذه الحالة، الصيغة التي عملت على زيادة أعلى نتيجة بحث إلى أقصى حد من النقرات، يمكنك تحديد ما إذا كنت ستطرح الصيغة الفائزة (أو مختلفة) لجميع المستخدمين.
افتح التفاصيل في قسم اختبار A/B ضمن وحدة تحكُّم Firebase. للتجربة المكتملة. من طريقة العرض هذه، يمكنك التعرّف على كيفية مساهمة كل خيار في أدائك وفقًا لمقياس هدفك وأي مقاييس ثانوية اخترتها. وباستخدام هذه المعلومات، يمكنك أن تقرّر ما إذا كنت ستطرح الصيغة الرائدة أو لمتغير آخر.
لطرح صيغة لجميع المستخدمين، انقر على
more_vert طرح الصيغة على
صفحة تفاصيل التجربة. بمجرد القيام بذلك، يتم حساب قيمة
قيمة المعلَمة plant_labeler_model
هي plant_labeler_v2
لجميع المستخدمين.
في أي تحديث مستقبلي للتطبيق، يجب عليك تغيير القيمة الافتراضية
مَعلمة plant_labeler_model
إلى plant_labeler_v2
وتعديل القيم المجمَّعة
نموذجك إذا كنت تستخدم واحدًا. ومع ذلك، يستخدم المستخدمون لديك أحدث طراز، لذا
يمكنك فرض هذا التحديث كجزء من التطبيق المنشور متى كان ذلك مناسبًا،
مثلاً، عند إجراء تحديث لإحدى الميزات في المرة التالية.