پس از آموزش یک مدل سفارشی جدید یا مدل AutoML Vision Edge، میتوانید از A/B Testing استفاده کنید تا ببینید مدل جدید در شرایط واقعی در مقایسه با مدلی که قبلاً استفاده میکنید، چقدر خوب عمل میکند. پس از اینکه تأیید کردید که مدل جدید شما بهبود یافته است، می توانید به راحتی مدل جدید را برای همه کاربران خود عرضه کنید، بدون اینکه نیازی به به روز رسانی برنامه باشد.
این صفحه نشان میدهد که چگونه میتوانید یک تست 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()
هدف-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
بارگیری شود:
سویفت
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
هدف-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
اکنون که برنامه شما از پارامتر Remote Config برای تعیین مدل بارگیری استفاده می کند، می توانید مدل را فقط با انتشار یک مدل جدید و اختصاص نام آن به پارامتر Remote Config تغییر دهید. این قابلیت به A/B Testing اجازه میدهد تا مدلهای مختلف را به کاربران مختلف برای مقایسه آنها اختصاص دهد.
قبل از ادامه، موارد زیر را نیز به کد دانلود مدل خود اضافه کنید:
سویفت
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)
}
}
هدف-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];
}
}];
کد بالا یک رویداد Analytics سفارشی را ثبت می کند که بعداً به عنوان آزمایش خود استفاده خواهید کرد
2. یک متریک هدف را تعیین کنید
گام بعدی این است که تصمیم بگیرید چگونه موفقیت مدل خود را اندازه گیری کنید و مطمئن شوید که برنامه شما داده های لازم را برای آزمایش عملکرد نسخه های مختلف مدل مطابق با آن معیار جمع آوری می کند.
A/B Testing چندین معیار داخلی دارد، از جمله درآمد، تعامل روزانه و حفظ کاربر. این معیارها اغلب برای آزمایش جریان های UX مختلف یا پارامترهای تنظیم دقیق مفید هستند، اما ممکن است برای ارزیابی مدل و مورد استفاده شما منطقی نباشند. در این شرایط، در عوض میتوانید برای یک رویداد آنالیتیکس سفارشی بهینهسازی کنید.
با استفاده از ویژگی فرضی جستجوی گیاهی بصری به عنوان مثال، فرض کنید نتایج جستجو را به ترتیب اطمینان مدل در هر نتیجه به کاربر خود ارائه کرده اید. یکی از راههایی که میتوانید درباره دقت مدل خود ایده بگیرید، این است که ببینید کاربران چند بار اولین نتیجه جستجو را باز کردهاند.
برای آزمایش اینکه کدام مدل به بهترین شکل به هدف حداکثر کردن کلیکهای نتایج برتر دست یافته است، هر زمان که کاربر روی اولین مورد در لیست نتایج ضربه میزند، یک رویداد سفارشی را ثبت میکنید.
سویفت
Analytics.logEvent("first_result_opened", parameters: nil)
هدف-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
معیاری که برای آن آزمایش می کنید در نهایت به نحوه استفاده برنامه شما از مدل شما بستگی دارد.
در این مرحله، می توانید برنامه خود را در اپ استور مستقر کنید. برنامه شما همچنان از مدل اصلی شما استفاده میکند، اما کد Remote Config و Analytics که اضافه کردهاید به شما امکان میدهد مدلهای مختلف را فقط با استفاده از کنسول Firebase آزمایش کنید.
3. یک آزمایش A/B Testing را اجرا کنید
اکنون که برنامه شما در دست کاربران شماست و داده های تحلیلی را جمع آوری می کند، یک آزمایش A/B Testing ایجاد کنید که تأثیر استفاده از مدل جدید شما را به جای مدل فعلی آزمایش می کند.
برای ایجاد آزمایش:
در صفحه رویدادهای کنسول Firebase ، تأیید کنید که رویدادهای Analytics مربوطه را ثبت میکنید: رویداد فعالسازی و معیار هدف.
برنامه شما باید حداقل یک بار هر رویداد را قبل از نمایش در کنسول Firebase ثبت کند.
در کنسول Firebase ، بخش A/B Testing باز کنید.
یک آزمایش جدید ایجاد کنید:
روی ایجاد آزمایش > Remote Config کلیک کنید.
در بخش هدف گذاری :
- برنامه خود را از لیست انتخاب کنید
- مشخص کنید که چه تعداد از کاربران خود را می خواهید در آزمایش بگنجانید
- رویداد فعالسازی را که شروع به ثبت نام کردهاید انتخاب کنید (در این مثال، nondefault_model_downloaded )
در بخش اهداف ، معیار هدفی را که در بخش قبلی تعیین کردید (در این مثال، first_result_opened ) از فهرست معیارهای هدف انتخاب کنید، و هر معیار دیگری را که میخواهید ردیابی کنید، مانند درآمد خرید یا کاربران بدون خرابی، انتخاب کنید.
در قسمت Variants دو نوع تعریف کنید:
- گروه کنترل (به طور خودکار ایجاد می شود)
- برچسب زنی گیاهان آزمایشی
برای گروه Control ، یک پارامتر
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 ، نمای جزئیات آزمایش تکمیل شده را باز کنید. از این نما، میتوانید ببینید که هر کدام از انواع با توجه به معیار هدف و هر معیار ثانویهای که انتخاب کردهاید، چگونه عمل میکند. با استفاده از این اطلاعات، میتوانید تصمیم بگیرید که نسخه اصلی را عرضه کنید یا نوع دیگری.
برای ارائه یک نوع برای همه کاربران، روی more_vert > Roll out variant در صفحه جزئیات آزمایش کلیک کنید. پس از انجام این کار، مقدار پارامتر plant_labeler_model
برای همه کاربران plant_labeler_v2
خواهد بود.
در بهروزرسانی برنامه آینده، باید مقدار پیشفرض پارامتر plant_labeler_model
را به plant_labeler_v2
تغییر دهید و اگر از آن استفاده میکنید، مدل همراه را بهروزرسانی کنید. با این حال، کاربران شما در حال حاضر از آخرین مدل استفاده میکنند، بنابراین میتوانید هر زمان که راحت بود، این بهروزرسانی را بهعنوان بخشی از برنامه منتشر شده، مانند زمانی که بعداً بهروزرسانی ویژگی انجام میدهید، فشار دهید.