TensorFlow Lite এবং Firebase - iOS Codelab- এর মাধ্যমে আপনার অ্যাপে সুপারিশ যোগ করুন

1। সংক্ষিপ্ত বিবরণ

TensorFlow Lite এবং Firebase কোডল্যাবের সাথে সুপারিশগুলিতে স্বাগতম। এই কোডল্যাবে আপনি আপনার অ্যাপে একটি সুপারিশ মডেল স্থাপন করতে TensorFlow Lite এবং Firebase ব্যবহার করতে শিখবেন। এই codelab এই TensorFlow লাইট উপর ভিত্তি করে তৈরি উদাহরণ

প্রস্তাবনাগুলি অ্যাপগুলিকে প্রতিটি ব্যবহারকারীর জন্য সবচেয়ে প্রাসঙ্গিক সামগ্রী বুদ্ধিমত্তার সাথে পরিবেশন করতে মেশিন লার্নিং ব্যবহার করার অনুমতি দেয়। অন্যান্য ব্যবহারকারীদের একটি বৃহৎ সংখ্যক সমষ্টিগত আচরণের উপর প্রশিক্ষিত একটি মডেল ব্যবহার করে ব্যবহারকারী ভবিষ্যতে ইন্টারঅ্যাক্ট করতে পছন্দ করতে পারে এমন অ্যাপের বিষয়বস্তুর পরামর্শ দেওয়ার জন্য ব্যবহারকারীর অতীতের আচরণ বিবেচনা করে।

এই টিউটোরিয়ালটি দেখায় কিভাবে Firebase অ্যানালিটিক্সের মাধ্যমে আপনার অ্যাপের ব্যবহারকারীদের কাছ থেকে ডেটা প্রাপ্ত করতে হয়, সেই ডেটা থেকে সুপারিশের জন্য একটি মেশিন লার্নিং মডেল তৈরি করতে হয় এবং তারপরে অনুমান চালানোর জন্য এবং সুপারিশগুলি পেতে iOS অ্যাপে সেই মডেলটি ব্যবহার করতে হয়। বিশেষ করে, আমাদের সুপারিশগুলি পরামর্শ দেবে যে ব্যবহারকারীরা আগে পছন্দ করেছেন এমন চলচ্চিত্রগুলির তালিকার ভিত্তিতে কোন ব্যবহারকারী সম্ভবত কোন চলচ্চিত্রগুলি দেখবেন৷

আপনি কি শিখবেন

  • ব্যবহারকারীর আচরণের ডেটা সংগ্রহ করতে একটি অ্যান্ড্রয়েড অ্যাপে Firebase অ্যানালিটিক্সকে একীভূত করুন
  • Google Big Query-এ সেই ডেটা এক্সপোর্ট করুন
  • ডেটা প্রি-প্রসেস করুন এবং একটি TF Lite সুপারিশ মডেল প্রশিক্ষণ দিন
  • TF Lite মডেলটিকে Firebase ML-এ স্থাপন করুন এবং আপনার অ্যাপ থেকে এটি অ্যাক্সেস করুন
  • ব্যবহারকারীদের সুপারিশ করার জন্য মডেল ব্যবহার করে ডিভাইস ইনফারেন্সে চালান

আপনি কি প্রয়োজন হবে

  • Xcode 11 (বা উচ্চতর)
  • CocoaPods 1.9.1 (বা উচ্চতর)

আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন

আইওএস অ্যাপ তৈরির বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

2. ফায়ারবেস কনসোল প্রকল্প তৈরি করুন

প্রকল্পে Firebase যোগ করুন

  1. যান Firebase কনসোল
  2. নতুন প্রকল্প তৈরি করুন এবং আপনার প্রকল্পের "Firebase এমএল আইওএস Codelab" নাম নির্বাচন করুন।

3. নমুনা প্রকল্প পান

কোডটি ডাউনলোড করুন

নমুনা প্রকল্পের ক্লোনিং এবং চলমান দ্বারা শুরু করুন pod update প্রকল্পের ডিরেক্টরির মধ্যে:

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

আপনি Git ইনস্টল না থাকে, তাহলে আপনি তার GitHub পাতা থেকে বা ক্লিক করে নমুনা প্রকল্পের বিনামূল্যে ডাউনলোড করতে পারেন এই লিঙ্কে । একবার আপনি প্রকল্পটি ডাউনলোড করার পরে, এটিকে Xcode-এ চালান এবং এটি কীভাবে কাজ করে তার অনুভূতি পেতে সুপারিশের সাথে খেলুন।

Firebase সেট আপ করুন

অনুসরণ ডকুমেন্টেশন একটি নতুন Firebase প্রকল্পের তৈরি করুন। একবার আপনি আপনার প্রকল্পের পেয়েছেন, আপনার প্রকল্পের ডাউনলোড GoogleService-Info.plist থেকে ফাইল Firebase কনসোল Xcode প্রকল্পের রুট প্রয়োজন এবং টেনে আনুন।

4a923d5c7ae0d8f3.png

আপনার Podfile এ Firebase যোগ করুন এবং পড ইনস্টল চালান।

pod 'Firebase/Analytics'
pod 'Firebase/MLCommon'
pod 'Firebase/MLModelInterpreter'

আপনার AppDelegate এর didFinishLaunchingWithOptions পদ্ধতি, ফাইল উপরের Firebase আমদানি

import Firebase

এবং Firebase কনফিগার করতে একটি কল যোগ করুন।

FirebaseApp.configure()

অ্যাপটি সঠিকভাবে কনফিগার করা হয়েছে এবং লঞ্চের সময় ক্র্যাশ না হয় তা নিশ্চিত করতে প্রকল্পটি আবার চালান।

  1. নিশ্চিত করুন যে "এই প্রকল্পের জন্য Google Analytics সক্ষম করুন" সক্ষম করা আছে৷
  2. Firebase কনসোলে অবশিষ্ট সেটআপ পদক্ষেপগুলি অনুসরণ করুন, তারপরে প্রজেক্ট তৈরি করুন (বা যদি আপনি একটি বিদ্যমান Google প্রকল্প ব্যবহার করেন তবে Firebase যোগ করুন) ক্লিক করুন।

4. অ্যাপে Firebase Analytics যোগ করুন

এই ধাপে, আপনি ব্যবহারকারীর আচরণের ডেটা লগ করার জন্য অ্যাপে Firebase অ্যানালিটিক্স যোগ করবেন (এই ক্ষেত্রে, ব্যবহারকারী কোন সিনেমা পছন্দ করেন)। সুপারিশ মডেল প্রশিক্ষণের জন্য ভবিষ্যতের ধাপে এই ডেটা সমষ্টিগতভাবে ব্যবহার করা হবে।

অ্যাপে Firebase Analytics সেট আপ করুন

LikedMoviesViewModel চলচ্চিত্র ব্যবহারকারী লেগেছে সঞ্চয় করতে ফাংশন ধারণ করে। ব্যবহারকারী যখনই একটি নতুন চলচ্চিত্র পছন্দ করেন, আমরা সেই মত রেকর্ড করার জন্য একটি বিশ্লেষণ লগ ইভেন্টও পাঠাতে চাই।

যখন ব্যবহারকারী একটি মুভিতে ক্লিক করেন তখন একটি বিশ্লেষণ ইভেন্ট নিবন্ধন করতে নীচের কোডটি যোগ করুন৷

AllMoviesCollectionViewController.swift

import Firebase
//


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. আপনার অ্যানালিটিক্স ইন্টিগ্রেশন পরীক্ষা করুন

এই ধাপে, আমরা অ্যাপে অ্যানালিটিক্স ইভেন্ট তৈরি করব এবং যাচাই করব যে সেগুলি Firebase কনসোলে পাঠানো হচ্ছে।

Analytics ডিবাগ লগিং সক্ষম করুন

সাধারণত, আপনার অ্যাপ দ্বারা লগ করা ইভেন্টগুলি প্রায় এক ঘন্টার মধ্যে একসাথে ব্যাচ করা হয় এবং একসাথে আপলোড করা হয়। এই পদ্ধতিটি শেষ ব্যবহারকারীদের ডিভাইসে ব্যাটারি সংরক্ষণ করে এবং নেটওয়ার্ক ডেটা ব্যবহার হ্রাস করে। যাইহোক, আপনার অ্যানালিটিক্স ইমপ্লিমেন্টেশন যাচাই করার উদ্দেশ্যে (এবং, ডিবাগভিউ রিপোর্টে আপনার অ্যানালিটিক্স দেখার জন্য), আপনি ন্যূনতম বিলম্বের সাথে ইভেন্টগুলি আপলোড করতে আপনার ডেভেলপমেন্ট ডিভাইসে ডিবাগ মোড চালু করতে পারেন।

আপনার ডেভেলপমেন্ট ডিভাইসে অ্যানালিটিক্স ডিবাগ মোড সক্ষম করতে, Xcode-এ নিম্নলিখিত কমান্ড লাইন আর্গুমেন্ট উল্লেখ করুন:

-FIRDebugEnabled

এই মুহুর্তে, আপনি সফলভাবে আপনার অ্যাপে Firebase Analytics একত্রিত করেছেন। ব্যবহারকারীরা আপনার অ্যাপ ব্যবহার করে এবং সিনেমা পছন্দ করে, তাদের লাইকগুলি সামগ্রিকভাবে লগ ইন করা হবে। আমরা আমাদের সুপারিশ মডেল প্রশিক্ষণের জন্য এই কোডল্যাবের বাকি অংশে এই সমষ্টিগত ডেটা ব্যবহার করব। আপনি Logcat-এ যে অ্যানালিটিক্স ইভেন্টগুলি দেখেছেন তা Firebase কনসোলে স্ট্রিম করার জন্য নিম্নলিখিতটি একটি ঐচ্ছিক পদক্ষেপ। বিনা দ্বিধায় পরের পৃষ্ঠায় চলে যান।

ঐচ্ছিক: Firebase কনসোলে নিশ্চিত অ্যানালিটিক্স ঘটনা

  1. যান Firebase কনসোল
  2. অ্যানালিটিক্স অধীনে DebugView নির্বাচন করুন
  3. Xcode মাসে, অ্যাপ্লিকেশন আরম্ভ করার জন্য চালান নির্বাচন করুন ও আপনার পছন্দের লিস্টে কিছু চলচ্চিত্র যোগ করুন।
  4. Firebase কনসোলের DebugView-এ, আপনি অ্যাপে সিনেমা যোগ করার সাথে সাথে এই ইভেন্টগুলি লগ করা হচ্ছে কিনা তা যাচাই করুন।

6. বিগ কোয়েরিতে বিশ্লেষণ ডেটা রপ্তানি করুন

Big Query হল একটি Google ক্লাউড পণ্য যা আপনাকে প্রচুর পরিমাণে ডেটা পরীক্ষা এবং প্রক্রিয়া করার অনুমতি দেয়। এই ধাপে, আপনি আপনার ফায়ারবেস কনসোল প্রজেক্টকে Big Query-এর সাথে সংযুক্ত করবেন যাতে আপনার অ্যাপের দ্বারা জেনারেট করা Analytics ডেটা স্বয়ংক্রিয়ভাবে Big Query-এ রপ্তানি হয়।

Big Query এক্সপোর্ট সক্ষম করুন

  1. যান Firebase কনসোল
  2. প্রজেক্ট সারসংক্ষেপ পাশে সেটিংস গিয়ার আইকন নির্বাচন করুন, এবং তারপর প্রকল্প সেটিং নির্বাচন
  3. ঐক্যবদ্ধতা ট্যাবটি নির্বাচন করুন।
  4. লিঙ্ক নির্বাচন (অথবা পরিচালনা) BigQuery- তে ব্লক ভিতরে।
  5. BigQuery- তে ধাপে পরবর্তী লিঙ্ক Firebase সম্পর্কে নির্বাচন করুন।
  6. কনফিগার ইন্টিগ্রেশন বিভাগের অধীনে, Google Analytics ডেটা পাঠানোর সক্রিয় BigQuery- তে লিঙ্ক নির্বাচন করতে সুইচ ক্লিক করুন।

আপনি এখন আপনার Firebase কনসোল প্রকল্প সক্ষম করেছেন যাতে স্বয়ংক্রিয়ভাবে Firebase Analytics ইভেন্ট ডেটা Big Query-এ পাঠানো হয়। এটি আর কোনো ইন্টারঅ্যাকশন ছাড়াই স্বয়ংক্রিয়ভাবে হয়ে যায়, তবে, BigQuery-এ অ্যানালিটিক্স ডেটাসেট তৈরি করে এমন প্রথম এক্সপোর্ট 24 ঘণ্টার জন্য নাও হতে পারে। ডেটাসেট তৈরি হওয়ার পর, Firebase ক্রমাগত নতুন অ্যানালিটিক্স ইভেন্টগুলিকে ইন্ট্রাডে টেবিলে Big Query-এ রপ্তানি করে এবং ইভেন্ট টেবিলে বিগত দিনের ইভেন্টগুলিকে গোষ্ঠীভুক্ত করে।

একটি সুপারিশ মডেল প্রশিক্ষণের জন্য প্রচুর ডেটা প্রয়োজন। যেহেতু আমাদের কাছে ইতিমধ্যেই প্রচুর পরিমাণে ডেটা জেনারেট করার মতো কোনো অ্যাপ নেই, তাই পরবর্তী ধাপে আমরা এই টিউটোরিয়ালের বাকি অংশ ব্যবহারের জন্য BigQuery-এ একটি নমুনা ডেটাসেট আমদানি করব।

7. মডেল প্রশিক্ষণ ডেটা পেতে BigQuery ব্যবহার করুন

এখন যেহেতু আমরা BigQuery এ রপ্তানি করার জন্য আমাদের Firebase কনসোল সংযুক্ত করেছি, আমাদের অ্যাপ বিশ্লেষণ ইভেন্ট ডেটা কিছু সময়ের পরে BigQuery কনসোলে স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে। এই টিউটোরিয়ালের উদ্দেশ্যে কিছু প্রাথমিক ডেটা পেতে, এই ধাপে আমরা আমাদের সুপারিশ মডেল প্রশিক্ষণের জন্য ব্যবহার করার জন্য আপনার BigQuery কনসোলে একটি বিদ্যমান নমুনা ডেটাসেট আমদানি করব।

BigQuery-এ নমুনা ডেটাসেট আমদানি করুন

  1. যান BigQuery- তে Google মেঘ কনসোলে ড্যাশবোর্ড।
  2. মেনুতে আপনার প্রকল্পের নাম নির্বাচন করুন।
  3. বিশদ বিবরণ দেখতে BigQuery বাঁদিকের নেভিগেশনের নীচে আপনার প্রকল্পের নাম নির্বাচন করুন।
  4. ডেটা সেটটি তৈরি করুন ডেটা সেটটি সৃষ্টি প্যানেল খুলতে পরিস্থিতি নির্বাচন করুন।
  5. ডেটা সেটটি ID- র জন্য 'firebase_recommendations_dataset' লিখুন এবং ডেটা সেটটি তৈরি করুন নির্বাচন করুন।
  6. নতুন ডেটাসেটটি প্রকল্পের নামের অধীনে বাম মেনুতে প্রদর্শিত হবে। এটি ক্লিক করুন.
  7. সারণী তৈরি করুন টেবিল সৃষ্টি প্যানেল খুলতে পরিস্থিতি নির্বাচন করুন।
  8. নির্বাচন 'গুগল ক্লাউড স্টোরেজ' থেকে সারণী তৈরি করুন জন্য।
  9. GCS বালতি মাঠ থেকে ফাইল নির্বাচন করুন সালে ': //firebase-recommendations/recommendations-test/formatted_data_filtered.txt GS' লিখুন।
  10. ফাইল ফর্ম্যাটে 'JSONL' নির্বাচন ড্রপ ডাউন।
  11. সারণী নাম জন্য 'recommendations_table' লিখুন।
  12. স্কিমা অধীনে বক্স চেক করুন> অটো সনাক্ত> স্কিমা এবং ইনপুট প্যারামিটার
  13. সারণী তৈরি করুন নির্বাচন করুন

নমুনা ডেটাসেট অন্বেষণ করুন

এই মুহুর্তে, আপনি ঐচ্ছিকভাবে স্কিমা অন্বেষণ করতে পারেন এবং এই ডেটাসেটের পূর্বরূপ দেখতে পারেন।

  1. নির্বাচন firebase-সুপারিশ-ডেটা সেটটি বাম মেনুতে টেবিল এটা রয়েছে প্রসারিত করতে।
  2. টেবিল স্কিমা দেখুন সুপারিশ-টেবিল টেবিল নির্বাচন করুন।
  3. প্রকৃত অ্যানালিটিক্স ঘটনা ডেটা এই টেবিল ধারন দেখতে পূর্বরূপ নির্বাচন করুন।

পরিষেবা অ্যাকাউন্টের শংসাপত্র তৈরি করুন

এখন, আমরা আমাদের Google ক্লাউড কনসোল প্রজেক্টে পরিষেবা অ্যাকাউন্টের শংসাপত্র তৈরি করব যা আমরা আমাদের BigQuery ডেটা অ্যাক্সেস এবং লোড করার জন্য নিম্নলিখিত ধাপে Colab পরিবেশে ব্যবহার করতে পারি।

  1. আপনার Google ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করা আছে তা নিশ্চিত করুন৷
  2. BigQuery এবং BigQuery স্টোরেজ API এপিআই সক্ষম করুন। < এখানে ক্লিক করুন >
  3. যান পরিষেবা অ্যাকাউন্ট কী তৈরি করুন পৃষ্ঠা
  4. পরিষেবা অ্যাকাউন্ট তালিকা থেকে, নিউ সেবা অ্যাকাউন্ট নির্বাচন করুন।
  5. পরিষেবা অ্যাকাউন্ট নাম ক্ষেত্রে, একটি নাম লিখুন।
  6. ভূমিকা তালিকা থেকে, প্রকল্প> মালিক নির্বাচন করুন।
  7. ক্লিক করুন। একটি JSON ফাইল যা আপনার কম্পিউটারে আপনার কী ডাউনলোডগুলি ধারণ করে৷

পরবর্তী ধাপে, আমরা এই ডেটা প্রিপ্রসেস করতে এবং আমাদের সুপারিশের মডেলকে প্রশিক্ষণ দিতে Google Colab ব্যবহার করব।

8. প্রিপ্রসেস ডেটা এবং ট্রেন সুপারিশ মডেল

এই ধাপে, আমরা নিম্নলিখিত ধাপগুলি সম্পাদন করার জন্য একটি Colab নোটবুক ব্যবহার করব:

  1. Colab নোটবুকে BigQuery ডেটা আমদানি করুন
  2. মডেল প্রশিক্ষণের জন্য এটি প্রস্তুত করতে ডেটা প্রিপ্রসেস করুন
  3. বিশ্লেষণী তথ্যের উপর সুপারিশ মডেল প্রশিক্ষণ
  4. একটি TF লাইট মডেল হিসাবে মডেল রপ্তানি করুন
  5. মডেলটিকে ফায়ারবেস কনসোলে স্থাপন করুন যাতে আমরা এটিকে আমাদের অ্যাপে ব্যবহার করতে পারি

Colab ট্রেনিং নোটবুক লঞ্চ করার আগে, আমরা প্রথমে Firebase মডেল ম্যানেজমেন্ট API চালু করব যাতে Colab আমাদের Firebase কনসোলে প্রশিক্ষিত মডেল স্থাপন করতে পারে।

Firebase মডেল ব্যবস্থাপনা API সক্ষম করুন

আপনার এমএল মডেলগুলি সংরক্ষণ করার জন্য একটি বালতি তৈরি করুন

আপনার ফায়ারবেস কনসোলে, স্টোরেজে যান এবং শুরু করুন ক্লিক করুন। fbbea78f0eb3dc9f.png

আপনার বালতি সেট আপ পেতে ডায়ালগ অনুসরণ করুন.

19517c0d6d2aa14d.png

Firebase ML API সক্ষম করুন৷

যান Firebase এমএল এপিআই পৃষ্ঠা Google ক্লাউড কনসোলে এবং সক্ষম করুন এ ক্লিক করুন।

মডেলকে প্রশিক্ষণ দিতে এবং স্থাপন করতে Colab নোটবুক ব্যবহার করুন

নিম্নলিখিত লিঙ্কটি ব্যবহার করে কোলাব নোটবুকটি খুলুন এবং এর মধ্যে পদক্ষেপগুলি সম্পূর্ণ করুন৷ Colab নোটবুকের ধাপগুলি শেষ করার পরে, আপনার কাছে একটি TF লাইট মডেল ফাইল Firebase কনসোলে স্থাপন করা হবে যা আমরা আমাদের অ্যাপে সিঙ্ক করতে পারি।

Colab-এ খুলুন

9. আপনার অ্যাপে মডেলটি ডাউনলোড করুন

এই ধাপে, আমরা Firebase Machine Learning থেকে এইমাত্র প্রশিক্ষিত মডেলটি ডাউনলোড করতে আমাদের অ্যাপটি পরিবর্তন করব।

Firebase ML নির্ভরতা যোগ করুন

আপনার অ্যাপে ফায়ারবেস মেশিন লার্নিং মডেলগুলি ব্যবহার করার জন্য নিম্নলিখিত নির্ভরতা প্রয়োজন৷ এটি ইতিমধ্যে যোগ করা উচিত (যাচাই)।

পডফাইল

import Firebase

Firebase মডেল ম্যানেজার API দিয়ে মডেলটি ডাউনলোড করুন

যার অধীনে শর্ত মডেল ডাউনলোড ঘটে সেট আপ করুন এবং আমাদের অ্যাপ্লিকেশন দূরবর্তী মডেল সিঙ্ক করার জন্য একটি ডাউনলোড টাস্ক তৈরি করার জন্য নীচের কোড কপি করুন ModelDownloader.swift মধ্যে।

ModelDownloader.swift

  static func downloadModel(named name: String,
                            completion: @escaping (RemoteModel?,         DownloadError?) -> Void) {
    guard FirebaseApp.app() != nil else {
      completion(nil, .firebaseNotInitialized)
      return
    }
    guard success == nil && failure == nil else {
      completion(nil, .downloadInProgress)
      return
    }

    let remoteModel = CustomRemoteModel(name: name)
    let conditions = ModelDownloadConditions(allowsCellularAccess: true,
                                             allowsBackgroundDownloading: true)

    success = NotificationCenter.default.addObserver(forName: .firebaseMLModelDownloadDidSucceed,
                                                     object: nil,
                                                     queue: nil) { (notification) in
      defer { success = nil; failure = nil }
      guard let userInfo = notification.userInfo,
          let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue] as? RemoteModel
      else {
        completion(nil, .downloadReturnedEmptyModel)
        return
      }
      guard model.name == name else {
        completion(nil, .downloadReturnedWrongModel)
        return
      }
      completion(model, nil)
    }
    failure = NotificationCenter.default.addObserver(forName: .firebaseMLModelDownloadDidFail,
                                                     object: nil,
                                                     queue: nil) { (notification) in
      defer { success = nil; failure = nil }
      guard let userInfo = notification.userInfo,
          let error = userInfo[ModelDownloadUserInfoKey.error.rawValue] as? Error
      else {
        completion(nil, .mlkitError(underlyingError: DownloadError.unknownError))
        return
      }
      completion(nil, .mlkitError(underlyingError: error))
    }
    ModelManager.modelManager().download(remoteModel, conditions: conditions)
  }

ModelDownloader.swift

  static func fetchModel(named name: String,
                         completion: @escaping (String?, DownloadError?) -> Void) {
    let remoteModel = CustomRemoteModel(name: name)
    if ModelManager.modelManager().isModelDownloaded(remoteModel) {
      ModelManager.modelManager().getLatestModelFilePath(remoteModel) { (path, error) in
        completion(path, error.map { DownloadError.mlkitError(underlyingError: $0) })
      }
    } else {
      downloadModel(named: name) { (model, error) in
        guard let model = model else {
          let underlyingError = error ?? DownloadError.unknownError
          let compositeError = DownloadError.mlkitError(underlyingError: underlyingError)
          completion(nil, compositeError)
          return
        }
        ModelManager.modelManager().getLatestModelFilePath(model) { (path, pathError) in
          completion(path, error.map { DownloadError.mlkitError(underlyingError: $0) })
        }
      }
    }
  }

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 ব্যবহার করে আপনার অ্যাপে একটি সুপারিশ বৈশিষ্ট্য তৈরি করেছেন। মনে রাখবেন যে এই কোডল্যাবে দেখানো কৌশল এবং পাইপলাইনগুলি সাধারণীকরণ করা যেতে পারে এবং অন্যান্য ধরণের সুপারিশগুলিও পরিবেশন করতে ব্যবহার করা যেতে পারে।

আমরা কভার করেছি কি

  • ফায়ারবেস এমএল
  • ফায়ারবেস বিশ্লেষণ
  • BigQuery-এ অ্যানালিটিক্স ইভেন্ট এক্সপোর্ট করুন
  • প্রিপ্রসেস বিশ্লেষণ ইভেন্ট
  • ট্রেনের সুপারিশ TensorFlow মডেল
  • মডেল এক্সপোর্ট করুন এবং ফায়ারবেস কনসোলে স্থাপন করুন
  • একটি অ্যাপে চলচ্চিত্রের সুপারিশ পরিবেশন করুন

পরবর্তী পদক্ষেপ

  • আপনার অ্যাপে Firebase ML সুপারিশ বাস্তবায়ন করুন।

আরও জানুন

একটি প্রশ্ন আছে?

রিপোর্ট সমস্যা