A/B एक मॉडल के दो संस्करणों का परीक्षण करता है

एक नए कस्टम मॉडल या ऑटोएमएल विज़न एज मॉडल को प्रशिक्षित करने के बाद, आप ए/बी परीक्षण का उपयोग करके यह देख सकते हैं कि आपके द्वारा पहले से उपयोग किए गए मॉडल की तुलना में नया मॉडल वास्तविक दुनिया की स्थितियों में कितना अच्छा प्रदर्शन करता है। यह पुष्टि करने के बाद कि आपका नया मॉडल एक सुधार है, आप ऐप अपडेट की आवश्यकता के बिना, नए मॉडल को अपने सभी उपयोगकर्ताओं के लिए आसानी से रोल आउट कर सकते हैं।

यह पृष्ठ दिखाता है कि आप ए/बी परीक्षण कैसे कर सकते हैं जो एक मॉडल के दो संस्करणों का मूल्यांकन करता है जो एक काल्पनिक दृश्य संयंत्र खोज सुविधा को शक्ति प्रदान करता है। यह सुविधा उपयोगकर्ताओं को उनकी छवियों से पौधों की प्रजातियों की पहचान करने में मदद करने के लिए एक कस्टम छवि लेबलिंग मॉडल का उपयोग करती है।

मान लीजिए कि आपने हाल ही में एक नया प्लांट लेबलिंग मॉडल, plant_labeler_v2 प्रकाशित किया है और आप एक प्रयोग चलाना चाहते हैं जो इसकी तुलना आपके वर्तमान मॉडल से करता है, जिसका नाम plant_labeler_v1 है। नीचे दिए गए चरण बताते हैं कि प्रयोग कैसे स्थापित करें, उसे कैसे चलाएं और परिणामों पर कार्रवाई कैसे करें।

1. अपने मॉडल को दूर से कॉन्फ़िगर करने योग्य बनाएं

आपके मॉडलों का ए/बी परीक्षण करने के लिए पहला कदम रिमोट कॉन्फिग पैरामीटर का उपयोग करने के लिए अपने ऐप को संशोधित करना है ताकि यह निर्धारित किया जा सके कि यह किस मॉडल का उपयोग करता है। प्रारंभ में, आप इस पैरामीटर का डिफ़ॉल्ट मान उस मॉडल के रूप में सेट करेंगे जिसे आपका ऐप पहले से ही उपयोग करता है, लेकिन क्योंकि मॉडल का नाम दूरस्थ रूप से कॉन्फ़िगर करने योग्य पैरामीटर द्वारा नियंत्रित किया जाता है, आप अपने ऐप अपडेट को पुश किए बिना विभिन्न मॉडलों के साथ बदल सकते हैं और प्रयोग कर सकते हैं। उपयोगकर्ता हर बार.

इसलिए, यदि आपने अपना वर्तमान मॉडल 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/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/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/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

अब जब आपका ऐप यह निर्धारित करने के लिए रिमोट कॉन्फिग पैरामीटर का उपयोग करता है कि किस मॉडल को लोड करना है, तो आप केवल एक नया मॉडल प्रकाशित करके और रिमोट कॉन्फिग पैरामीटर को उसका नाम निर्दिष्ट करके मॉडल को बदल सकते हैं। यह क्षमता ए/बी परीक्षण को विभिन्न उपयोगकर्ताओं को उनकी तुलना करने के उद्देश्य से अलग-अलग मॉडल आवंटित करने देती है।

जारी रखने से पहले, अपने मॉडल डाउनलोड कोड में निम्नलिखित जोड़ें:

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. एक लक्ष्य मीट्रिक निर्धारित करें

अगला कदम यह तय करना है कि आप अपने मॉडल की सफलता को कैसे मापेंगे, और यह सुनिश्चित करने के लिए कि आपका ऐप यह परीक्षण करने के लिए आवश्यक डेटा एकत्र कर रहा है कि मॉडल के विभिन्न संस्करण उस मीट्रिक के अनुसार कितना अच्छा प्रदर्शन करते हैं।

ए/बी टेस्टिंग में कई अंतर्निहित मेट्रिक्स हैं, जिनमें राजस्व, दैनिक जुड़ाव और उपयोगकर्ता प्रतिधारण शामिल हैं। ये मेट्रिक्स अक्सर विभिन्न यूएक्स प्रवाह या फाइन-ट्यूनिंग पैरामीटर का परीक्षण करने के लिए उपयोगी होते हैं, लेकिन आपके मॉडल और उपयोग के मामले का मूल्यांकन करने के लिए इसका कोई मतलब नहीं हो सकता है। इस स्थिति में, आप इसके बजाय एक कस्टम एनालिटिक्स इवेंट के लिए अनुकूलन करने का प्रयास कर सकते हैं।

एक उदाहरण के रूप में काल्पनिक दृश्य संयंत्र खोज सुविधा का उपयोग करते हुए, मान लें कि आपने प्रत्येक परिणाम में मॉडल के विश्वास के क्रम में अपने उपयोगकर्ता को खोज परिणाम प्रस्तुत किए हैं। अपने मॉडल की सटीकता का अंदाजा लगाने का एक तरीका यह देखना होगा कि उपयोगकर्ताओं ने पहली खोज परिणाम को कितनी बार खोला।

यह जांचने के लिए कि किस मॉडल ने शीर्ष परिणाम क्लिक को अधिकतम करने का लक्ष्य सबसे अच्छा हासिल किया है, जब भी कोई उपयोगकर्ता परिणाम सूची में पहले आइटम को टैप करेगा तो आप एक कस्टम ईवेंट लॉग करेंगे।

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Java

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

आप जिस मीट्रिक का परीक्षण करते हैं वह अंततः इस बात पर निर्भर करता है कि आपका ऐप आपके मॉडल का उपयोग कैसे करता है।

इस बिंदु पर, आप अपने ऐप को प्ले स्टोर पर तैनात कर सकते हैं। आपका ऐप आपके मूल मॉडल का उपयोग करना जारी रखेगा, लेकिन आपके द्वारा जोड़ा गया रिमोट कॉन्फ़िगरेशन और एनालिटिक्स कोड आपको केवल फायरबेस कंसोल का उपयोग करके विभिन्न मॉडलों के साथ प्रयोग करने देगा।

3. ए/बी परीक्षण प्रयोग चलाएँ

अब जब आपका ऐप आपके उपयोगकर्ताओं के हाथों में है और एनालिटिक्स डेटा एकत्र कर रहा है, तो एक ए/बी परीक्षण प्रयोग बनाएं जो वर्तमान मॉडल के बजाय आपके नए मॉडल का उपयोग करने के प्रभाव का परीक्षण करता है।

प्रयोग बनाने के लिए:

  1. फायरबेस कंसोल के इवेंट पेज पर, सत्यापित करें कि आप प्रासंगिक एनालिटिक्स इवेंट लॉग कर रहे हैं: सक्रियण इवेंट और लक्ष्य मीट्रिक।

    आपके ऐप को प्रत्येक इवेंट को फायरबेस कंसोल में प्रदर्शित होने से पहले कम से कम एक बार लॉग करना होगा।

  2. फायरबेस कंसोल में, ए/बी परीक्षण अनुभाग खोलें।

  3. एक नया प्रयोग बनाएं:

    1. प्रयोग बनाएँ > रिमोट कॉन्फ़िगरेशन पर क्लिक करें।

    2. लक्ष्यीकरण अनुभाग में:

      • सूची से अपना ऐप चुनें
      • निर्दिष्ट करें कि आप अपने कितने उपयोगकर्ताओं को प्रयोग में शामिल करना चाहते हैं
      • उस सक्रियण ईवेंट का चयन करें जिसे आपने लॉग करना शुरू किया था (इस उदाहरण में, नॉनडिफॉल्ट_मॉडल_डाउनलोडेड )
    3. लक्ष्य अनुभाग में, लक्ष्य मीट्रिक की सूची से वह लक्ष्य मीट्रिक चुनें जो आपने पिछले अनुभाग में निर्धारित किया था (इस उदाहरण में, first_result_opened ), और कोई भी अतिरिक्त मीट्रिक चुनें जिसे आप ट्रैक करना चाहते हैं, जैसे खरीद राजस्व या क्रैश-मुक्त उपयोगकर्ता।

    4. वेरिएंट अनुभाग में, दो वेरिएंट परिभाषित करें:

      • नियंत्रण समूह (स्वचालित रूप से बनाया गया)
      • प्रायोगिक संयंत्र लेबलर

      नियंत्रण समूह के लिए, एक plant_labeler_model पैरामीटर बनाएं और इसे plant_labeler_v1 पर सेट करें। नियंत्रण समूह को सौंपे गए उपयोगकर्ता पुराने मॉडल का उपयोग करेंगे। (पैरामीटर को (no change) पर सेट न करें, क्योंकि आपके ऐप में, आप परीक्षण कर रहे हैं कि आप रिमोट वैल्यू का उपयोग कर रहे हैं।)

      प्रायोगिक प्लांट लेबलर संस्करण के लिए, plant_labeler_model पैरामीटर को plant_labeler_v2 पर सेट करें (मान लें कि आपने अपना नया मॉडल उस नाम के तहत प्रकाशित किया है)। इस वैरिएंट को सौंपे गए उपयोगकर्ता नए मॉडल का उपयोग करेंगे।

    ए/बी परीक्षण कॉन्फ़िगरेशन स्क्रीन

प्रयोग शुरू करें और इसे कई दिनों या उससे अधिक समय तक चलने दें, जब तक कि ए/बी परीक्षण किसी नेता की घोषणा नहीं कर देता। यदि प्रयोग किसी नेता का निर्धारण नहीं कर सकता है, तो आपको प्रयोग को अधिक उपयोगकर्ताओं तक विस्तारित करने की आवश्यकता हो सकती है।

4. विजेता वैरिएंट को सभी उपयोगकर्ताओं के लिए रोल आउट करें

ए/बी परीक्षण परिणाम कार्ड

ए/बी परीक्षण द्वारा लीडर घोषित करने के लिए पर्याप्त जानकारी एकत्र करने के बाद - इस मामले में, वह वैरिएंट जो शीर्ष खोज परिणाम क्लिक को अधिकतम करता है - आप यह तय कर सकते हैं कि विजेता वैरिएंट (या अन्य वैरिएंट) को अपने सभी उपयोगकर्ताओं के लिए रोल आउट करना है या नहीं।

फायरबेस कंसोल के ए/बी परीक्षण अनुभाग में, पूर्ण प्रयोग का विवरण दृश्य खोलें। इस दृश्य से, आप देख सकते हैं कि प्रत्येक प्रकार ने आपके लक्ष्य मीट्रिक और आपके द्वारा चुने गए किसी भी द्वितीयक मीट्रिक के अनुसार कैसा प्रदर्शन किया है। इस जानकारी के साथ, आप यह तय कर सकते हैं कि अग्रणी संस्करण या किसी अन्य संस्करण को रोल आउट करना है या नहीं।

सभी उपयोगकर्ताओं के लिए एक वैरिएंट को रोल आउट करने के लिए, प्रयोग के विवरण पृष्ठ पर > वैरिएंट को रोल आउट करें पर क्लिक करें। एक बार जब आप ऐसा कर लेते हैं, तो सभी उपयोगकर्ताओं के लिए plant_labeler_model पैरामीटर का मान plant_labeler_v2 होगा।

भविष्य के ऐप अपडेट में, आपको plant_labeler_model पैरामीटर के डिफ़ॉल्ट मान को plant_labeler_v2 में बदलना चाहिए और यदि आप एक का उपयोग करते हैं तो बंडल मॉडल को अपडेट करना चाहिए। हालाँकि, आपके उपयोगकर्ता पहले से ही नवीनतम मॉडल का उपयोग कर रहे हैं, इसलिए जब भी यह सुविधाजनक हो, आप इस अपडेट को प्रकाशित ऐप के हिस्से के रूप में आगे बढ़ा सकते हैं, जैसे कि जब आप अगली बार कोई फीचर अपडेट करते हैं।