नए कस्टम मॉडल या 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
पैरामीटर की डिफ़ॉल्ट वैल्यू के तौर पर सेट करना होगा. जैसे, नीचे दिए गए उदाहरण में:
Kotlin
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
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
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);
}
}
});
ऊपर दिया गया कोड, एक कस्टम Analytics इवेंट को लॉग करता है. इसका इस्तेमाल बाद में, प्रयोग के
2. लक्ष्य मेट्रिक तय करना
अगला कदम यह तय करना है कि आप अपने मॉडल की सफलता को कैसे मेज़र करेंगे. साथ ही, यह पक्का करना होगा कि आपका ऐप्लिकेशन उस मेट्रिक के हिसाब से, मॉडल के अलग-अलग वर्शन की परफ़ॉर्मेंस की जांच करने के लिए ज़रूरी डेटा इकट्ठा कर रहा है.
A/B Testing में कई मेट्रिक पहले से मौजूद होती हैं. इनमें रेवेन्यू, हर दिन के उपयोगकर्ता के जुड़ाव की संख्या, और उपयोगकर्ता के बने रहने की दर शामिल है. ये मेट्रिक, आम तौर पर अलग-अलग UX फ़्लो या पैरामीटर को बेहतर बनाने के लिए काम की होती हैं. हालांकि, हो सकता है कि इनका इस्तेमाल आपके मॉडल और इस्तेमाल के उदाहरण का आकलन करने के लिए न किया जा सके. इस स्थिति में, किसी कस्टम Analytics इवेंट के लिए ऑप्टिमाइज़ करने की कोशिश की जा सकती है.
उदाहरण के लिए, मान लें कि आपने उपयोगकर्ता को, हर नतीजे में मॉडल के कॉन्फ़िडेंस के हिसाब से खोज के नतीजे दिखाए हैं. अपने मॉडल के सटीक होने का अंदाज़ा लगाने के लिए, यह देखें कि उपयोगकर्ताओं ने खोज के पहले नतीजे को कितनी बार खोला.
यह जांचने के लिए कि किस मॉडल ने सबसे ज़्यादा नतीजों पर क्लिक करने के लक्ष्य को सबसे बेहतर तरीके से हासिल किया, जब भी कोई उपयोगकर्ता नतीजों की सूची में पहले आइटम पर टैप करता है, तो आपको एक कस्टम इवेंट लॉग करना होगा.
Kotlin
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
आपको जिस मेट्रिक की जांच करनी है वह इस बात पर निर्भर करता है कि आपका ऐप्लिकेशन आपके मॉडल का इस्तेमाल कैसे करता है.
अब आपके पास Play Store पर अपना ऐप्लिकेशन डिप्लॉय करने का विकल्प है. आपका ऐप्लिकेशन आपके मूल मॉडल का इस्तेमाल करता रहेगा. हालांकि, आपने जो 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). साथ ही, ऐसी अन्य मेट्रिक चुनें जिन्हें आपको ट्रैक करना है. जैसे, खरीदारी से होने वाली आय या क्रैश-फ़्री उपयोगकर्ता.
-
वैरिएंट सेक्शन में, दो वैरिएंट तय करें:
- कंट्रोल ग्रुप (अपने-आप बनता है)
- पौधों को लेबल करने वाला एक्सपेरिमेंटल टूल
कंट्रोल ग्रुप के लिए, एक
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
में बदलना चाहिए. साथ ही, अगर बंडल किया गया कोई मॉडल इस्तेमाल किया जा रहा है, तो उसे अपडेट करना चाहिए. हालांकि, आपके उपयोगकर्ता पहले से ही नए मॉडल का इस्तेमाल कर रहे हैं. इसलिए, जब भी आप चाहें, तब पब्लिश किए गए ऐप्लिकेशन के हिस्से के तौर पर इस अपडेट को पुश किया जा सकता है. जैसे, जब आप किसी सुविधा में अगला अपडेट करें.