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

১. সংক্ষিপ্ত বিবরণ

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

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

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

আপনি যা শিখবেন

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

আপনার যা যা লাগবে

  • এক্সকোড ১১ (বা উচ্চতর সংস্করণ)
  • কোকোপডস ১.৯.১ (বা উচ্চতর সংস্করণ)

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

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

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

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

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

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

  1. ফায়ারবেস কনসোলে যান।
  2. Create New Project নির্বাচন করুন এবং আপনার প্রজেক্টের নাম দিন "Firebase ML iOS Codelab"।

৩. নমুনা প্রকল্পটি সংগ্রহ করুন

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

প্রথমে স্যাম্পল প্রজেক্টটি ক্লোন করুন এবং প্রজেক্ট ডিরেক্টরিতে pod update চালান:

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

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

ফায়ারবেস সেট আপ করুন

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

4a923d5c7ae0d8f3.png

আপনার Podfile-এ Firebase যোগ করুন এবং pod install চালান।

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

আপনার AppDelegate এর didFinishLaunchingWithOptions মেথডের ফাইলের শীর্ষে Firebase ইম্পোর্ট করুন।

import FirebaseCore

এবং ফায়ারবেস কনফিগার করার জন্য একটি কল যোগ করুন।

FirebaseApp.configure()

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

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

৪. অ্যাপে ফায়ারবেস অ্যানালিটিক্স যোগ করুন

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

অ্যাপে ফায়ারবেস অ্যানালিটিক্স সেট আপ করুন

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

ব্যবহারকারী কোনো মুভিতে লাইক ক্লিক করলে একটি অ্যানালিটিক্স ইভেন্ট রেজিস্টার করতে নিচের কোডটি যোগ করুন।

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()
    }
       
}

৫. আপনার অ্যানালিটিক্স ইন্টিগ্রেশন পরীক্ষা করুন

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

অ্যানালিটিক্স ডিবাগ লগিং সক্ষম করুন

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

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

-FIRDebugEnabled

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

ঐচ্ছিক: ফায়ারবেস কনসোলে অ্যানালিটিক্স ইভেন্টগুলি নিশ্চিত করুন

  1. ফায়ারবেস কনসোলে যান।
  2. অ্যানালিটিক্স-এর অধীনে ডিবাগভিউ নির্বাচন করুন
  3. Xcode-এ, অ্যাপটি চালু করতে Run নির্বাচন করুন এবং আপনার Liked তালিকায় কিছু সিনেমা যোগ করুন।
  4. Firebase কনসোলের DebugView-তে যাচাই করুন যে, অ্যাপে মুভি যোগ করার সময় এই ইভেন্টগুলো লগ হচ্ছে কি না।

৬. অ্যানালিটিক্স ডেটা বিগ কোয়েরিতে এক্সপোর্ট করুন

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

বিগ কোয়েরি এক্সপোর্ট সক্ষম করুন

  1. ফায়ারবেস কনসোলে যান।
  2. প্রজেক্ট ওভারভিউ- এর পাশে থাকা সেটিংস গিয়ার আইকনটি সিলেক্ট করুন, এবং তারপর প্রজেক্ট সেটিংস সিলেক্ট করুন।
  3. ইন্টিগ্রেশন ট্যাবটি নির্বাচন করুন।
  4. BigQuery ব্লকের ভিতরে Link (বা Manage ) নির্বাচন করুন।
  5. Firebase-কে BigQuery-এর সাথে লিঙ্ক করার বিষয়ে ধাপে Next নির্বাচন করুন।
  6. ইন্টিগ্রেশন কনফিগার করুন (Configure integration ) বিভাগের অধীনে, গুগল অ্যানালিটিক্স ডেটা পাঠানো সক্ষম করতে সুইচটিতে ক্লিক করুন এবং 'বিগকোয়েরি-তে লিঙ্ক করুন ' (Link to BigQuery) নির্বাচন করুন।

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

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

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

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

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

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

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

এই পর্যায়ে, আপনি চাইলে স্কিমাটি অন্বেষণ করতে এবং এই ডেটাসেটটির প্রিভিউ দেখতে পারেন।

  1. এর অন্তর্ভুক্ত টেবিলগুলো প্রসারিত করতে বাম দিকের মেনু থেকে firebase-recommendations-dataset নির্বাচন করুন।
  2. টেবিল স্কিমা দেখতে recommendations-table টেবিলটি নির্বাচন করুন।
  3. এই টেবিলে থাকা প্রকৃত অ্যানালিটিক্স ইভেন্টের ডেটা দেখতে প্রিভিউ নির্বাচন করুন।

পরিষেবা অ্যাকাউন্টের পরিচয়পত্র তৈরি করুন

এখন, আমরা আমাদের গুগল ক্লাউড কনসোল প্রজেক্টে সার্ভিস অ্যাকাউন্ট ক্রেডেনশিয়াল তৈরি করব, যা আমরা পরবর্তী ধাপে কোলাব পরিবেশে আমাদের BigQuery ডেটা অ্যাক্সেস ও লোড করার জন্য ব্যবহার করতে পারব।

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

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

৮. ডেটা প্রাক-প্রক্রিয়া করুন এবং সুপারিশ মডেলকে প্রশিক্ষণ দিন

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

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

কোলাব ট্রেনিং নোটবুকটি চালু করার আগে, আমরা প্রথমে ফায়ারবেস মডেল ম্যানেজমেন্ট এপিআই (Firebase Model Management API) সক্রিয় করব, যাতে কোলাব প্রশিক্ষিত মডেলটি আমাদের ফায়ারবেস কনসোলে স্থাপন করতে পারে।

ফায়ারবেস মডেল ম্যানেজমেন্ট এপিআই সক্রিয় করুন

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

আপনার Firebase Console-এ, Storage-এ যান এবং Get started-এ ক্লিক করুন। fbbea78f0eb3dc9f.png

আপনার বাকেটটি সেট আপ করতে নির্দেশাবলী অনুসরণ করুন।

19517c0d6d2aa14d.png

ফায়ারবেস এমএল এপিআই সক্রিয় করুন

গুগল ক্লাউড কনসোলে Firebase ML API পৃষ্ঠায় যান এবং Enable-এ ক্লিক করুন।

মডেলটি প্রশিক্ষণ ও স্থাপন করতে কোলাব নোটবুক ব্যবহার করুন।

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

কোলাবে খুলুন

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

এই ধাপে, আমরা আমাদের অ্যাপটিকে এমনভাবে পরিবর্তন করব যাতে এটি ফায়ারবেস মেশিন লার্নিং থেকে সদ্য প্রশিক্ষিত মডেলটি ডাউনলোড করতে পারে।

ফায়ারবেস এমএল নির্ভরতা যোগ করুন

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

পডফাইল

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))
            }
    }
  }

১০. আপনার অ্যাপে টেনসরফ্লো লাইট সুপারিশ মডেলটি সংহত করুন।

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]))
    }
  }

আপনার অ্যাপটি পরীক্ষা করুন!

আপনার অ্যাপটি আবার চালান। আপনি কয়েকটি সিনেমা বাছাই করার সাথে সাথেই এটি স্বয়ংক্রিয়ভাবে নতুন মডেলটি ডাউনলোড করে নেবে এবং সুপারিশ তৈরি করতে শুরু করবে!

১১. অভিনন্দন!

আপনি TensorFlow Lite এবং Firebase ব্যবহার করে আপনার অ্যাপে একটি সুপারিশ বৈশিষ্ট্য তৈরি করেছেন। উল্লেখ্য যে, এই কোডল্যাবে দেখানো কৌশল এবং পাইপলাইনকে সাধারণীকরণ করে অন্যান্য ধরণের সুপারিশ পরিবেশন করার জন্যও ব্যবহার করা যেতে পারে।

আমরা যা আলোচনা করেছি

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

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

  • আপনার অ্যাপে Firebase ML-এর সুপারিশগুলো প্রয়োগ করুন।

আরও জানুন

আপনার কি কোনো প্রশ্ন আছে?

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