After you train a new custom model or AutoML Vision Edge model, you can use A/B Testing to see how well the new model performs in real-world conditions, compared to the model you already use. After you confirm that your new model is an improvement, you can easily roll out the new model to all of your users, without requiring an app update.
এই পৃষ্ঠাটি দেখায় যে আপনি কীভাবে একটি A/B পরীক্ষা পরিচালনা করতে পারেন যা একটি মডেলের দুটি সংস্করণকে মূল্যায়ন করে যা একটি অনুমানমূলক চাক্ষুষ উদ্ভিদ অনুসন্ধান বৈশিষ্ট্যকে শক্তি দেয়। এই বৈশিষ্ট্যটি ব্যবহারকারীদের তাদের ছবি থেকে উদ্ভিদের প্রজাতি সনাক্ত করতে সাহায্য করার জন্য একটি কাস্টম ইমেজ লেবেলিং মডেল ব্যবহার করে।
Suppose you just published a new plant labeling model, plant_labeler_v2
and you want to run an experiment that compares it with your current model, named plant_labeler_v1
. নীচের ধাপগুলি দেখায় কিভাবে পরীক্ষা সেট আপ করতে হয়, এটি চালাতে হয় এবং ফলাফলের উপর পদক্ষেপ নিতে হয়।
1. আপনার মডেলটিকে দূরবর্তীভাবে কনফিগারযোগ্য করুন৷
আপনার মডেলগুলি A/B পরীক্ষা করার প্রথম ধাপ হল এটি কোন মডেল ব্যবহার করে তা নির্ধারণ করতে একটি Remote Config প্যারামিটার ব্যবহার করার জন্য আপনার অ্যাপটি পরিবর্তন করা। Initially, you will set the default value of this parameter to be the model that your app already uses, but because the model name is controlled by a remotely configurable parameter, you can change and experiment with different models without having to push app updates to your ব্যবহারকারীরা প্রতিবার।
So, if you published your current model under the name plant_labeler_v1
, you would, in your app initialization code, set plant_labeler_v1
as the default value of the plant_labeler_model
parameter, as in the following example:
সুইফট
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];
}
}];
উপরের কোডটি একটি কাস্টম অ্যানালিটিক্স ইভেন্ট লগ করে যা আপনি পরে আপনার পরীক্ষার হিসাবে ব্যবহার করবেন
2. একটি লক্ষ্য মেট্রিক নির্ধারণ করুন
পরবর্তী ধাপ হল আপনি কীভাবে আপনার মডেলের সাফল্য পরিমাপ করবেন তা নির্ধারণ করা এবং আপনার অ্যাপটি সেই মেট্রিক অনুযায়ী মডেলের বিভিন্ন সংস্করণ কতটা ভাল কাজ করছে তা পরীক্ষা করার জন্য প্রয়োজনীয় ডেটা সংগ্রহ করছে তা নিশ্চিত করা।
A/B Testing বেশ কিছু বিল্ট-ইন মেট্রিক রয়েছে, যার মধ্যে রয়েছে রাজস্ব, দৈনিক ব্যস্ততা এবং ব্যবহারকারীর ধারণ। এই মেট্রিক্সগুলি প্রায়শই বিভিন্ন UX ফ্লো বা ফাইন-টিউনিং প্যারামিটার পরীক্ষা করার জন্য উপযোগী, কিন্তু আপনার মডেল এবং ব্যবহারের ক্ষেত্রে মূল্যায়নের জন্য অর্থবোধক নাও হতে পারে। এই পরিস্থিতিতে, আপনি পরিবর্তে একটি কাস্টম বিশ্লেষণ ইভেন্টের জন্য অপ্টিমাইজ করার চেষ্টা করতে পারেন।
একটি উদাহরণ হিসাবে অনুমানমূলক চাক্ষুষ উদ্ভিদ অনুসন্ধান বৈশিষ্ট্য ব্যবহার করে, ধরুন আপনি প্রতিটি ফলাফলে মডেলের আস্থার ক্রমে আপনার ব্যবহারকারীর কাছে অনুসন্ধান ফলাফল উপস্থাপন করেছেন। আপনার মডেলের যথার্থতা সম্পর্কে আপনি ধারণা পেতে একটি উপায় হ'ল ব্যবহারকারীরা প্রথম অনুসন্ধানের ফলাফলটি কতবার খোলেন তা দেখে।
কোন মডেলটি সেরা ফলাফলের ক্লিকগুলিকে সর্বাধিক করার লক্ষ্যটি সর্বোত্তমভাবে অর্জন করেছে তা পরীক্ষা করার জন্য, আপনি একটি কাস্টম ইভেন্ট লগ করবেন যখনই কোনও ব্যবহারকারী ফলাফল তালিকার প্রথম আইটেমটিতে ট্যাপ করবে৷
সুইফট
Analytics.logEvent("first_result_opened", parameters: nil)
উদ্দেশ্য-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
আপনি যে মেট্রিকটি পরীক্ষা করেন তা চূড়ান্তভাবে নির্ভর করে যে আপনার অ্যাপ্লিকেশনটি আপনার মডেলটি কীভাবে ব্যবহার করে।
এই মুহুর্তে, আপনি অ্যাপ স্টোরে আপনার অ্যাপ স্থাপন করতে পারেন। আপনার অ্যাপটি আপনার আসল মডেল ব্যবহার করা চালিয়ে যাবে, কিন্তু আপনার যোগ করা Remote Config এবং অ্যানালিটিক্স কোডটি আপনাকে শুধুমাত্র Firebase কনসোল ব্যবহার করে বিভিন্ন মডেলের সাথে পরীক্ষা করতে দেবে।
3. একটি A/B Testing পরীক্ষা চালান
এখন যেহেতু আপনার অ্যাপ আপনার ব্যবহারকারীদের হাতে রয়েছে এবং বিশ্লেষণ ডেটা সংগ্রহ করছে, একটি A/B Testing পরীক্ষা তৈরি করুন যা বর্তমান মডেলের পরিবর্তে আপনার নতুন মডেল ব্যবহারের প্রভাব পরীক্ষা করে।
পরীক্ষা তৈরি করতে:
Firebase কনসোলের ইভেন্টস পৃষ্ঠায়, আপনি প্রাসঙ্গিক বিশ্লেষণ ইভেন্টগুলি: অ্যাক্টিভেশন ইভেন্ট এবং লক্ষ্য মেট্রিক লগ করছেন তা যাচাই করুন।
আপনার অ্যাপ্লিকেশনটি Firebase কনসোলে প্রদর্শিত হওয়ার আগে প্রতিটি ইভেন্টকে কমপক্ষে একবার লগ করতে হবে।
Firebase কনসোলে, A/B Testing বিভাগটি খুলুন।
একটি নতুন পরীক্ষা তৈরি করুন:
পরীক্ষা তৈরি করুন > Remote Config ক্লিক করুন।
টার্গেটিং বিভাগে:
- তালিকা থেকে আপনার অ্যাপ্লিকেশন চয়ন করুন
- আপনি পরীক্ষায় আপনার কতজন ব্যবহারকারীর অন্তর্ভুক্ত করতে চান তা নির্দিষ্ট করুন
- আপনি লগিং শুরু করেছেন এমন অ্যাক্টিভেশন ইভেন্টটি নির্বাচন করুন (এই উদাহরণে, nondefault_model_downloaded )
লক্ষ্য বিভাগে, লক্ষ্য মেট্রিকগুলির তালিকা থেকে আপনি পূর্ববর্তী বিভাগে নির্ধারিত লক্ষ্য মেট্রিকটি চয়ন করুন (এই উদাহরণে, first_result_opened ) এবং আপনি ট্র্যাক করতে চান এমন কোনো অতিরিক্ত মেট্রিক নির্বাচন করুন, যেমন ক্র্যাশ আয় বা ক্র্যাশ-মুক্ত ব্যবহারকারী।
ভেরিয়েন্ট বিভাগে, দুটি বৈকল্পিক সংজ্ঞায়িত করুন:
- কন্ট্রোল গ্রুপ (স্বয়ংক্রিয়ভাবে তৈরি)
- পরীক্ষামূলক উদ্ভিদ লেবেলার
নিয়ন্ত্রণ গোষ্ঠীর জন্য, একটি
plant_labeler_model
প্যারামিটার তৈরি করুন এবং এটিplant_labeler_v1
এ সেট করুন। কন্ট্রোল গ্রুপে নিযুক্ত ব্যবহারকারীরা পুরানো মডেল ব্যবহার করবে। (প্যারামিটার সেট করবেন না(no change)
, যেহেতু আপনার অ্যাপে, আপনি পরীক্ষা করছেন যে আপনি একটি দূরবর্তী মান ব্যবহার করছেন।)পরীক্ষামূলক উদ্ভিদ লেবেলার ভেরিয়েন্টের জন্য,
plant_labeler_model
প্যারামিটারটিকেplant_labeler_v2
তে সেট করুন (অনুমান করা হচ্ছে আপনি সেই নামে আপনার নতুন মডেল প্রকাশ করেছেন)। এই ভেরিয়েন্টের জন্য নির্ধারিত ব্যবহারকারীরা নতুন মডেল ব্যবহার করবেন।
পরীক্ষা শুরু করুন এবং এটিকে কয়েক দিন বা তার বেশি সময় ধরে চলতে দিন, যতক্ষণ না A/B Testing একজন নেতা ঘোষণা করে। যদি পরীক্ষাটি একজন নেতাকে নির্ধারণ করতে না পারে, তাহলে আপনাকে পরীক্ষাটি আরও ব্যবহারকারীদের কাছে প্রসারিত করতে হতে পারে।
4. Roll out the winning variant to all users
A/B Testing একজন লিডার ঘোষণা করার জন্য পর্যাপ্ত তথ্য সংগ্রহ করার পরে—এই ক্ষেত্রে, যে বৈকল্পিকটি সর্বোচ্চ সার্চ ফলাফলে ক্লিক করে—আপনি সিদ্ধান্ত নিতে পারেন যে বিজয়ী ভেরিয়েন্টটি (বা অন্য একটি ভেরিয়েন্ট) আপনার সমস্ত ব্যবহারকারীর কাছে রোল আউট করবেন কিনা।
Firebase কনসোলের A/B Testing বিভাগে, সম্পূর্ণ পরীক্ষা-নিরীক্ষার বিশদ বিবরণ খুলুন। এই ভিউ থেকে, আপনি দেখতে পারেন কিভাবে প্রতিটি ভেরিয়েন্ট আপনার লক্ষ্য মেট্রিক এবং আপনার নির্বাচিত যেকোনো মাধ্যমিক মেট্রিক অনুযায়ী পারফর্ম করেছে। এই তথ্যের সাহায্যে, আপনি সিদ্ধান্ত নিতে পারেন যে অগ্রণী ভেরিয়েন্ট বা অন্য ভেরিয়েন্ট রোল আউট করবেন।
সমস্ত ব্যবহারকারীদের কাছে একটি বৈকল্পিক রোল আউট করতে, পরীক্ষার বিস্তারিত পৃষ্ঠায় more_vert > রোল আউট ভেরিয়েন্টে ক্লিক করুন। একবার আপনি এটি করলে, সমস্ত ব্যবহারকারীর জন্য plant_labeler_model
প্যারামিটারের মান হবে plant_labeler_v2
।
ভবিষ্যতের একটি অ্যাপ আপডেটে, আপনি plant_labeler_model
প্যারামিটারের ডিফল্ট মানটিকে plant_labeler_v2
এ পরিবর্তন করতে হবে এবং যদি আপনি একটি ব্যবহার করেন তবে বান্ডেল করা মডেলটি আপডেট করুন। যদিও আপনার ব্যবহারকারীরা ইতিমধ্যেই সর্বশেষ মডেল ব্যবহার করছেন, তাই আপনি যখনই সুবিধাজনক হয়, যেমন আপনি যখন পরবর্তীতে একটি বৈশিষ্ট্য আপডেট করবেন তখন প্রকাশিত অ্যাপের অংশ হিসাবে আপনি এই আপডেটটি পুশ করতে পারেন৷