TensorFlow Lite और Firebase की मदद से, अपने ऐप्लिकेशन में सुझाव जोड़ना - iOS कोडलैब (कोड बनाना सीखना)

1. खास जानकारी

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

सुझावों की मदद से ऐप्लिकेशन, मशीन लर्निंग का इस्तेमाल करके हर उपयोगकर्ता को सबसे काम का कॉन्टेंट दिखा सकते हैं. ये मॉडल, उपयोगकर्ता के पिछले व्यवहार को ध्यान में रखते हैं. इससे यह अनुमान लगाया जाता है कि उपयोगकर्ता को आने वाले समय में ऐप्लिकेशन के किस कॉन्टेंट में दिलचस्पी हो सकती है. इसके लिए, ये मॉडल कई अन्य उपयोगकर्ताओं के कुल व्यवहार के आधार पर ट्रेन किए जाते हैं.

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

आपको क्या सीखने को मिलेगा

  • उपयोगकर्ता के व्यवहार का डेटा इकट्ठा करने के लिए, Android ऐप्लिकेशन में Firebase Analytics को इंटिग्रेट करना
  • उस डेटा को Google BigQuery में एक्सपोर्ट करें
  • डेटा को पहले से प्रोसेस करना और TF Lite के सुझाव देने वाले मॉडल को ट्रेन करना
  • TF Lite मॉडल को Firebase ML पर डिप्लॉय करना और उसे अपने ऐप्लिकेशन से ऐक्सेस करना
  • उपयोगकर्ताओं को सुझाव देने के लिए, डिवाइस पर मौजूद मॉडल का इस्तेमाल करके अनुमान लगाना

आपको इनकी ज़रूरत होगी

  • Xcode 11 (या इसके बाद का वर्शन)
  • CocoaPods 1.9.1 (या इसके बाद का वर्शन)

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें

iOS ऐप्लिकेशन बनाने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती स्तर सामान्य स्तर एडवांस लेवल

2. Firebase कंसोल प्रोजेक्ट बनाना

प्रोजेक्ट में Firebase जोड़ना

  1. Firebase कंसोल पर जाएं.
  2. नया प्रोजेक्ट बनाएं चुनें और अपने प्रोजेक्ट का नाम "Firebase ML iOS Codelab" रखें.

3. सैंपल प्रोजेक्ट पाना

कोड डाउनलोड करना

सबसे पहले, सैंपल प्रोजेक्ट को क्लोन करें और प्रोजेक्ट डायरेक्ट्री में pod update चलाएं:

git clone https://github.com/FirebaseExtended/codelab-contentrecommendation-ios.git
cd codelab-contentrecommendation-ios/start
pod install --repo-update

अगर आपने git इंस्टॉल नहीं किया है, तो सैंपल प्रोजेक्ट को GitHub पेज से या इस लिंक पर क्लिक करके भी डाउनलोड किया जा सकता है. प्रोजेक्ट डाउनलोड करने के बाद, इसे Xcode में चलाएं और सुझाव को आज़माएं. इससे आपको पता चलेगा कि यह कैसे काम करता है.

Firebase सेट अप करना

नया Firebase प्रोजेक्ट बनाने के लिए, दस्तावेज़ पढ़ें. प्रोजेक्ट मिलने के बाद, Firebase कंसोल से अपने प्रोजेक्ट की GoogleService-Info.plist फ़ाइल डाउनलोड करें. इसके बाद, उसे Xcode प्रोजेक्ट के रूट में खींचें और छोड़ें.

4a923d5c7ae0d8f3.png

Firebase को अपने Podfile में जोड़ें और pod install चलाएं.

pod 'FirebaseAnalytics'
pod 'FirebaseMLModelDownloader', '9.3.0-beta'
pod 'TensorFlowLiteSwift'

अपने AppDelegate के didFinishLaunchingWithOptions तरीके में, फ़ाइल में सबसे ऊपर Firebase इंपोर्ट करें

import FirebaseCore

साथ ही, Firebase को कॉन्फ़िगर करने के लिए एक कॉल जोड़ें.

FirebaseApp.configure()

प्रोजेक्ट को फिर से चलाएं, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन सही तरीके से कॉन्फ़िगर किया गया हो और लॉन्च होने पर क्रैश न हो.

  1. पक्का करें कि "इस प्रोजेक्ट के लिए Google Analytics चालू करें" विकल्प चालू हो.
  2. Firebase कंसोल में, सेटअप के बाकी चरण पूरे करें. इसके बाद, प्रोजेक्ट बनाएं पर क्लिक करें. अगर किसी मौजूदा Google प्रोजेक्ट का इस्तेमाल किया जा रहा है, तो Firebase जोड़ें पर क्लिक करें.

4. ऐप्लिकेशन में Firebase Analytics जोड़ना

इस चरण में, आपको ऐप्लिकेशन में Firebase Analytics जोड़ना होगा, ताकि उपयोगकर्ता के व्यवहार का डेटा लॉग किया जा सके. इस मामले में, यह डेटा होगा कि किसी उपयोगकर्ता को कौनसी फ़िल्में पसंद हैं. इस डेटा का इस्तेमाल, सुझाव देने वाले मॉडल को ट्रेनिंग देने के लिए किया जाएगा. हालांकि, ऐसा अन्य डेटा के साथ मिलाकर किया जाएगा.

ऐप्लिकेशन में Firebase Analytics सेट अप करना

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

जब कोई उपयोगकर्ता किसी फ़िल्म को पसंद करता है, तब Analytics इवेंट रजिस्टर करने के लिए यहां दिया गया कोड जोड़ें.

AllMoviesCollectionViewController.swift

import FirebaseAnalytics
//


override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//

if movie.liked == nil {
      movie.liked = true
      Analytics.logEvent(AnalyticsEventSelectItem, parameters: [AnalyticsParameterItemID: movie.id])
    } else {
      movie.liked?.toggle()
    }
       
}

5. Analytics इंटिग्रेशन की जांच करना

इस चरण में, हम ऐप्लिकेशन में Analytics इवेंट जनरेट करेंगे. साथ ही, यह पुष्टि करेंगे कि उन्हें Firebase कंसोल को भेजा जा रहा है.

Analytics की डीबग लॉगिंग चालू करना

आम तौर पर, आपके ऐप्लिकेशन से लॉग किए गए इवेंट को एक घंटे के लिए बैच किया जाता है और एक साथ अपलोड किया जाता है. इस तरीके से, असली उपयोगकर्ताओं के डिवाइसों की बैटरी की बचत होती है और नेटवर्क डेटा का इस्तेमाल कम होता है. हालांकि, Analytics को लागू करने की पुष्टि करने के लिए (और DebugView रिपोर्ट में Analytics देखने के लिए), अपने डेवलपमेंट डिवाइस पर डीबग मोड चालू किया जा सकता है. इससे इवेंट को कम से कम समय में अपलोड किया जा सकेगा.

अपने डेवलपमेंट डिवाइस पर Analytics डीबग मोड चालू करने के लिए, Xcode में यहां दिया गया कमांड लाइन तर्क डालें:

-FIRDebugEnabled

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

ज़रूरी नहीं: Firebase कंसोल में Analytics इवेंट की पुष्टि करना

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

6. Analytics डेटा को BigQuery में एक्सपोर्ट करना

BigQuery, Google Cloud का एक प्रॉडक्ट है. इसकी मदद से, ज़्यादा से ज़्यादा डेटा की जांच और उसे प्रोसेस किया जा सकता है. इस चरण में, आपको अपने Firebase Console प्रोजेक्ट को BigQuery से कनेक्ट करना होगा, ताकि आपके ऐप्लिकेशन से जनरेट होने वाला Analytics डेटा अपने-आप BigQuery में एक्सपोर्ट हो जाए.

BigQuery से डेटा एक्सपोर्ट करने की सुविधा चालू करना

  1. Firebase कंसोल पर जाएं.
  2. प्रोजेक्ट की खास जानकारी के बगल में मौजूद, सेटिंग गियर आइकॉन को चुनें. इसके बाद, प्रोजेक्ट सेटिंग को चुनें
  3. इंटिग्रेशन टैब चुनें.
  4. BigQuery ब्लॉक में जाकर, लिंक करें या मैनेज करें को चुनें.
  5. Firebase को BigQuery से लिंक करने के बारे में जानकारी चरण में, आगे बढ़ें को चुनें.
  6. इंटिग्रेशन कॉन्फ़िगर करें सेक्शन में जाकर, Google Analytics का डेटा भेजने की सुविधा चालू करने के लिए स्विच पर क्लिक करें. इसके बाद, BigQuery से लिंक करें को चुनें.

आपने अब Firebase कंसोल प्रोजेक्ट के लिए, Firebase Analytics के इवेंट डेटा को BigQuery में अपने-आप भेजने की सुविधा चालू कर दी है. यह प्रोसेस अपने-आप होती है. इसके लिए, आपको कुछ और करने की ज़रूरत नहीं होती. हालांकि, BigQuery में Analytics डेटासेट बनाने वाला पहला एक्सपोर्ट, 24 घंटे तक नहीं हो सकता. डेटासेट बनाने के बाद, Firebase लगातार नए Analytics इवेंट को BigQuery की इंट्राडे टेबल में एक्सपोर्ट करता है. साथ ही, पिछले दिनों के इवेंट को इवेंट टेबल में ग्रुप करता है.

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

7. मॉडल ट्रेनिंग का डेटा पाने के लिए BigQuery का इस्तेमाल करना

हमने Firebase Console को BigQuery में एक्सपोर्ट करने के लिए कनेक्ट कर दिया है. अब हमारे ऐप्लिकेशन के Analytics इवेंट का डेटा, कुछ समय बाद BigQuery Console में अपने-आप दिखने लगेगा. इस ट्यूटोरियल के लिए कुछ शुरुआती डेटा पाने के लिए, इस चरण में हम एक मौजूदा सैंपल डेटासेट को आपकी BigQuery कंसोल में इंपोर्ट करेंगे. इसका इस्तेमाल, सुझाव देने वाले मॉडल को ट्रेन करने के लिए किया जाएगा.

BigQuery में सैंपल डेटासेट इंपोर्ट करना

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

सैंपल डेटासेट एक्सप्लोर करना

इस चरण में, आपके पास स्कीमा देखने और इस डेटासेट की झलक देखने का विकल्प होता है.

  1. बाईं ओर मौजूद मेन्यू में, firebase-recommendations-dataset को चुनें, ताकि इसमें मौजूद टेबल को बड़ा किया जा सके.
  2. टेबल स्कीमा देखने के लिए, recommendations-table टेबल चुनें.
  3. इस टेबल में मौजूद Analytics इवेंट का असल डेटा देखने के लिए, झलक देखें को चुनें.

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

अब हम अपने Google Cloud Console प्रोजेक्ट में सेवा खाते के क्रेडेंशियल बनाएंगे. इनका इस्तेमाल हम अगले चरण में Colab एनवायरमेंट में कर सकते हैं, ताकि BigQuery डेटा को ऐक्सेस और लोड किया जा सके.

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

अगले चरण में, हम इस डेटा को प्रीप्रोसेस करने और सुझाव देने वाले मॉडल को ट्रेन करने के लिए, Google Colab का इस्तेमाल करेंगे.

8. डेटा को पहले से प्रोसेस करना और सुझाव देने वाले मॉडल को ट्रेन करना

इस चरण में, हम Colab notebook का इस्तेमाल करके यह काम करेंगे:

  1. BigQuery डेटा को Colab नोटबुक में इंपोर्ट करना
  2. डेटा को प्रीप्रोसेस करना, ताकि उसे मॉडल ट्रेनिंग के लिए तैयार किया जा सके
  3. Analytics डेटा के आधार पर, सुझाव देने वाले मॉडल को ट्रेन करना
  4. मॉडल को TF Lite मॉडल के तौर पर एक्सपोर्ट करना
  5. मॉडल को Firebase कंसोल पर डिप्लॉय करो, ताकि हम उसे अपने ऐप्लिकेशन में इस्तेमाल कर सकें

Colab ट्रेनिंग नोटबुक लॉन्च करने से पहले, हम Firebase Model Management API चालू करेंगे, ताकि Colab, ट्रेन किए गए मॉडल को हमारे Firebase कंसोल में डिप्लॉय कर सके.

Firebase Model Management API चालू करना

अपने एमएल मॉडल को सेव करने के लिए बकेट बनाना

Firebase कंसोल में, स्टोरेज पर जाएं और शुरू करें पर क्लिक करें. fbbea78f0eb3dc9f.png

बकेट सेट अप करने के लिए, बातचीत में दिए गए निर्देशों का पालन करें.

19517c0d6d2aa14d.png

Firebase ML API चालू करना

Google Cloud Console पर Firebase ML API पेज पर जाएं और 'चालू करें' पर क्लिक करें.

मॉडल को ट्रेन और डिप्लॉय करने के लिए, Colab notebook का इस्तेमाल करना

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

Colab में खोलें

9. अपने ऐप्लिकेशन में मॉडल डाउनलोड करना

इस चरण में, हम अपने ऐप्लिकेशन में बदलाव करेंगे, ताकि हम Firebase Machine Learning से, अभी-अभी ट्रेन किए गए मॉडल को डाउनलोड कर सकें.

Firebase ML डिपेंडेंसी जोड़ना

अपने ऐप्लिकेशन में Firebase Machine Learning मॉडल का इस्तेमाल करने के लिए, यह डिपेंडेंसी ज़रूरी है. इसे पहले से जोड़ा जाना चाहिए. इसकी पुष्टि करें.

Podfile

import FirebaseCore
import FirebaseMLModelDownloader

Firebase Model Manager API की मदद से मॉडल डाउनलोड करना

मॉडल डाउनलोड होने की शर्तें सेट अप करने के लिए, नीचे दिए गए कोड को ModelLoader.swift में कॉपी करें. साथ ही, रिमोट मॉडल को हमारे ऐप्लिकेशन के साथ सिंक करने के लिए, डाउनलोड करने का टास्क बनाएं.

ModelLoader.swift

static func downloadModel(named name: String,
                            completion: @escaping (CustomModel?, DownloadError?) -> Void) {
    guard FirebaseApp.app() != nil else {
      completion(nil, .firebaseNotInitialized)
      return
    }
    guard success == nil && failure == nil else {
      completion(nil, .downloadInProgress)
      return
    }
    let conditions = ModelDownloadConditions(allowsCellularAccess: false)
    ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
            switch (result) {
            case .success(let customModel):
                    // Download complete.
                    // The CustomModel object contains the local path of the model file,
                    // which you can use to instantiate a TensorFlow Lite classifier.
                    return completion(customModel, nil)
            case .failure(let error):
                // Download was unsuccessful. Notify error message.
              completion(nil, .downloadFailed(underlyingError: error))
            }
    }
  }

10. अपने ऐप्लिकेशन में TensorFlow Lite के सुझाव देने वाले मॉडल को इंटिग्रेट करना

TensorFlow Lite रनटाइम की मदद से, ऐप्लिकेशन में अपने मॉडल का इस्तेमाल करके सुझाव जनरेट किए जा सकते हैं. पिछले चरण में, हमने डाउनलोड की गई मॉडल फ़ाइल की मदद से, TFLite इंटरप्रेटर को शुरू किया था. इस चरण में, हम सबसे पहले एक डिक्शनरी और लेबल लोड करेंगे, ताकि अनुमान लगाने के चरण में हमारे मॉडल के साथ इनका इस्तेमाल किया जा सके. इसके बाद, हम प्री-प्रोसेसिंग जोड़ेंगे, ताकि हमारे मॉडल के लिए इनपुट जनरेट किए जा सकें. साथ ही, हम पोस्ट-प्रोसेसिंग जोड़ेंगे, ताकि हम अनुमान लगाने के चरण से नतीजे निकाल सकें.

डिक्शनरी और लेबल लोड करें

सुझाव देने वाले मॉडल के ज़रिए, सुझाव के तौर पर दिखाए जाने वाले आइटम जनरेट करने के लिए इस्तेमाल किए गए लेबल, ऐसेट फ़ोल्डर में मौजूद sorted_movie_vocab.json फ़ाइल में दिए गए हैं. इन कैंडिडेट को लोड करने के लिए, यहां दिया गया कोड कॉपी करें.

RecommendationsViewController.swift

  func getMovies() -> [MovieItem] {
    let barController = self.tabBarController as! TabBarController
    return barController.movies
  }

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

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

RecommendationsViewController.swift

  // Given a list of selected items, preprocess to get tflite input.
  func preProcess() -> Data {
    let likedMovies = getLikedMovies().map { (MovieItem) -> Int32 in
      return MovieItem.id
    }
    var inputData = Data(copyingBufferOf: Array(likedMovies.prefix(10)))

    // Pad input data to have a minimum of 10 context items (4 bytes each)
    while inputData.count < 10*4 {
      inputData.append(0)
    }
    return inputData
  }

सुझाव जनरेट करने के लिए इंटरप्रेटर को चलाना

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

RecommendationsViewController.swift

import TensorFlowLite

RecommendationsViewController.swift

 private var interpreter: Interpreter?

 func loadModel() {
    // Download the model from Firebase
    print("Fetching recommendations model...")
    ModelDownloader.fetchModel(named: "recommendations") { (filePath, error) in
      guard let path = filePath else {
        if let error = error {
          print(error)
        }
        return
      }
      print("Recommendations model download complete")
      self.loadInterpreter(path: path)
    }
  }

 func loadInterpreter(path: String) {
    do {
      interpreter = try Interpreter(modelPath: path)

      // Allocate memory for the model's input `Tensor`s.
      try interpreter?.allocateTensors()

      let inputData = preProcess()

      // Copy the input data to the input `Tensor`.
      try self.interpreter?.copy(inputData, toInputAt: 0)

      // Run inference by invoking the `Interpreter`.
      try self.interpreter?.invoke()

      // Get the output `Tensor`
      let confidenceOutputTensor = try self.interpreter?.output(at: 0)
      let idOutputTensor = try self.interpreter?.output(at: 1)

      // Copy output to `Data` to process the inference results.
      let confidenceOutputSize = confidenceOutputTensor?.shape.dimensions.reduce(1, {x, y in x * y})

      let idOutputSize = idOutputTensor?.shape.dimensions.reduce(1, {x, y in x * y})

      let confidenceResults =
        UnsafeMutableBufferPointer<Float32>.allocate(capacity: confidenceOutputSize!)
      let idResults =
        UnsafeMutableBufferPointer<Int32>.allocate(capacity: idOutputSize!)
      _ = confidenceOutputTensor?.data.copyBytes(to: confidenceResults)
      _ = idOutputTensor?.data.copyBytes(to: idResults)

      postProcess(idResults, confidenceResults)

      print("Successfully ran inference")
      DispatchQueue.main.async {
        self.tableView.reloadData()
      }
    } catch {
      print("Error occurred creating model interpreter: \(error)")
    }
  }

प्रोसेस होने के बाद की सेटिंग लागू करना

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

RecommendationsViewController.swift

  // Postprocess to get results from tflite inference.
  func postProcess(_ idResults: UnsafeMutableBufferPointer<Int32>, _ confidenceResults: UnsafeMutableBufferPointer<Float32>) {
    for i in 0..<10 {
      let id = idResults[i]
      let movieIdx = getMovies().firstIndex { $0.id == id }
      let title = getMovies()[movieIdx!].title
      recommendations.append(Recommendation(title: title, confidence: confidenceResults[i]))
    }
  }

अपने ऐप्लिकेशन की जांच करें!

ऐप्लिकेशन को फिर से चलाएं. कुछ फ़िल्में चुनने पर, यह अपने-आप नया मॉडल डाउनलोड कर लेगा और सुझाव जनरेट करना शुरू कर देगा!

11. बधाई हो!

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

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

  • Firebase ML
  • Firebase Analytics
  • Analytics इवेंट को BigQuery में एक्सपोर्ट करना
  • आंकड़ों से जुड़े इवेंट को पहले से प्रोसेस करना
  • सुझाव देने वाले TensorFlow मॉडल को ट्रेनिंग देना
  • मॉडल एक्सपोर्ट करना और उसे Firebase कंसोल में डिप्लॉय करना
  • किसी ऐप्लिकेशन में फ़िल्मों के सुझाव दिखाना

अगले चरण

  • अपने ऐप्लिकेशन में Firebase ML की सुझाव देने वाली सुविधाओं को लागू करें.

ज़्यादा जानें

क्या आपका कोई सवाल है?

समस्याओं की शिकायत करना