1. खास जानकारी
TensorFlow Lite और Firebase के साथ सुझाव पाने की सुविधा वाले कोडलैब में आपका स्वागत है. इस कोडलैब में, आपको अपने ऐप्लिकेशन में सुझाव देने वाले मॉडल को डिप्लॉय करने के लिए, TensorFlow Lite और Firebase का इस्तेमाल करने का तरीका बताया जाएगा. यह कोडलैब, TensorFlow Lite के इस उदाहरण पर आधारित है.
सुझावों की मदद से ऐप्लिकेशन, मशीन लर्निंग का इस्तेमाल करके हर उपयोगकर्ता को सबसे काम का कॉन्टेंट दिखा सकते हैं. ये मॉडल, उपयोगकर्ता के पिछले व्यवहार को ध्यान में रखते हैं. इससे यह अनुमान लगाया जाता है कि उपयोगकर्ता को आने वाले समय में ऐप्लिकेशन के किस कॉन्टेंट में दिलचस्पी हो सकती है. इसके लिए, ये मॉडल कई अन्य उपयोगकर्ताओं के कुल व्यवहार के आधार पर ट्रेन किए जाते हैं.
इस ट्यूटोरियल में बताया गया है कि Firebase Analytics की मदद से, अपने ऐप्लिकेशन के उपयोगकर्ताओं से डेटा कैसे पाएं. साथ ही, उस डेटा से सुझाव देने के लिए मशीन लर्निंग मॉडल कैसे बनाएं. इसके बाद, Android ऐप्लिकेशन में उस मॉडल का इस्तेमाल करके, अनुमान कैसे लगाएं और सुझाव कैसे पाएं. खास तौर पर, हमारे सुझावों में यह बताया जाएगा कि किसी व्यक्ति ने पहले कौनसी फ़िल्में पसंद की हैं. इससे यह अनुमान लगाया जा सकेगा कि वह कौनसी फ़िल्में देख सकता है.
आपको क्या सीखने को मिलेगा
- उपयोगकर्ता के व्यवहार का डेटा इकट्ठा करने के लिए, Android ऐप्लिकेशन में Firebase Analytics को इंटिग्रेट करना
- उस डेटा को Google BigQuery में एक्सपोर्ट करें
- डेटा को पहले से प्रोसेस करना और TF Lite के सुझाव देने वाले मॉडल को ट्रेन करना
- TF Lite मॉडल को Firebase ML पर डिप्लॉय करना और उसे अपने ऐप्लिकेशन से ऐक्सेस करना
- उपयोगकर्ताओं को सुझाव देने के लिए, डिवाइस पर मौजूद मॉडल का इस्तेमाल करके अनुमान लगाना
आपको इन चीज़ों की ज़रूरत होगी
- Android Studio का नया वर्शन.
- सैंपल कोड.
- Android 7 या इसके बाद के वर्शन और Google Play services 9.8 या इसके बाद के वर्शन वाला टेस्ट डिवाइस या Google Play services 9.8 या इसके बाद के वर्शन वाला एम्युलेटर
- अगर किसी डिवाइस का इस्तेमाल किया जा रहा है, तो कनेक्शन केबल.
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Android ऐप्लिकेशन बनाने के अपने अनुभव को आप क्या रेटिंग देंगे?
2. सैंपल कोड पाना
कमांड लाइन से GitHub रिपॉज़िटरी को क्लोन करें.
$ git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-android.git
3. स्टार्टर ऐप्लिकेशन इंपोर्ट करना
Android Studio में, सैंपल कोड डाउनलोड ( File > Open > .../codelab-recommendations-android/start) से codelab-recommendations-android
डायरेक्ट्री () चुनें.
अब आपके पास Android Studio में, स्टार्ट प्रोजेक्ट खुला होना चाहिए.
4. Firebase कंसोल प्रोजेक्ट बनाना
नया प्रोजेक्ट बनाना
- Firebase कंसोल पर जाएं.
- प्रोजेक्ट जोड़ें (या अगर यह पहला प्रोजेक्ट है, तो प्रोजेक्ट बनाएं) को चुनें.
- प्रोजेक्ट का नाम चुनें या डालें. इसके बाद, जारी रखें पर क्लिक करें.
- पक्का करें कि "इस प्रोजेक्ट के लिए Google Analytics चालू करें" विकल्प चालू हो.
- Firebase कंसोल में, सेटअप के बाकी चरण पूरे करें. इसके बाद, प्रोजेक्ट बनाएं पर क्लिक करें. अगर किसी मौजूदा Google प्रोजेक्ट का इस्तेमाल किया जा रहा है, तो Firebase जोड़ें पर क्लिक करें.
5. Firebase जोड़ें
- अपने नए प्रोजेक्ट की खास जानकारी वाली स्क्रीन पर, Android आइकॉन पर क्लिक करके सेटअप वर्कफ़्लो लॉन्च करें.
- कोड लैब के पैकेज का नाम डालें:
com.google.firebase.codelabs.recommendations
- ऐप्लिकेशन रजिस्टर करें को चुनें.
अपने ऐप्लिकेशन में google-services.json फ़ाइल जोड़ना
पैकेज का नाम जोड़ने और रजिस्टर करें को चुनने के बाद, google-services.json डाउनलोड करें पर क्लिक करें. इससे आपको Firebase Android कॉन्फ़िगरेशन फ़ाइल मिल जाएगी. इसके बाद, google-services.json फ़ाइल को अपने प्रोजेक्ट की app
डायरेक्ट्री में कॉपी करें. फ़ाइल डाउनलोड होने के बाद, कंसोल में दिखाए गए अगले चरणों को छोड़ा जा सकता है. ऐसा इसलिए, क्योंकि build-android-start प्रोजेक्ट में ये चरण पहले ही पूरे कर लिए गए हैं.
अपने ऐप्लिकेशन में google-services प्लगिन जोड़ना
google-services प्लगिन, google-services.json फ़ाइल का इस्तेमाल करके आपके ऐप्लिकेशन को Firebase का इस्तेमाल करने के लिए कॉन्फ़िगर करता है. प्रोजेक्ट में मौजूद build.gradle.kts फ़ाइलों में, यहां दी गई लाइनें पहले से ही जोड़ी जानी चाहिए. पुष्टि करने के लिए देखें:
app/build.grade.kts
plugins {
id("com.google.gms.google-services")
}
build.grade.kts
plugins {
id("com.google.gms.google-services") version "4.3.15" apply false
}
अपने प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करना
यह पक्का करने के लिए कि आपके ऐप्लिकेशन के लिए सभी डिपेंडेंसी उपलब्ध हैं, आपको इस समय अपने प्रोजेक्ट को ग्रेडल फ़ाइलों के साथ सिंक करना चाहिए. Android Studio टूलबार से, File > Sync Project with Gradle Files को चुनें.
6. स्टार्टर ऐप्लिकेशन चलाना
प्रोजेक्ट को Android Studio में इंपोर्ट करने और google-services
प्लगिन को अपनी JSON फ़ाइल के साथ कॉन्फ़िगर करने के बाद, अब ऐप्लिकेशन को पहली बार चलाया जा सकता है. अपने Android डिवाइस को कनेक्ट करें. इसके बाद, Android Studio टूलबार में मौजूद चलाएं ( ) पर क्लिक करें.
ऐप्लिकेशन आपके डिवाइस पर लॉन्च हो जाना चाहिए. इस समय, आपको एक ऐप्लिकेशन दिखेगा. इसमें फ़िल्मों की सूची वाला टैब, पसंद की गई फ़िल्मों वाला टैब, और सुझाव वाला टैब दिखेगा. पसंद की गई सूची में किसी फ़िल्म को जोड़ने के लिए, फ़िल्मों की सूची में मौजूद किसी फ़िल्म पर क्लिक करें. कोड लैब के बचे हुए चरणों को पूरा करने के बाद, हम 'सुझाव' टैब में जाकर, फ़िल्मों के सुझाव जनरेट कर पाएंगे.
7. ऐप्लिकेशन में Firebase Analytics जोड़ना
इस चरण में, आपको ऐप्लिकेशन में Firebase Analytics जोड़ना होगा, ताकि उपयोगकर्ता के व्यवहार का डेटा लॉग किया जा सके. इस मामले में, यह डेटा होगा कि किसी उपयोगकर्ता को कौनसी फ़िल्में पसंद हैं. इस डेटा का इस्तेमाल, सुझाव देने वाले मॉडल को ट्रेनिंग देने के लिए किया जाएगा. हालांकि, ऐसा अन्य डेटा के साथ मिलाकर किया जाएगा.
Firebase बिल ऑफ़ मटीरियल और Analytics की डिपेंडेंसी जोड़ना
अपने ऐप्लिकेशन में Firebase Analytics जोड़ने के लिए, यहां दी गई डिपेंडेंसी ज़रूरी हैं. इन्हें पहले से ही app/build.gradle.kts फ़ाइल में शामिल किया जाना चाहिए. इसकी पुष्टि करें.
app/build.grade.kts
implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-analytics-ktx")
ऐप्लिकेशन में Firebase Analytics सेट अप करना
LikedMoviesViewModel में ऐसे फ़ंक्शन होते हैं जो उपयोगकर्ता की पसंद की फ़िल्मों को सेव करते हैं. जब भी कोई उपयोगकर्ता किसी नई फ़िल्म को पसंद करता है, तो हम चाहते हैं कि Analytics में एक लॉग इवेंट भी भेजा जाए, ताकि उस 'पसंद करें' कार्रवाई को रिकॉर्ड किया जा सके.
जब कोई उपयोगकर्ता किसी फ़िल्म को पसंद करता है, तब Analytics इवेंट को रजिस्टर करने के लिए, नीचे दिए गए कोड के साथ onMovieLiked फ़ंक्शन जोड़ें.
LikedMoviesViewModel.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())
}
}
जब कोई उपयोगकर्ता, पसंद की गई फ़िल्मों की सूची में कोई फ़िल्म जोड़ता है, तब Analytics इवेंट को लॉग करने के लिए, यहां दिया गया फ़ील्ड और फ़ंक्शन जोड़ें.
LikedMoviesViewModel.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. Analytics इंटिग्रेशन की जांच करना
इस चरण में, हम ऐप्लिकेशन में Analytics इवेंट जनरेट करेंगे. साथ ही, यह पुष्टि करेंगे कि उन्हें Firebase कंसोल को भेजा जा रहा है.
Analytics की डीबग लॉगिंग चालू करना
Firebase Analytics को इस तरह से डिज़ाइन किया गया है कि इससे उपयोगकर्ता के डिवाइस की बैटरी की लाइफ़ ज़्यादा से ज़्यादा हो. यह डिवाइस पर इवेंट को बैच करेगा और उन्हें कभी-कभी ही Firebase को भेजेगा. डीबग करने के लिए, हम इस सुविधा को बंद कर सकते हैं. इससे इवेंट को रीयल टाइम में लॉग होते हुए देखा जा सकता है. इसके लिए, शेल में यह कमांड चलाएं.
टर्मिनल
adb shell setprop debug.firebase.analytics.app com.google.firebase.codelabs.recommendations
पुष्टि करना कि Analytics इवेंट जनरेट हो रहे हैं
- Android Studio में, Logcat विंडो खोलें. इससे आपको अपने ऐप्लिकेशन की लॉगिंग की जांच करने में मदद मिलेगी.
- Logcat फ़िल्टर को "Logging event" स्ट्रिंग पर सेट करें.
- पुष्टि करें कि ऐप्लिकेशन में किसी फ़िल्म को पसंद करने पर, "select_item" Analytics इवेंट ट्रिगर होते हैं.
इस समय, आपने Firebase Analytics को अपने ऐप्लिकेशन में इंटिग्रेट कर लिया है. जब उपयोगकर्ता आपके ऐप्लिकेशन का इस्तेमाल करेंगे और फ़िल्मों को पसंद करेंगे, तब उनकी पसंद को एग्रीगेट करके लॉग किया जाएगा. हम इस कोडलैब के बाकी हिस्से में, इस एग्रीगेट डेटा का इस्तेमाल सुझाव देने वाले मॉडल को ट्रेनिंग देने के लिए करेंगे. यहां दिया गया चरण वैकल्पिक है. इससे आपको यह देखने में मदद मिलेगी कि Logcat में दिखने वाले Analytics इवेंट, Firebase कंसोल में भी स्ट्रीम हो रहे हैं. अगले पेज पर जाएं.
ज़रूरी नहीं: Firebase कंसोल में Analytics इवेंट की पुष्टि करना
- Firebase कंसोल पर जाएं.
- Analytics में जाकर, DebugView को चुनें
- ऐप्लिकेशन लॉन्च करने के लिए, Android Studio में Run को चुनें. इसके बाद, 'पसंद की गई' सूची में कुछ फ़िल्में जोड़ें.
- Firebase कंसोल के DebugView में जाकर, पुष्टि करें कि ऐप्लिकेशन में फ़िल्में जोड़ते समय ये इवेंट लॉग किए जा रहे हैं.
9. Analytics डेटा को BigQuery में एक्सपोर्ट करना
BigQuery, Google Cloud का एक प्रॉडक्ट है. इसकी मदद से, ज़्यादा से ज़्यादा डेटा की जांच और उसे प्रोसेस किया जा सकता है. इस चरण में, आपको अपने Firebase Console प्रोजेक्ट को BigQuery से कनेक्ट करना होगा, ताकि आपके ऐप्लिकेशन से जनरेट होने वाला Analytics डेटा अपने-आप BigQuery में एक्सपोर्ट हो जाए.
BigQuery से डेटा एक्सपोर्ट करने की सुविधा चालू करना
- Firebase कंसोल पर जाएं.
- प्रोजेक्ट की खास जानकारी के बगल में मौजूद, सेटिंग गियर आइकॉन को चुनें. इसके बाद, प्रोजेक्ट सेटिंग को चुनें
- इंटिग्रेशन टैब चुनें.
- BigQuery ब्लॉक में जाकर, लिंक करें या मैनेज करें को चुनें.
- Firebase को BigQuery से लिंक करने के बारे में जानकारी चरण में, आगे बढ़ें को चुनें.
- इंटिग्रेशन कॉन्फ़िगर करें सेक्शन में जाकर, Google Analytics का डेटा भेजने की सुविधा चालू करने के लिए स्विच पर क्लिक करें. इसके बाद, BigQuery से लिंक करें को चुनें.
आपने अब Firebase कंसोल प्रोजेक्ट के लिए, Firebase Analytics के इवेंट डेटा को BigQuery में अपने-आप भेजने की सुविधा चालू कर दी है. यह प्रोसेस अपने-आप होती है. इसके लिए, आपको कुछ और करने की ज़रूरत नहीं होती. हालांकि, BigQuery में Analytics डेटासेट बनाने वाला पहला एक्सपोर्ट, 24 घंटे तक नहीं हो सकता. डेटासेट बनाने के बाद, Firebase लगातार नए Analytics इवेंट को BigQuery की इंट्राडे टेबल में एक्सपोर्ट करता है. साथ ही, पिछले दिनों के इवेंट को इवेंट टेबल में ग्रुप करता है.
सुझाव देने वाले मॉडल को ट्रेन करने के लिए, बहुत ज़्यादा डेटा की ज़रूरत होती है. हमारे पास ऐसा कोई ऐप्लिकेशन नहीं है जो बड़ी मात्रा में डेटा जनरेट करता हो. इसलिए, अगले चरण में हम BigQuery में एक सैंपल डेटासेट इंपोर्ट करेंगे, ताकि इस ट्यूटोरियल के बाकी हिस्सों में उसका इस्तेमाल किया जा सके.
10. मॉडल ट्रेनिंग का डेटा पाने के लिए BigQuery का इस्तेमाल करना
हमने Firebase Console को BigQuery में एक्सपोर्ट करने के लिए कनेक्ट कर दिया है. अब हमारे ऐप्लिकेशन के Analytics इवेंट का डेटा, कुछ समय बाद BigQuery Console में अपने-आप दिखने लगेगा. इस ट्यूटोरियल के लिए कुछ शुरुआती डेटा पाने के लिए, इस चरण में हम एक मौजूदा सैंपल डेटासेट को आपकी BigQuery कंसोल में इंपोर्ट करेंगे. इसका इस्तेमाल, सुझाव देने वाले मॉडल को ट्रेन करने के लिए किया जाएगा.
BigQuery में सैंपल डेटासेट इंपोर्ट करना
- Google Cloud Console में BigQuery डैशबोर्ड पर जाएं.
- मेन्यू में जाकर, अपने प्रोजेक्ट का नाम चुनें.
- जानकारी देखने के लिए, BigQuery के बाईं ओर मौजूद नेविगेशन में सबसे नीचे, अपने प्रोजेक्ट का नाम चुनें.
- डेटासेट बनाने वाला पैनल खोलने के लिए, डेटासेट बनाएं को चुनें.
- डेटासेट आईडी के लिए, ‘firebase_recommendations_dataset' डालें. इसके बाद, डेटासेट बनाएं चुनें.
- नया डेटासेट, बाईं ओर मौजूद मेन्यू में प्रोजेक्ट के नाम के नीचे दिखेगा. उसे क्लिक करें.
- टेबल बनाने का पैनल खोलने के लिए, टेबल बनाएं को चुनें.
- इससे टेबल बनाएं के लिए, ‘Google Cloud Storage' चुनें.
- GCS बकेट से फ़ाइल चुनें फ़ील्ड में, ‘gs://firebase-recommendations/recommendations-test/formatted_data_filtered.txt' डालें.
- फ़ाइल फ़ॉर्मैट ड्रॉप-डाउन में, ‘JSONL' चुनें.
- टेबल का नाम के लिए, ‘recommendations_table' डालें.
- स्कीमा > अपने-आप पता लगने की सुविधा > स्कीमा और इनपुट पैरामीटर के नीचे मौजूद बॉक्स पर सही का निशान लगाएं
- टेबल बनाएं को चुनें
सैंपल डेटासेट एक्सप्लोर करना
इस चरण में, आपके पास स्कीमा देखने और इस डेटासेट की झलक देखने का विकल्प होता है.
- बाईं ओर मौजूद मेन्यू में, firebase-recommendations-dataset को चुनें, ताकि इसमें मौजूद टेबल को बड़ा किया जा सके.
- टेबल स्कीमा देखने के लिए, recommendations-table टेबल चुनें.
- इस टेबल में मौजूद Analytics इवेंट का असल डेटा देखने के लिए, झलक देखें को चुनें.
सेवा खाते के क्रेडेंशियल बनाना
अब हम अपने Google Cloud Console प्रोजेक्ट में सेवा खाते के क्रेडेंशियल बनाएंगे. इनका इस्तेमाल हम अगले चरण में Colab एनवायरमेंट में कर सकते हैं, ताकि BigQuery डेटा को ऐक्सेस और लोड किया जा सके.
- पक्का करें कि आपके Google Cloud प्रोजेक्ट के लिए बिलिंग चालू हो.
- BigQuery और BigQuery Storage API को चालू करें. < यहां क्लिक करें>
- सेवा खाते की कुंजी बनाएं पेज पर जाएं.
- सेवा खाता सूची में जाकर, नया सेवा खाता चुनें.
- सेवा खाते का नाम फ़ील्ड में, कोई नाम डालें.
- भूमिका सूची में जाकर, प्रोजेक्ट > मालिक चुनें.
- बनाएं पर क्लिक करें. आपके कंप्यूटर पर एक JSON फ़ाइल डाउनलोड होगी, जिसमें आपकी कुंजी मौजूद होगी.
अगले चरण में, हम इस डेटा को प्रीप्रोसेस करने और सुझाव देने वाले मॉडल को ट्रेन करने के लिए, Google Colab का इस्तेमाल करेंगे.
11. डेटा को पहले से प्रोसेस करना और सुझाव देने वाले मॉडल को ट्रेन करना
इस चरण में, हम Colab notebook का इस्तेमाल करके यह काम करेंगे:
- BigQuery डेटा को Colab नोटबुक में इंपोर्ट करना
- डेटा को प्रीप्रोसेस करना, ताकि उसे मॉडल ट्रेनिंग के लिए तैयार किया जा सके
- Analytics डेटा के आधार पर, सुझाव देने वाले मॉडल को ट्रेन करना
- मॉडल को TF Lite मॉडल के तौर पर एक्सपोर्ट करना
- मॉडल को Firebase कंसोल पर डिप्लॉय करो, ताकि हम उसे अपने ऐप्लिकेशन में इस्तेमाल कर सकें
Colab ट्रेनिंग नोटबुक लॉन्च करने से पहले, हम Firebase Model Management API चालू करेंगे, ताकि Colab, ट्रेन किए गए मॉडल को हमारे Firebase कंसोल में डिप्लॉय कर सके.
Firebase Model Management API चालू करना
अपने एमएल मॉडल को सेव करने के लिए बकेट बनाना
Firebase कंसोल में, स्टोरेज पर जाएं और शुरू करें पर क्लिक करें.
बकेट सेट अप करने के लिए, बातचीत में दिए गए निर्देशों का पालन करें.
Firebase ML API चालू करना
Google Cloud Console पर Firebase ML API पेज पर जाएं और 'चालू करें' पर क्लिक करें.
मॉडल को ट्रेन और डिप्लॉय करने के लिए, Colab notebook का इस्तेमाल करना
नीचे दिए गए लिंक का इस्तेमाल करके, Colab नोटबुक खोलें और उसमें दिए गए चरणों को पूरा करें. Colab नोटबुक में दिए गए चरणों को पूरा करने के बाद, आपके पास Firebase कंसोल में डिप्लॉय की गई टीएफ़ लाइट मॉडल फ़ाइल होगी. इसे हम अपने ऐप्लिकेशन में सिंक कर सकते हैं.
Colab में खोलें
12. अपने ऐप्लिकेशन में मॉडल डाउनलोड करना
इस चरण में, हम अपने ऐप्लिकेशन में बदलाव करेंगे, ताकि हम Firebase Machine Learning से, अभी-अभी ट्रेन किए गए मॉडल को डाउनलोड कर सकें.
Firebase ML डिपेंडेंसी जोड़ना
अपने ऐप्लिकेशन में Firebase Machine Learning मॉडल का इस्तेमाल करने के लिए, यह डिपेंडेंसी ज़रूरी है. इसे पहले से जोड़ा जाना चाहिए. इसकी पुष्टि करें.
app/build.grade.kts
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")
Firebase Model Manager API की मदद से मॉडल डाउनलोड करना
मॉडल डाउनलोड होने की शर्तें सेट अप करने के लिए, नीचे दिए गए कोड को 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 का इस्तेमाल करके, अपने ऐप्लिकेशन में सुझाव देने की सुविधा बनाई हो. ध्यान दें कि इस कोडलैब में दिखाई गई तकनीकों और पाइपलाइन का इस्तेमाल, अन्य तरह के सुझाव देने के लिए भी किया जा सकता है.
हमने क्या-क्या कवर किया है
- Firebase ML
- Firebase Analytics
- Analytics इवेंट को BigQuery में एक्सपोर्ट करना
- आंकड़ों से जुड़े इवेंट को पहले से प्रोसेस करना
- सुझाव देने वाले TensorFlow मॉडल को ट्रेनिंग देना
- मॉडल एक्सपोर्ट करना और उसे Firebase कंसोल में डिप्लॉय करना
- किसी ऐप्लिकेशन में फ़िल्मों के सुझाव दिखाना
अगले चरण
- अपने ऐप्लिकेशन में Firebase ML की सुझाव देने वाली सुविधाओं को लागू करें.