টেনসরফ্লো লাইট এবং ফায়ারবেস - অ্যান্ড্রয়েড কোডল্যাব সহ আপনার অ্যাপে অন-ডিভাইস টেক্সট ক্লাসিফিকেশন যোগ করুন

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

টেক্সট-শ্রেণিবিন্যাস-ফলাফল.png

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

টেক্সট ক্লাসিফিকেশন হলো কোনো টেক্সটের বিষয়বস্তু অনুযায়ী সেটিকে ট্যাগ বা ক্যাটাগরিতে বিভক্ত করার প্রক্রিয়া। এটি ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং (NLP)-এর অন্যতম মৌলিক কাজ, যার ব্যাপক প্রয়োগ রয়েছে, যেমন সেন্টিমেন্ট অ্যানালাইসিস, টপিক লেবেলিং, স্প্যাম ডিটেকশন এবং ইনটেন্ট ডিটেকশন।

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

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

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

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

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

  • অ্যান্ড্রয়েড স্টুডিওর সর্বশেষ সংস্করণ।
  • নমুনা কোড।
  • অ্যান্ড্রয়েড ৫.০+ এবং গুগল প্লে সার্ভিসেস ৯.৮ বা তার পরবর্তী সংস্করণসহ একটি টেস্ট ডিভাইস, অথবা গুগল প্লে সার্ভিসেস ৯.৮ বা তার পরবর্তী সংস্করণসহ একটি এমুলেটর
  • ডিভাইস ব্যবহার করলে, একটি সংযোগ কেবল প্রয়োজন।

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

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

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

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

২. নমুনা কোডটি নিন।

কমান্ড লাইন থেকে গিটহাব রিপোজিটরিটি ক্লোন করুন।

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

যদি আপনার গিট ইনস্টল করা না থাকে, তাহলে আপনি এর গিটহাব পেজ থেকে অথবা এই লিঙ্কে ক্লিক করেও নমুনা প্রজেক্টটি ডাউনলোড করতে পারেন।

৩. স্টার্টার অ্যাপটি ইম্পোর্ট করুন

অ্যান্ড্রয়েড স্টুডিও থেকে, codelab-textclassification-android-master ডিরেক্টরিটি নির্বাচন করুন ( android_studio_folder.png নমুনা কোড ডাউনলোড থেকে ( ফাইল > খুলুন > .../codelab-textclassification-android-master/start )।

এখন আপনার অ্যান্ড্রয়েড স্টুডিওতে স্টার্ট প্রজেক্টটি খোলা থাকা উচিত।

৪. স্টার্টার অ্যাপটি চালান।

এখন যেহেতু আপনি অ্যান্ড্রয়েড স্টুডিওতে প্রজেক্টটি ইম্পোর্ট করেছেন, আপনি প্রথমবারের মতো অ্যাপটি চালানোর জন্য প্রস্তুত। আপনার অ্যান্ড্রয়েড ডিভাইসটি সংযুক্ত করুন এবং রান (Run) এ ক্লিক করুন। execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে।

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

2fb4e69fafb2e3ed.png

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

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

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

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

  1. আপনার নতুন প্রজেক্টের ওভারভিউ স্ক্রিন থেকে, সেটআপ ওয়ার্কফ্লো চালু করতে অ্যান্ড্রয়েড আইকনটিতে ক্লিক করুন।
  2. কোডল্যাবের প্যাকেজের নাম লিখুন: org.tensorflow.lite.codelabs.textclassification

আপনার অ্যাপে google-services.json ফাইলটি যোগ করুন

প্যাকেজ নামটি যোগ করে Register নির্বাচন করার পর, আপনার Firebase Android কনফিগারেশন ফাইলটি পেতে Download google-services.json-এ ক্লিক করুন, তারপর google-services.json ফাইলটি আপনার প্রজেক্টের app ডিরেক্টরিতে কপি করুন।

আপনার অ্যাপে গুগল-সার্ভিসেস প্লাগইন যোগ করুন

আপনার অ্যাপে Firebase যোগ করতে, Firebase Console-এর নির্দেশাবলী অনুসরণ করে build.gradle.kts ফাইলগুলো আপডেট করুন।

google-services প্লাগইনটি আপনার অ্যাপ্লিকেশনকে Firebase ব্যবহারের জন্য কনফিগার করতে google-services.json ফাইলটি ব্যবহার করে।

আপনার প্রজেক্টটি গ্রেডল ফাইলের সাথে সিঙ্ক করুন।

আপনার অ্যাপে সমস্ত ডিপেন্ডেন্সি উপলব্ধ আছে কিনা তা নিশ্চিত করতে, এই পর্যায়ে আপনার প্রজেক্টটিকে গ্রেডল ফাইলের সাথে সিঙ্ক করা উচিত। অ্যান্ড্রয়েড স্টুডিও টুলবার থেকে ফাইল > সিঙ্ক প্রজেক্ট উইথ গ্রেডল ফাইলস (File > Sync Project with Gradle Files) নির্বাচন করুন।

৭. ফায়ারবেস দিয়ে অ্যাপটি চালান।

এখন যেহেতু আপনি আপনার JSON ফাইল দিয়ে google-services প্লাগইনটি কনফিগার করেছেন, আপনি Firebase দিয়ে অ্যাপটি চালানোর জন্য প্রস্তুত। আপনার অ্যান্ড্রয়েড ডিভাইসটি সংযুক্ত করুন এবং রান (Run) এ ক্লিক করুন। execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে।

অ্যাপটি আপনার ডিভাইসে চালু হওয়া উচিত। এই পর্যায়ে, আপনার অ্যাপটি সফলভাবে বিল্ড হওয়া উচিত।

৮. একটি সেন্টিমেন্ট অ্যানালাইসিস মডেলকে প্রশিক্ষণ দিন

আমরা প্রদত্ত কোনো টেক্সটের সেন্টিমেন্ট প্রেডিক্ট করার জন্য একটি টেক্সট ক্লাসিফিকেশন মডেলকে প্রশিক্ষণ দিতে TensorFlow Lite Model Maker ব্যবহার করব।

এই ধাপটি একটি পাইথন নোটবুক হিসেবে দেখানো হয়েছে, যা আপনি গুগল কোলাবে খুলতে পারবেন। নোটবুকটির সব অংশ একবারে চালানোর জন্য আপনি রানটাইম > রান অল (Runtime > Run all) বিকল্পটি বেছে নিতে পারেন।

কোলাবে খুলুন

এই ধাপটি শেষ করার পর, আপনার কাছে একটি TensorFlow Lite সেন্টিমেন্ট অ্যানালাইসিস মডেল থাকবে যা একটি মোবাইল অ্যাপে স্থাপনের জন্য প্রস্তুত।

৯. ফায়ারবেস এমএল-এ একটি মডেল স্থাপন করুন

ফায়ারবেস এমএল-এ একটি মডেল স্থাপন করা দুটি প্রধান কারণে উপকারী:

  1. আমরা অ্যাপ ইনস্টলের আকার ছোট রাখতে পারি এবং শুধুমাত্র প্রয়োজন হলেই মডেলটি ডাউনলোড করতে পারি।
  2. মডেলটি নিয়মিত এবং সম্পূর্ণ অ্যাপের চেয়ে ভিন্ন একটি রিলিজ চক্রে আপডেট করা যেতে পারে।

মডেলটি কনসোলের মাধ্যমে অথবা ফায়ারবেস অ্যাডমিন এসডিকে (Firebase Admin SDK) ব্যবহার করে প্রোগ্রাম্যাটিকভাবে ডেপ্লয় করা যায়। এই ধাপে আমরা কনসোলের মাধ্যমে ডেপ্লয় করব।

প্রথমে, Firebase Console খুলুন এবং বাম দিকের নেভিগেশন প্যানেলে থাকা Machine Learning-এ ক্লিক করুন। আপনি যদি এটি প্রথমবার খুলে থাকেন, তাহলে 'Get Started'-এ ক্লিক করুন। এরপর "Custom"-এ যান এবং "Add model" বোতামে ক্লিক করুন।

নির্দেশিত হলে, মডেলটির নাম sentiment_analysis দিন এবং পূর্ববর্তী ধাপে Colab থেকে ডাউনলোড করা ফাইলটি আপলোড করুন।

3c3c50e6ef12b3b.png

১০. Firebase ML থেকে মডেলটি ডাউনলোড করুন।

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

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

app/build.gradle.kts ফাইলে Firebase Machine Learning ডিপেন্ডেন্সিটি যোগ করুন।

অ্যাপ/বিল্ড.গ্রেডল.কেটিএস

এই মন্তব্যটি খুঁজুন:

// TODO 1: Add Firebase ML dependency

তারপর যোগ করুন:

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

অ্যান্ড্রয়েড স্টুডিও যখন আপনার প্রজেক্ট সিঙ্ক করতে বলবে, তখন ‘সিঙ্ক নাও’ (Sync Now) নির্বাচন করুন।

এরপর ফায়ারবেস থেকে মডেলটি ডাউনলোড করার জন্য কিছু কোড যোগ করা যাক।

MainActivity.java

এই মন্তব্যটি খুঁজুন:

// TODO 2: Implement a method to download TFLite model from Firebase

তারপর যোগ করুন:

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

এরপরে, অ্যাক্টিভিটির onCreate মেথডে downloadModel মেথডটি কল করুন।

MainActivity.java

এই মন্তব্যটি খুঁজুন:

// TODO 3: Call the method to download TFLite model

তারপর যোগ করুন:

downloadModel("sentiment_analysis");

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

Tensorflow Lite Task Library আপনাকে মাত্র কয়েকটি কোডের লাইনের মাধ্যমে আপনার অ্যাপে TensorFlow Lite মডেল যুক্ত করতে সাহায্য করে। আমরা Firebase থেকে ডাউনলোড করা TensorFlow Lite মডেলটি ব্যবহার করে একটি NLClassifier ইনস্ট্যান্স ইনিশিয়ালাইজ করব। তারপর আমরা এটি ব্যবহার করে অ্যাপ ব্যবহারকারীদের দেওয়া টেক্সট ইনপুটকে ক্লাসিফাই করব এবং ফলাফলটি UI-তে দেখাব।

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

অ্যাপটির Gradle ফাইলে যান এবং অ্যাপটির dependencies-এ TensorFlow Lite Task Library (Text) যোগ করুন।

অ্যাপ/বিল্ড.গ্রেডল

এই মন্তব্যটি খুঁজুন:

// TODO 4: Add TFLite Task API (Text) dependency

তারপর যোগ করুন:

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

অ্যান্ড্রয়েড স্টুডিও যখন আপনার প্রজেক্ট সিঙ্ক করতে বলবে, তখন ‘সিঙ্ক নাও’ (Sync Now) নির্বাচন করুন।

একটি টেক্সট ক্লাসিফায়ার শুরু করুন

এরপর আমরা টাস্ক লাইব্রেরির NLClassifier ব্যবহার করে ফায়ারবেস থেকে ডাউনলোড করা সেন্টিমেন্ট অ্যানালাইসিস মডেলটি লোড করব।

MainActivity.java

চলুন একটি NLClassifier ইনস্ট্যান্স ভেরিয়েবল ডিক্লেয়ার করি। এই কমেন্টটি খুঁজুন:

// TODO 5: Define a NLClassifier variable

তারপর যোগ করুন:

private NLClassifier textClassifier;

Firebase থেকে ডাউনলোড করা সেন্টিমেন্ট অ্যানালাইসিস মডেল দিয়ে textClassifier ভেরিয়েবলটি ইনিশিয়ালাইজ করুন। এই কমেন্টটি খুঁজুন:

// TODO 6: Initialize a TextClassifier with the downloaded model

তারপর যোগ করুন:

textClassifier = NLClassifier.createFromFile(model.getFile());

পাঠ্য শ্রেণীবদ্ধ করুন

একবার textClassifier ইনস্ট্যান্সটি সেট আপ হয়ে গেলে, আপনি একটিমাত্র মেথড কলের মাধ্যমেই সেন্টিমেন্ট অ্যানালাইসিস চালাতে পারবেন।

MainActivity.java

এই মন্তব্যটি খুঁজুন:

// TODO 7: Run sentiment analysis on the input text

তারপর যোগ করুন:

List<Category> results = textClassifier.classify(text);

পোস্ট-প্রসেসিং বাস্তবায়ন করুন

অবশেষে, আমরা মডেলের আউটপুটকে একটি বর্ণনামূলক টেক্সটে রূপান্তর করে স্ক্রিনে দেখাব।

MainActivity.java

এই মন্তব্যটি খুঁজুন:

// TODO 8: Convert the result to a human-readable text

ডামি ফলাফল টেক্সট তৈরি করে এমন কোডটি সরিয়ে ফেলুন:

String textToShow = "Dummy classification result.\n";

তারপর যোগ করুন:

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

১২. চূড়ান্ত অ্যাপটি চালান।

আপনি অ্যাপটিতে সেন্টিমেন্ট অ্যানালাইসিস মডেলটি যুক্ত করেছেন, এবার এটি পরীক্ষা করা যাক। আপনার অ্যান্ড্রয়েড ডিভাইসটি সংযুক্ত করুন এবং রান (Run) বোতামে ক্লিক করুন। execute.png অ্যান্ড্রয়েড স্টুডিও টুলবারে।

অ্যাপটির আপনার দেওয়া মুভি রিভিউটির সেন্টিমেন্ট সঠিকভাবে অনুমান করতে সক্ষম হওয়া উচিত।

img/text-classification-result.png

১৩. আরও ফায়ারবেস ফিচার দিয়ে অ্যাপটিকে আরও শক্তিশালী করুন।

আপনার TFLite মডেলগুলো হোস্ট করার পাশাপাশি, Firebase আপনার মেশিন লার্নিং ব্যবহারের ক্ষেত্রগুলোকে আরও শক্তিশালী করার জন্য আরও বেশ কিছু বৈশিষ্ট্য প্রদান করে:

  • ব্যবহারকারীদের ডিভাইসে চলমান আপনার মডেলের ইনফারেন্সের গতি পরিমাপ করতে ফায়ারবেস পারফরম্যান্স মনিটরিং ব্যবহার করুন।
  • ব্যবহারকারীর প্রতিক্রিয়া পরিমাপের মাধ্যমে প্রোডাকশনে আপনার মডেলটি কতটা ভালো কাজ করছে তা ফায়ারবেস অ্যানালিটিক্স দ্বারা পরিমাপ করা যায়।
  • আপনার মডেলের একাধিক সংস্করণ পরীক্ষা করার জন্য ফায়ারবেস এ/বি টেস্টিং।
  • আপনার কি মনে আছে আমরা আগে আমাদের TFLite মডেলের দুটি সংস্করণকে প্রশিক্ষণ দিয়েছিলাম? প্রোডাকশনে কোন সংস্করণটি ভালো কাজ করে, তা খুঁজে বের করার জন্য A/B টেস্টিং একটি চমৎকার উপায়!

আপনার অ্যাপে এই বৈশিষ্ট্যগুলি কীভাবে কাজে লাগাবেন সে সম্পর্কে আরও জানতে, নীচের কোডল্যাবগুলি দেখুন:

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

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

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

  • TensorFlow Lite
  • ফায়ারবেস এমএল

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

  • Firebase Performance Monitoring-এর মাধ্যমে আপনার মডেলের ইনফারেন্স গতি পরিমাপ করুন।
  • Firebase ML Model Management API ব্যবহার করে Colab থেকে সরাসরি Firebase-এ মডেলটি ডেপ্লয় করুন।
  • পূর্বাভাসের ফলাফলের উপর ব্যবহারকারীদের মতামত জানানোর একটি ব্যবস্থা যোগ করুন এবং ব্যবহারকারীদের মতামত ট্র্যাক করতে ফায়ারবেস অ্যানালিটিক্স ব্যবহার করুন।
  • ফায়ারবেস এ/বি টেস্টিং ব্যবহার করে অ্যাভারেজ ওয়ার্ড ভেক্টর মডেল এবং মোবাইলবার্ট মডেলের এ/বি টেস্ট করুন।

আরও জানুন

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

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