আপনি একটি নতুন কাস্টম মডেল বা অটোএমএল ভিশন এজ মডেল প্রশিক্ষিত করার পরে, আপনি ইতিমধ্যে যে মডেলটি ব্যবহার করছেন তার তুলনায় নতুন মডেলটি বাস্তব-বিশ্বের পরিস্থিতিতে কতটা ভাল পারফর্ম করে তা দেখতে আপনি 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
প্যারামিটারের ডিফল্ট মান হিসাবে সেট করবেন, যেমনটি নিম্নলিখিত উদাহরণে রয়েছে:
Kotlin+KTX
val remoteConfig = FirebaseRemoteConfig.getInstance()
val remoteConfigDefaults = HashMap<String, Any>()
remoteConfigDefaults["plant_labeler_model"] = "plant_labeler_v1"
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults))
remoteConfig.fetchAndActivate().addOnSuccessListener { success ->
if (success) {
// Okay to get remote values.
// ...
}
}
Java
final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();
Map<String, Object> remoteConfigDefaults = new HashMap<>();
remoteConfigDefaults.put("plant_labeler_model", "plant_labeler_v1");
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults));
remoteConfig.fetchAndActivate().addOnSuccessListener(
new OnSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean success) {
if (success) {
// Okay to get remote values.
// ...
}
}
});
তারপর, plant_labeler_model
প্যারামিটার দ্বারা নির্দিষ্ট মডেল লোড করতে আপনার মডেল সেটআপ কোড পরিবর্তন করুন:
Kotlin+KTX
val rcValue = remoteConfig.getValue("plant_labeler_model")
val remoteModelName = rcValue.asString()
// ...
val remoteModel = FirebaseRemoteModel.Builder(remoteModelName)
.enableModelUpdates(true)
.setInitialDownloadConditions(initialConditions)
.setUpdatesDownloadConditions(updateConditions)
.build()
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel)
// Optionally configure a local model:
// https://firebase.google.com/docs/ml-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model
Java
FirebaseRemoteConfigValue rcValue = remoteConfig.getValue("plant_labeler_model");
String remoteModelName = rcValue.asString();
// ...
FirebaseRemoteModel remoteModel = new FirebaseRemoteModel.Builder(remoteModelName)
.enableModelUpdates(true)
.setInitialDownloadConditions(initialConditions)
.setUpdatesDownloadConditions(updateConditions)
.build();
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel);
// Optionally configure a local model:
// https://firebase.google.com/docs/ml-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model
এখন আপনার অ্যাপটি কোন মডেলটি লোড করতে হবে তা নির্ধারণ করতে একটি Remote Config প্যারামিটার ব্যবহার করে, আপনি শুধুমাত্র একটি নতুন মডেল প্রকাশ করে এবং Remote Config প্যারামিটারে এর নাম বরাদ্দ করে মডেলটি পরিবর্তন করতে পারেন৷ এই ক্ষমতা A/B Testing তাদের তুলনা করার উদ্দেশ্যে বিভিন্ন ব্যবহারকারীকে বিভিন্ন মডেল বরাদ্দ করতে দেয়।
আপনি চালিয়ে যাওয়ার আগে, আপনার মডেল ডাউনলোড কোডে নিম্নলিখিত সংযোজন করুন:
Kotlin+KTX
FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
.addOnSuccessListener {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if (rcValue.source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
FirebaseAnalytics.getInstance(this).logEvent("nondefault_model_downloaded", null)
}
}
Java
FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if (rcValue.getSource() == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
FirebaseAnalytics.getInstance(YourActivity.this)
.logEvent("nondefault_model_downloaded", null);
}
}
});
উপরের কোডটি একটি কাস্টম অ্যানালিটিক্স ইভেন্ট লগ করে যা আপনি পরে আপনার পরীক্ষার হিসাবে ব্যবহার করবেন
2. একটি লক্ষ্য মেট্রিক নির্ধারণ করুন
পরবর্তী ধাপ হল আপনি কীভাবে আপনার মডেলের সাফল্য পরিমাপ করবেন তা নির্ধারণ করা এবং আপনার অ্যাপটি সেই মেট্রিক অনুযায়ী মডেলের বিভিন্ন সংস্করণ কতটা ভাল কাজ করছে তা পরীক্ষা করার জন্য প্রয়োজনীয় ডেটা সংগ্রহ করছে তা নিশ্চিত করা।
A/B Testing বেশ কিছু বিল্ট-ইন মেট্রিক রয়েছে, যার মধ্যে রয়েছে রাজস্ব, দৈনিক ব্যস্ততা এবং ব্যবহারকারীর ধারণ। এই মেট্রিক্সগুলি প্রায়শই বিভিন্ন UX ফ্লো বা ফাইন-টিউনিং প্যারামিটার পরীক্ষা করার জন্য উপযোগী, কিন্তু আপনার মডেল এবং ব্যবহারের ক্ষেত্রে মূল্যায়নের জন্য অর্থবোধক নাও হতে পারে। এই পরিস্থিতিতে, আপনি পরিবর্তে একটি কাস্টম বিশ্লেষণ ইভেন্টের জন্য অপ্টিমাইজ করার চেষ্টা করতে পারেন।
একটি উদাহরণ হিসাবে অনুমানমূলক চাক্ষুষ উদ্ভিদ অনুসন্ধান বৈশিষ্ট্য ব্যবহার করে, ধরুন আপনি প্রতিটি ফলাফলে মডেলের আস্থার ক্রমে আপনার ব্যবহারকারীর কাছে অনুসন্ধান ফলাফল উপস্থাপন করেছেন। আপনার মডেলের নির্ভুলতা সম্পর্কে ধারণা পাওয়ার একটি উপায় হল ব্যবহারকারীরা কত ঘন ঘন প্রথম অনুসন্ধান ফলাফলটি খুলেছে তা দেখে।
কোন মডেলটি সেরা ফলাফলের ক্লিকগুলিকে সর্বাধিক করার লক্ষ্যটি সর্বোত্তমভাবে অর্জন করেছে তা পরীক্ষা করার জন্য, আপনি একটি কাস্টম ইভেন্ট লগ করবেন যখনই কোনও ব্যবহারকারী ফলাফল তালিকার প্রথম আইটেমটিতে ট্যাপ করবে৷
Kotlin+KTX
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
আপনি যে মেট্রিকের জন্য পরীক্ষা করেন তা নির্ভর করে আপনার অ্যাপ কীভাবে আপনার মডেল ব্যবহার করে।
এই মুহুর্তে, আপনি প্লে স্টোরে আপনার অ্যাপ স্থাপন করতে পারেন। আপনার অ্যাপটি আপনার আসল মডেল ব্যবহার করা চালিয়ে যাবে, কিন্তু আপনার যোগ করা 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. সমস্ত ব্যবহারকারীদের জন্য বিজয়ী ভেরিয়েন্ট রোল আউট করুন৷
A/B Testing একজন লিডার ঘোষণা করার জন্য পর্যাপ্ত তথ্য সংগ্রহ করার পরে—এই ক্ষেত্রে, যে বৈকল্পিকটি সর্বোচ্চ সার্চ ফলাফলে ক্লিক করে—আপনি সিদ্ধান্ত নিতে পারেন যে বিজয়ী ভেরিয়েন্টটি (বা অন্য একটি ভেরিয়েন্ট) আপনার সমস্ত ব্যবহারকারীর কাছে রোল আউট করবেন কিনা।
Firebase কনসোলের A/B Testing বিভাগে, সম্পূর্ণ পরীক্ষা-নিরীক্ষার বিশদ বিবরণ খুলুন। এই ভিউ থেকে, আপনি দেখতে পারেন কিভাবে প্রতিটি ভেরিয়েন্ট আপনার লক্ষ্য মেট্রিক এবং আপনার নির্বাচিত যেকোনো মাধ্যমিক মেট্রিক অনুযায়ী পারফর্ম করেছে। এই তথ্যের সাহায্যে, আপনি সিদ্ধান্ত নিতে পারেন যে অগ্রণী ভেরিয়েন্ট বা অন্য ভেরিয়েন্ট রোল আউট করবেন।
সমস্ত ব্যবহারকারীদের কাছে একটি বৈকল্পিক রোল আউট করতে, পরীক্ষার বিস্তারিত পৃষ্ঠায় more_vert > রোল আউট ভেরিয়েন্টে ক্লিক করুন। একবার আপনি এটি করলে, সমস্ত ব্যবহারকারীর জন্য plant_labeler_model
প্যারামিটারের মান হবে plant_labeler_v2
।
ভবিষ্যতের একটি অ্যাপ আপডেটে, আপনি plant_labeler_model
প্যারামিটারের ডিফল্ট মানটিকে plant_labeler_v2
এ পরিবর্তন করতে হবে এবং যদি আপনি একটি ব্যবহার করেন তবে বান্ডেল করা মডেলটি আপডেট করুন। যদিও আপনার ব্যবহারকারীরা ইতিমধ্যেই সর্বশেষ মডেল ব্যবহার করছেন, তাই আপনি যখনই সুবিধাজনক হয়, যেমন আপনি যখন পরবর্তীতে একটি বৈশিষ্ট্য আপডেট করবেন তখন প্রকাশিত অ্যাপের অংশ হিসাবে আপনি এই আপডেটটি পুশ করতে পারেন৷