TensorFlow Lite और Firebase - Android Codelab के साथ अपने ऐप में अनुशंसाएँ जोड़ें

1 अवलोकन

TensorFlow Lite और Firebase कोडलैब की अनुशंसाओं में आपका स्वागत है। इस कोडलैब में आप सीखेंगे कि अपने ऐप में अनुशंसा मॉडल को तैनात करने के लिए TensorFlow Lite और Firebase का उपयोग कैसे करें। यह कोडलैब इस TensorFlow Lite उदाहरण पर आधारित है।

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

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

आप क्या सीखेंगे

  • उपयोगकर्ता व्यवहार डेटा एकत्र करने के लिए फायरबेस एनालिटिक्स को एंड्रॉइड ऐप में एकीकृत करें
  • उस डेटा को Google बिग क्वेरी में निर्यात करें
  • डेटा को प्री-प्रोसेस करें और टीएफ लाइट अनुशंसा मॉडल को प्रशिक्षित करें
  • टीएफ लाइट मॉडल को फायरबेस एमएल पर तैनात करें और इसे अपने ऐप से एक्सेस करें
  • उपयोगकर्ताओं को अनुशंसाएँ सुझाने के लिए मॉडल का उपयोग करके डिवाइस पर अनुमान चलाएँ

आपको किस चीज़ की ज़रूरत पड़ेगी

  • नवीनतम एंड्रॉइड स्टूडियो संस्करण।
  • नमूना कोड।
  • एंड्रॉइड 7+ और Google Play सेवाओं 9.8 या बाद के संस्करण के साथ एक परीक्षण डिवाइस, या Google Play सेवाओं 9.8 या बाद के संस्करण के साथ एक एमुलेटर
  • यदि किसी उपकरण का उपयोग कर रहे हैं, तो एक कनेक्शन केबल।

आप इस ट्यूटोरियल का उपयोग कैसे करेंगे?

इसे केवल पूरा पढ़ें इसे पढ़ें और अभ्यास पूरा करें

एंड्रॉइड ऐप्स बनाने में आपके अनुभव का मूल्यांकन कैसे करेंगे?

नौसिखिए मध्यवर्ती प्रवीण

2. नमूना कोड प्राप्त करें

कमांड लाइन से GitHub रिपॉजिटरी को क्लोन करें।

$ git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-android.git

3. स्टार्टर ऐप आयात करें

एंड्रॉइड स्टूडियो से, codelab-recommendations-android निर्देशिका का चयन करें ( android_studio_folder.png ) नमूना कोड डाउनलोड से ( फ़ाइल > खोलें > .../कोडलैब-सिफारिशें-एंड्रॉइड/स्टार्ट)।

अब आपके पास एंड्रॉइड स्टूडियो में स्टार्ट प्रोजेक्ट खुला होना चाहिए।

4. फायरबेस कंसोल प्रोजेक्ट बनाएं

एक नया प्रोजेक्ट बनाएं

  1. फायरबेस कंसोल पर जाएं।
  2. प्रोजेक्ट जोड़ें चुनें (या यदि यह पहला है तो प्रोजेक्ट बनाएं )।
  3. प्रोजेक्ट का नाम चुनें या दर्ज करें और जारी रखें पर क्लिक करें।
  4. सुनिश्चित करें कि "इस प्रोजेक्ट के लिए Google Analytics सक्षम करें" सक्षम है।
  5. फायरबेस कंसोल में शेष सेटअप चरणों का पालन करें, फिर प्रोजेक्ट बनाएं पर क्लिक करें (या यदि आप मौजूदा Google प्रोजेक्ट का उपयोग कर रहे हैं तो फायरबेस जोड़ें)।

5. फायरबेस जोड़ें

  1. अपने नए प्रोजेक्ट की अवलोकन स्क्रीन से, सेटअप वर्कफ़्लो लॉन्च करने के लिए एंड्रॉइड आइकन पर क्लिक करें।
  2. कोडलैब का पैकेज नाम दर्ज करें: com.google.firebase.codelabs.recommendations
  3. ऐप रजिस्टर करें चुनें.

अपने ऐप में google-services.json फ़ाइल जोड़ें

पैकेज का नाम जोड़ने और रजिस्टर का चयन करने के बाद, अपनी फायरबेस एंड्रॉइड कॉन्फ़िगरेशन फ़ाइल प्राप्त करने के लिए google-services.json डाउनलोड करें पर क्लिक करें, फिर google-services.json फ़ाइल को अपने प्रोजेक्ट में app निर्देशिका में कॉपी करें। फ़ाइल डाउनलोड होने के बाद आप कंसोल में दिखाए गए अगले चरणों को छोड़ सकते हैं (वे बिल्ड-एंड्रॉइड-स्टार्ट प्रोजेक्ट में आपके लिए पहले ही किए जा चुके हैं)।

अपने ऐप में google-services प्लगइन जोड़ें

Google-services प्लगइन आपके एप्लिकेशन को Firebase का उपयोग करने के लिए कॉन्फ़िगर करने के लिए google-services.json फ़ाइल का उपयोग करता है। प्रोजेक्ट में build.gradle.kts फ़ाइलों में निम्नलिखित पंक्तियाँ पहले से ही जोड़ी जानी चाहिए (पुष्टि करने के लिए जाँच करें):

ऐप/बिल्ड.ग्रेड.केटीएस

plugins {
    id("com.google.gms.google-services")
}

बिल्ड.ग्रेड.केटीएस

plugins {
    id("com.google.gms.google-services") version "4.3.15" apply false
}

अपने प्रोजेक्ट को ग्रेडेल फ़ाइलों के साथ सिंक करें

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

6. स्टार्टर ऐप चलाएँ

अब जब आपने प्रोजेक्ट को एंड्रॉइड स्टूडियो में आयात कर लिया है और अपनी JSON फ़ाइल के साथ google-services प्लगइन कॉन्फ़िगर कर लिया है, तो आप पहली बार ऐप चलाने के लिए तैयार हैं। अपने एंड्रॉइड डिवाइस को कनेक्ट करें, और रन पर क्लिक करें ( निष्पादित.png )एंड्रॉइड स्टूडियो टूलबार में।

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

7. ऐप में फायरबेस एनालिटिक्स जोड़ें

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

सामग्री और विश्लेषिकी निर्भरता का फायरबेस बिल जोड़ें

आपके ऐप में फ़ायरबेस एनालिटिक्स जोड़ने के लिए निम्नलिखित निर्भरताएँ आवश्यक हैं। उन्हें पहले से ही ऐप/बिल्ड.ग्रेडल.केटीएस फ़ाइल (सत्यापित) में शामिल किया जाना चाहिए।

ऐप/बिल्ड.ग्रेड.केटीएस

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-analytics-ktx")

ऐप में फायरबेस एनालिटिक्स सेट करें

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

जब उपयोगकर्ता किसी मूवी पर क्लिक करता है तो एक एनालिटिक्स इवेंट रजिस्टर करने के लिए नीचे दिए गए कोड के साथ onMovieLiked फ़ंक्शन जोड़ें।

लाइक्डमूवीज़व्यूमॉडल.kt

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.analytics.ktx.logEvent
import com.google.firebase.ktx.Firebase


class LikedMoviesViewModel internal constructor (application: Application) : AndroidViewModel(application) {

    ...

    fun onMovieLiked(movie: Movie) {
        movies.setLike(movie, true)
        logAnalyticsEvent(movie.id.toString())
    }
       
}

जब कोई मूवी उपयोगकर्ता की पसंद की गई सूची में जोड़ी जाती है तो एनालिटिक्स इवेंट लॉग करने के लिए निम्न फ़ील्ड और फ़ंक्शन जोड़ें।

लाइक्डमूवीज़व्यूमॉडल.kt

import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.analytics.ktx.logEvent
import com.google.firebase.ktx.Firebase


class LikedMoviesViewModel internal constructor (application: Application) : AndroidViewModel(application) {
    ...
    private val firebaseAnalytics = Firebase.analytics

    ...

    /**
     * Logs an event in Firebase Analytics that is used in aggregate to train the recommendations
     * model.
     */
    private fun logAnalyticsEvent(id: String) {
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_ITEM) {
            param(FirebaseAnalytics.Param.ITEM_ID, id)
        }
    }

8. अपने एनालिटिक्स एकीकरण का परीक्षण करें

इस चरण में, हम ऐप में एनालिटिक्स इवेंट जेनरेट करेंगे और सत्यापित करेंगे कि उन्हें फायरबेस कंसोल पर भेजा जा रहा है।

एनालिटिक्स डिबग लॉगिंग सक्षम करें

फायरबेस एनालिटिक्स को उपयोगकर्ता की बैटरी लाइफ को अधिकतम करने के लिए डिज़ाइन किया गया है और यह डिवाइस पर इवेंट को बैच करेगा और उन्हें कभी-कभार ही फायरबेस पर भेजेगा। डिबगिंग उद्देश्यों के लिए, हम शेल में निम्नलिखित कमांड चलाकर वास्तविक समय में लॉग इन होने वाली घटनाओं को देखने के लिए इस व्यवहार को अक्षम कर सकते हैं।

टर्मिनल

adb shell setprop debug.firebase.analytics.app com.google.firebase.codelabs.recommendations

सत्यापित करें कि एनालिटिक्स इवेंट उत्पन्न हुए हैं

  1. एंड्रॉइड स्टूडियो में, अपने ऐप से लॉगिंग की जांच करने के लिए लॉगकैट विंडो खोलें।
  2. लॉगकैट फ़िल्टर को "लॉगिंग इवेंट" स्ट्रिंग पर सेट करें।
  3. सत्यापित करें कि हर बार जब आप ऐप में कोई मूवी पसंद करते हैं तो "select_item" एनालिटिक्स इवेंट उत्सर्जित होते हैं।

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

वैकल्पिक: फायरबेस कंसोल में एनालिटिक्स इवेंट की पुष्टि करें

  1. फायरबेस कंसोल पर जाएं।
  2. Analytics के अंतर्गत DebugView चुनें
  3. एंड्रॉइड स्टूडियो में, ऐप लॉन्च करने के लिए रन का चयन करें और अपनी पसंद की गई सूची में कुछ फिल्में जोड़ें।
  4. फायरबेस कंसोल के डीबगव्यू में, सत्यापित करें कि जैसे ही आप ऐप में फिल्में जोड़ते हैं ये इवेंट लॉग हो रहे हैं।

9. एनालिटिक्स डेटा को बिग क्वेरी में निर्यात करें

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

बड़ी क्वेरी निर्यात सक्षम करें

  1. फायरबेस कंसोल पर जाएं।
  2. प्रोजेक्ट अवलोकन के आगे सेटिंग्स गियर आइकन का चयन करें और फिर प्रोजेक्ट सेटिंग्स का चयन करें
  3. एकीकरण टैब चुनें.
  4. BigQuery ब्लॉक के अंदर लिंक (या प्रबंधित करें ) का चयन करें।
  5. Firebase को BigQuery से लिंक करने के बारे में चरण में अगला चुनें।
  6. एकीकरण कॉन्फ़िगर करें अनुभाग के अंतर्गत, Google Analytics डेटा भेजने को सक्षम करने के लिए स्विच पर क्लिक करें और BigQuery से लिंक का चयन करें।

अब आपने अपने फ़ायरबेस कंसोल प्रोजेक्ट को फ़ायरबेस एनालिटिक्स ईवेंट डेटा को बिग क्वेरी पर स्वचालित रूप से भेजने के लिए सक्षम कर दिया है। यह बिना किसी अन्य इंटरैक्शन के स्वचालित रूप से होता है, हालांकि, BigQuery में एनालिटिक्स डेटासेट बनाने वाला पहला निर्यात 24 घंटों तक नहीं हो सकता है। डेटासेट बनने के बाद, फायरबेस लगातार नए एनालिटिक्स इवेंट को बिग क्वेरी में इंट्राडे टेबल में निर्यात करता है, और पिछले दिनों के इवेंट को इवेंट टेबल में समूहित करता है।

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

10. मॉडल प्रशिक्षण डेटा प्राप्त करने के लिए BigQuery का उपयोग करें

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

BigQuery में नमूना डेटासेट आयात करें

  1. Google क्लाउड कंसोल में BigQuery डैशबोर्ड पर जाएं।
  2. मेनू में अपना प्रोजेक्ट नाम चुनें.
  3. विवरण देखने के लिए BigQuery के बाएं नेविगेशन के नीचे अपने प्रोजेक्ट का नाम चुनें।
  4. डेटासेट निर्माण पैनल खोलने के लिए डेटासेट बनाएं चुनें।
  5. डेटासेट आईडी के लिए 'firebase_recommendations_dataset' दर्ज करें और डेटासेट बनाएं चुनें।
  6. नया डेटासेट प्रोजेक्ट नाम के नीचे बाएँ मेनू में दिखाई देगा। इसे क्लिक करें।
  7. तालिका निर्माण पैनल खोलने के लिए तालिका बनाएँ का चयन करें।
  8. तालिका बनाने के लिए 'Google क्लाउड स्टोरेज' चुनें।
  9. GCS बकेट फ़ील्ड से फ़ाइल चुनें में, 'gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt' दर्ज करें।
  10. फ़ाइल स्वरूप ड्रॉप डाउन में 'JSONL' चुनें।
  11. तालिका नाम के लिए 'सिफारिशें_तालिका' दर्ज करें।
  12. स्कीमा > ऑटो डिटेक्ट > स्कीमा और इनपुट पैरामीटर के अंतर्गत बॉक्स को चेक करें
  13. तालिका बनाएं चुनें

नमूना डेटासेट का अन्वेषण करें

इस बिंदु पर, आप वैकल्पिक रूप से स्कीमा का पता लगा सकते हैं और इस डेटासेट का पूर्वावलोकन कर सकते हैं।

  1. इसमें मौजूद तालिकाओं का विस्तार करने के लिए बाएं मेनू में फायरबेस-सिफारिशें-डेटासेट का चयन करें।
  2. तालिका स्कीमा देखने के लिए अनुशंसा-तालिका तालिका का चयन करें।
  3. इस तालिका में शामिल वास्तविक एनालिटिक्स इवेंट डेटा देखने के लिए पूर्वावलोकन का चयन करें।

सेवा खाता क्रेडेंशियल बनाएं

अब, हम अपने Google क्लाउड कंसोल प्रोजेक्ट में सेवा खाता क्रेडेंशियल बनाएंगे, जिसका उपयोग हम अपने BigQuery डेटा तक पहुंचने और लोड करने के लिए निम्नलिखित चरण में कोलाब वातावरण में कर सकते हैं।

  1. सुनिश्चित करें कि आपके Google क्लाउड प्रोजेक्ट के लिए बिलिंग सक्षम है।
  2. BigQuery और BigQuery स्टोरेज API API सक्षम करें। < यहां क्लिक करें >
  3. सेवा खाता कुंजी बनाएं पृष्ठ पर जाएं.
  4. सेवा खाता सूची से, नया सेवा खाता चुनें।
  5. सेवा खाता नाम फ़ील्ड में, एक नाम दर्ज करें.
  6. भूमिका सूची से, प्रोजेक्ट > स्वामी चुनें।
  7. बनाएं पर क्लिक करें. एक JSON फ़ाइल जिसमें आपकी कुंजी आपके कंप्यूटर पर डाउनलोड होती है।

अगले चरण में, हम इस डेटा को प्रीप्रोसेस करने और अपने अनुशंसा मॉडल को प्रशिक्षित करने के लिए Google Colab का उपयोग करेंगे।

11. प्रीप्रोसेस डेटा और ट्रेन अनुशंसा मॉडल

इस चरण में, हम निम्नलिखित चरणों को निष्पादित करने के लिए कोलाब नोटबुक का उपयोग करेंगे:

  1. BigQuery डेटा को Colab नोटबुक में आयात करें
  2. मॉडल प्रशिक्षण के लिए इसे तैयार करने के लिए डेटा को प्रीप्रोसेस करें
  3. एनालिटिक्स डेटा पर अनुशंसा मॉडल को प्रशिक्षित करें
  4. मॉडल को टीएफ लाइट मॉडल के रूप में निर्यात करें
  5. मॉडल को फायरबेस कंसोल पर तैनात करें ताकि हम इसे अपने ऐप में उपयोग कर सकें

कोलाब प्रशिक्षण नोटबुक लॉन्च करने से पहले, हम पहले फायरबेस मॉडल प्रबंधन एपीआई को सक्षम करेंगे ताकि कोलाब प्रशिक्षित मॉडल को हमारे फायरबेस कंसोल पर तैनात कर सके।

फायरबेस मॉडल प्रबंधन एपीआई सक्षम करें

अपने एमएल मॉडलों को संग्रहीत करने के लिए एक बकेट बनाएं

अपने फायरबेस कंसोल में, स्टोरेज पर जाएं और आरंभ करें पर क्लिक करें। fbbea78f0eb3dc9f.png

अपनी बाल्टी सेट अप करने के लिए संवाद का पालन करें।

19517c0d6d2aa14d.png

फायरबेस एमएल एपीआई सक्षम करें

Google क्लाउड कंसोल पर फायरबेस एमएल एपीआई पेज पर जाएं और सक्षम करें पर क्लिक करें।

मॉडल को प्रशिक्षित और तैनात करने के लिए कोलाब नोटबुक का उपयोग करें

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

कोलाब में खोलें

12. अपने ऐप में मॉडल डाउनलोड करें

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

फायरबेस एमएल निर्भरता जोड़ें

आपके ऐप में फायरबेस मशीन लर्निंग मॉडल का उपयोग करने के लिए निम्नलिखित निर्भरता की आवश्यकता है। इसे पहले ही जोड़ा जाना चाहिए (सत्यापित करें)।

ऐप/बिल्ड.ग्रेड.केटीएस

implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

फायरबेस मॉडल मैनेजर एपीआई के साथ मॉडल डाउनलोड करें

जिन शर्तों के तहत मॉडल डाउनलोड होता है उन्हें सेट करने के लिए नीचे दिए गए कोड को RecommendationClient.kt में कॉपी करें और रिमोट मॉडल को हमारे ऐप में सिंक करने के लिए एक डाउनलोड कार्य बनाएं।

RecommendationClient.kt

    private fun downloadModel(modelName: String) {
        val conditions = CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build()
        FirebaseModelDownloader.getInstance()
            .getModel(modelName, DownloadType.LOCAL_MODEL, conditions)
            .addOnCompleteListener {
                if (!it.isSuccessful) {
                    showToast(context, "Failed to get model file.")
                } else {
                    showToast(context, "Downloaded remote model: $modelName")
                    GlobalScope.launch { initializeInterpreter(it.result) }
                }
            }
            .addOnFailureListener {
                showToast(context, "Model download failed for recommendations, please check your connection.")
            }
    }

13. अपने ऐप में Tensorflow Lite अनुशंसा मॉडल को एकीकृत करें

Tensorflow Lite रनटाइम आपको अनुशंसाएँ उत्पन्न करने के लिए ऐप में अपने मॉडल का उपयोग करने देगा। पिछले चरण में हमने डाउनलोड की गई मॉडल फ़ाइल के साथ एक TFlite दुभाषिया प्रारंभ किया था। इस चरण में, हम पहले अपने मॉडल के साथ अनुमान चरण में एक शब्दकोश और लेबल लोड करेंगे, फिर हम अपने मॉडल और पोस्ट-प्रोसेसिंग में इनपुट उत्पन्न करने के लिए प्री-प्रोसेसिंग जोड़ेंगे जहां हम अपने अनुमान से परिणाम निकालेंगे। .

शब्दकोश और लेबल लोड करें

अनुशंसा मॉडल द्वारा अनुशंसा उम्मीदवारों को उत्पन्न करने के लिए उपयोग किए जाने वाले लेबल res/assets फ़ोल्डर में sorted_movie_vocab.json फ़ाइल में सूचीबद्ध हैं। इन उम्मीदवारों को लोड करने के लिए निम्नलिखित कोड को कॉपी करें।

RecommendationClient.kt

    /** Load recommendation candidate list.  */
    private suspend fun loadCandidateList() {
        return withContext(Dispatchers.IO) {
            val collection = MovieRepository.getInstance(context).getContent()
            for (item in collection) {
                candidates[item.id] = item
            }
            Log.v(TAG, "Candidate list loaded.")
        }
    }

प्री-प्रोसेसिंग लागू करें

प्री-प्रोसेसिंग चरण में, हम अपने मॉडल की अपेक्षा से मेल खाने के लिए इनपुट डेटा का रूप बदलते हैं। यहां, यदि हमने पहले से ही बहुत सारे उपयोगकर्ता लाइक उत्पन्न नहीं किए हैं, तो हम प्लेसहोल्डर मान के साथ इनपुट लंबाई को पैड करते हैं। नीचे दिए गए कोड को कॉपी करें:

RecommendationClient.kt

    /** Given a list of selected items, preprocess to get tflite input.  */
    @Synchronized
    private suspend fun preprocess(selectedMovies: List<Movie>): IntArray {
        return withContext(Dispatchers.Default) {
            val inputContext = IntArray(config.inputLength)
            for (i in 0 until config.inputLength) {
                if (i < selectedMovies.size) {
                    val (id) = selectedMovies[i]
                    inputContext[i] = id
                } else {
                    // Padding input.
                    inputContext[i] = config.pad
                }
            }
            inputContext
        }
    }


अनुशंसाएँ उत्पन्न करने के लिए दुभाषिया चलाएँ

यहां हम अपने पूर्व-संसाधित इनपुट पर अनुमान चलाने के लिए पिछले चरण में डाउनलोड किए गए मॉडल का उपयोग करते हैं। हम अपने मॉडल के लिए इनपुट और आउटपुट का प्रकार निर्धारित करते हैं और अपनी मूवी अनुशंसाएँ उत्पन्न करने के लिए अनुमान चलाते हैं। निम्नलिखित कोड को अपने ऐप में कॉपी करें।

RecommendationClient.kt

    /** Given a list of selected items, and returns the recommendation results.  */
    @Synchronized
    suspend fun recommend(selectedMovies: List<Movie>): List<Result> {
        return withContext(Dispatchers.Default) {
            val inputs = arrayOf<Any>(preprocess(selectedMovies))

            // Run inference.
            val outputIds = IntArray(config.outputLength)
            val confidences = FloatArray(config.outputLength)
            val outputs: MutableMap<Int, Any> = HashMap()
            outputs[config.outputIdsIndex] = outputIds
            outputs[config.outputScoresIndex] = confidences
            tflite?.let {
                it.runForMultipleInputsOutputs(inputs, outputs)
                postprocess(outputIds, confidences, selectedMovies)
            } ?: run {
                Log.e(TAG, "No tflite interpreter loaded")
                emptyList()
            }
        }
    }



पोस्ट-प्रोसेसिंग लागू करें

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

RecommendationClient.kt

    /** Postprocess to gets results from tflite inference.  */
    @Synchronized
    private suspend fun postprocess(
        outputIds: IntArray, confidences: FloatArray, selectedMovies: List<Movie>
    ): List<Result> {
        return withContext(Dispatchers.Default) {
            val results = ArrayList<Result>()

            // Add recommendation results. Filter null or contained items.
            for (i in outputIds.indices) {
                if (results.size >= config.topK) {
                    Log.v(TAG, String.format("Selected top K: %d. Ignore the rest.", config.topK))
                    break
                }
                val id = outputIds[i]
                val item = candidates[id]
                if (item == null) {
                    Log.v(TAG, String.format("Inference output[%d]. Id: %s is null", i, id))
                    continue
                }
                if (selectedMovies.contains(item)) {
                    Log.v(TAG, String.format("Inference output[%d]. Id: %s is contained", i, id))
                    continue
                }
                val result = Result(
                    id, item,
                    confidences[i]
                )
                results.add(result)
                Log.v(TAG, String.format("Inference output[%d]. Result: %s", i, result))
            }
            results
        }
    }


अपने ऐप का परीक्षण करें!

अपना ऐप पुनः चलाएँ. जैसे ही आप कुछ फिल्में चुनते हैं, इसे स्वचालित रूप से नया मॉडल डाउनलोड करना चाहिए और सिफारिशें उत्पन्न करना शुरू कर देना चाहिए!

14. बधाई हो!

आपने TensorFlow Lite और Firebase का उपयोग करके अपने ऐप में एक अनुशंसा सुविधा बनाई है। ध्यान दें कि इस कोडलैब में दिखाई गई तकनीकों और पाइपलाइन को सामान्यीकृत किया जा सकता है और अन्य प्रकार की अनुशंसाओं को पूरा करने के लिए भी उपयोग किया जा सकता है।

हमने क्या कवर किया है

  • फायरबेस एमएल
  • फायरबेस एनालिटिक्स
  • बिगक्वेरी में एनालिटिक्स इवेंट निर्यात करें
  • प्रीप्रोसेस एनालिटिक्स इवेंट
  • ट्रेन अनुशंसाएँ TensorFlow मॉडल
  • मॉडल निर्यात करें और फायरबेस कंसोल पर तैनात करें
  • किसी ऐप में मूवी अनुशंसाएँ प्रस्तुत करें

अगले कदम

  • अपने ऐप में फायरबेस एमएल अनुशंसाएं लागू करें।

और अधिक जानें

एक सवाल है?

मुद्दों की रिपोर्ट करें