Android এর জন্য পাঠ্য শ্রেণিবিন্যাস নির্দেশিকা

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

আপনি ডেমো দেখে এই কাজটি কার্যকর দেখতে পারেন। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কোড উদাহরণ

টেক্সট ক্লাসিফায়ারের উদাহরণ কোড আপনার রেফারেন্সের জন্য এই টাস্কের একটি সহজ বাস্তবায়ন প্রদান করে। এই কোডটি আপনাকে এই কাজটি পরীক্ষা করতে এবং আপনার নিজস্ব পাঠ্য শ্রেণিবিন্যাস অ্যাপ তৈরি করতে শুরু করতে সহায়তা করে। আপনি GitHub এ টেক্সট ক্লাসিফায়ার উদাহরণ কোড ব্রাউজ করতে পারেন।

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

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

উদাহরণ কোড ডাউনলোড করতে:

  1. নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. ঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করার জন্য আপনার গিট ইন্সট্যান্স কনফিগার করুন, যাতে আপনার কাছে টেক্সট ক্লাসিফায়ার উদাহরণ অ্যাপের জন্য শুধুমাত্র ফাইল থাকে:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

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

মূল উপাদান

নিম্নলিখিত ফাইলগুলিতে পাঠ্য শ্রেণিবিন্যাস উদাহরণ অ্যাপের জন্য গুরুত্বপূর্ণ কোড রয়েছে:

  • TextClassifierHelper.kt - টেক্সট ক্লাসিফায়ার শুরু করে এবং মডেল নির্বাচন পরিচালনা করে।
  • MainActivity.kt - TextClassifierHelper এবং ResultsAdapter কল করা সহ অ্যাপ্লিকেশনটি প্রয়োগ করে।
  • ResultsAdapter.kt - ফলাফলগুলি পরিচালনা করে এবং ফর্ম্যাট করে।

সেটআপ

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

নির্ভরতা

টেক্সট ক্লাসিফায়ার com.google.mediapipe:tasks-text লাইব্রেরি ব্যবহার করে। আপনার Android অ্যাপ ডেভেলপমেন্ট প্রজেক্টের build.gradle ফাইলে এই নির্ভরতা যোগ করুন। আপনি নিম্নলিখিত কোড সহ প্রয়োজনীয় নির্ভরতা আমদানি করতে পারেন:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

মডেল

MediaPipe টেক্সট ক্লাসিফায়ার টাস্কের জন্য একটি প্রশিক্ষিত মডেল প্রয়োজন যা এই টাস্কের সাথে সামঞ্জস্যপূর্ণ। টেক্সট ক্লাসিফায়ারের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

একটি মডেল নির্বাচন করুন এবং ডাউনলোড করুন, এবং তারপর আপনার প্রকল্প assets ডিরেক্টরির মধ্যে এটি সংরক্ষণ করুন:

<dev-project-root>/src/main/assets

ব্যবহার করার জন্য মডেলের পথ নির্দিষ্ট করতে BaseOptions.Builder.setModelAssetPath() পদ্ধতি ব্যবহার করুন। একটি কোড উদাহরণের জন্য, পরবর্তী বিভাগ দেখুন।

টাস্ক তৈরি করুন

অনুমান চালানোর জন্য টাস্ক প্রস্তুত করতে Text Classifier TextClassifier.createFrom...() ফাংশনগুলির একটি ব্যবহার করুন। আপনি প্রশিক্ষিত মডেল ফাইলের আপেক্ষিক বা পরম পাথ সহ createFromFile() ফাংশন ব্যবহার করতে পারেন। নীচের কোড উদাহরণটি TextClassifier.createFromOptions() ফাংশন ব্যবহার করে দেখায়। উপলব্ধ কনফিগারেশন বিকল্পগুলি সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

নিম্নলিখিত কোডটি এই কাজটি কীভাবে তৈরি এবং কনফিগার করতে হয় তা প্রদর্শন করে।

// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";

fun initClassifier() {
    val baseOptionsBuilder = BaseOptions.builder()
        .setModelAssetPath(currentModel)
    try {
        val baseOptions = baseOptionsBuilder.build()
        val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
            .setBaseOptions(baseOptions)
        val options = optionsBuilder.build()
        textClassifier = TextClassifier.createFromOptions(context, options)
    } catch (e: IllegalStateException) { // exception handling
    }
}

আপনি কোড উদাহরণে কিভাবে একটি টাস্ক তৈরি করতে হয় তার একটি উদাহরণ দেখতে পারেন TextClassifierHelper ক্লাস initClassifier() ফাংশন।

কনফিগারেশন বিকল্প

এই টাস্কে Android অ্যাপের জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
displayNamesLocale টাস্কের মডেলের মেটাডেটাতে প্রদত্ত প্রদর্শন নামের জন্য ব্যবহার করার জন্য লেবেলের ভাষা সেট করে, যদি উপলব্ধ থাকে। ইংরেজির জন্য ডিফল্ট হল en । আপনি TensorFlow Lite Metadata Writer API ব্যবহার করে একটি কাস্টম মডেলের মেটাডেটাতে স্থানীয় লেবেল যোগ করতে পারেন স্থানীয় কোড en
maxResults ফিরতে সর্বোচ্চ স্কোর করা শ্রেণীবিভাগ ফলাফলের ঐচ্ছিক সর্বোচ্চ সংখ্যা সেট করে। <0 হলে, সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে। যেকোনো ইতিবাচক সংখ্যা -1
scoreThreshold ভবিষ্যদ্বাণী স্কোর থ্রেশহোল্ড সেট করে যা মডেল মেটাডেটাতে প্রদত্ত একটিকে ওভাররাইড করে (যদি থাকে)। এই মানের নিচের ফলাফল প্রত্যাখ্যান করা হয়। কোন ভাসা সেট করা হয়নি
categoryAllowlist অনুমোদিত বিভাগের নামের ঐচ্ছিক তালিকা সেট করে। যদি খালি না থাকে, শ্রেণীবিভাগের ফলাফল যাদের বিভাগের নাম এই সেটে নেই সেগুলি ফিল্টার আউট করা হবে৷ সদৃশ বা অজানা বিভাগের নাম উপেক্ষা করা হয়। এই বিকল্পটি categoryDenylist সাথে পারস্পরিকভাবে একচেটিয়া এবং একটি ত্রুটিতে উভয় ফলাফল ব্যবহার করে। কোনো স্ট্রিং সেট করা হয়নি
categoryDenylist অনুমোদিত নয় এমন বিভাগের নামের ঐচ্ছিক তালিকা সেট করে। যদি খালি না থাকে, শ্রেণীবিভাগের ফলাফল যার বিভাগের নাম এই সেটে আছে তা ফিল্টার আউট করা হবে। সদৃশ বা অজানা বিভাগের নাম উপেক্ষা করা হয়। এই বিকল্পটি categoryAllowlist সাথে পারস্পরিকভাবে একচেটিয়া এবং একটি ত্রুটিতে উভয় ফলাফল ব্যবহার করে। কোনো স্ট্রিং সেট করা হয়নি

ডেটা প্রস্তুত করুন

টেক্সট ক্লাসিফায়ার টেক্সট ( String ) ডেটা দিয়ে কাজ করে। টাস্কটি টোকেনাইজেশন এবং টেনসর প্রিপ্রসেসিং সহ ডেটা ইনপুট প্রিপ্রসেসিং পরিচালনা করে।

সমস্ত প্রিপ্রসেসিং classify() ফাংশনের মধ্যে পরিচালিত হয়। আগে থেকে ইনপুট পাঠ্যের অতিরিক্ত প্রিপ্রসেসিংয়ের প্রয়োজন নেই।

String inputText = "The input text to be classified.";

টাস্ক চালান

টেক্সট ক্লাসিফায়ার অনুমান চালানোর জন্য TextClassifier.classify() ফাংশন ব্যবহার করে। আপনার অ্যাপের সাথে অ্যান্ড্রয়েড ইউজার ইন্টারফেস থ্রেড ব্লক করা এড়াতে শ্রেণীবিভাগ কার্যকর করার জন্য একটি পৃথক এক্সিকিউশন থ্রেড ব্যবহার করুন।

নিম্নলিখিত কোডটি প্রদর্শন করে কিভাবে একটি পৃথক এক্সিকিউশন থ্রেড ব্যবহার করে টাস্ক মডেলের সাথে প্রক্রিয়াকরণ চালানো যায়।

    fun classify(text: String) {
        executor = ScheduledThreadPoolExecutor(1)

        executor.execute {
            val results = textClassifier.classify(text)
            listener.onResult(results)
        }
    }

আপনি কোড উদাহরণে TextClassifierHelper class classify() ফাংশনে কীভাবে একটি টাস্ক চালাতে হয় তার একটি উদাহরণ দেখতে পারেন।

হ্যান্ডেল এবং প্রদর্শন ফলাফল

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

নিম্নলিখিত এই টাস্ক থেকে আউটপুট ডেটার একটি উদাহরণ দেখায়:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

এই ফলাফলটি ইনপুট টেক্সটে BERT-শ্রেণিফায়ার চালানোর মাধ্যমে প্রাপ্ত হয়েছে: "an imperfect but overall entertaining mystery"

আপনি কোড উদাহরণের ফলাফল অ্যাডাপ্টার ক্লাস এবং ViewHolder অভ্যন্তরীণ ক্লাসে ফলাফলগুলি কীভাবে প্রদর্শন করবেন তার একটি উদাহরণ দেখতে পারেন।