Android के लिए, टेक्स्ट की कैटगरी तय करने की गाइड

MediaPipe Text Classifier टास्क की मदद से, टेक्स्ट को तय की गई कैटगरी में बांटा जा सकता है जैसे, अच्छी या बुरी भावना. कैटगरी, मॉडल के हिसाब से तय की जाती हैं मॉडल को ट्रेनिंग कैसे दी गई थी. ये निर्देश आपको टेक्स्ट की कैटगरी तय करने की सुविधा का Android ऐप्लिकेशन के साथ इस्तेमाल कर सकते हैं.

आप डेमो के लिए उपलब्ध है. सुविधाओं, मॉडल, और इस टास्क के कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानने के लिए, खास जानकारी देखें.

कोड का उदाहरण

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

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

नीचे दिए गए निर्देशों में आपको उदाहरण की स्थानीय कॉपी बनाने का तरीका बताया गया है git वर्शन कंट्रोल कमांड लाइन टूल का इस्तेमाल करके, कोड बनाना शुरू करें.

उदाहरण कोड डाउनलोड करने के लिए:

  1. नीचे दिए गए कमांड का इस्तेमाल करके git रिपॉज़िटरी का क्लोन बनाएं:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. इसके अलावा, स्पार्स चेकआउट का इस्तेमाल करने के लिए अपना git इंस्टेंस कॉन्फ़िगर करें, इसलिए आपके पास टेक्स्ट क्लासिफ़ायर के उदाहरण वाले ऐप्लिकेशन की सिर्फ़ फ़ाइलें हों:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

Android Studio पर उदाहरण देखने और सेटअप करने का तरीका जानने के लिए, उदाहरण के तौर पर दिए गए कोड को सेटअप करने के निर्देश Android के लिए सेटअप गाइड.

मुख्य कॉम्पोनेंट

इन फ़ाइलों में टेक्स्ट की कैटगरी तय करने के लिए ज़रूरी कोड शामिल है उदाहरण के तौर पर दिया गया ऐप्लिकेशन:

  • TextClassifierHelper.kt - यह टेक्स्ट की कैटगरी तय करने वाले टूल को शुरू करता है और मॉडल चुनने के विकल्प को हैंडल करता है.
  • MainActivity.kt - ऐप्लिकेशन लागू करता है, जिसमें TextClassifierHelper को कॉल करना और ResultsAdapter.
  • ResultsAdapter.kt - नतीजों को हैंडल और फ़ॉर्मैट करता है.

सेटअप

इस सेक्शन में, आपके डेवलपमेंट एनवायरमेंट को सेट अप करने और कोड प्रोजेक्ट का इस्तेमाल किया जा सकता है. इस पर सामान्य जानकारी के लिए MediaPipe Tasks का इस्तेमाल करने के लिए अपना डेवलपमेंट एनवायरमेंट सेट अप करना. इसमें प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें पूरी करते हैं. इसके बारे में ज़्यादा जानने के लिए, 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() तरीके का इस्तेमाल करें इस्तेमाल करना है. कोड के उदाहरण के लिए, अगला सेक्शन देखें.

टास्क बनाएं

इन कामों के लिए टेक्स्ट क्लासिफ़ायर 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 सबसे ज़्यादा स्कोर वाले क्लासिफ़िकेशन नतीजों की वैकल्पिक ज़्यादा से ज़्यादा संख्या को इस पर सेट करता है वापसी. यदि < कोई समस्या नहीं है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे. कोई भी धनात्मक संख्या -1
scoreThreshold अनुमान के लिए स्कोर का थ्रेशोल्ड सेट करता है, जो इसमें दिए गए स्कोर को ओवरराइड करता है मॉडल मेटाडेटा (अगर कोई है). इस वैल्यू से कम के नतीजे अस्वीकार कर दिए जाते हैं. कोई भी फ़्लोट सेट नहीं है
categoryAllowlist अनुमति वाली कैटगरी के नामों की वैकल्पिक सूची सेट करता है. अगर खाली नहीं है, ऐसे वर्गीकरण परिणाम होंगे जिनका श्रेणी नाम इस सेट में नहीं है फ़िल्टर करके बाहर किया गया. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता. यह विकल्प, categoryDenylist और इसका इस्तेमाल करने वाले उपयोगकर्ताओं के लिए अलग-अलग है दोनों में गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है
categoryDenylist ऐसी कैटगरी के नामों की वैकल्पिक सूची सेट करता है जिनकी अनुमति नहीं है. अगर आपने खाली नहीं है, इसलिए डेटा को अलग-अलग ग्रुप में बांटने के ऐसे नतीजे फ़िल्टर कर दिए जाएंगे जिनकी कैटगरी का नाम इस सेट में होगा बाहर. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता. यह विकल्प म्यूचुअली है सिर्फ़ categoryAllowlist इस्तेमाल करने पर, दोनों नतीजे इस्तेमाल करने में गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है

डेटा तैयार करें

टेक्स्ट क्लासिफ़ायर, टेक्स्ट (String) डेटा के साथ काम करता है. यह टास्क, डेटा इनपुट मैनेज करता है प्री-प्रोसेसिंग, जिसमें टोकनाइज़ेशन और टेंसर प्री-प्रोसेसिंग शामिल है.

सभी प्री-प्रोसेसिंग को classify() फ़ंक्शन में हैंडल किया जाता है. कोई ज़रूरत नहीं है का इस्तेमाल करें.

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

टास्क को पूरा करें

टेक्स्ट की कैटगरी तय करने वाला टूल, चलाने के लिए TextClassifier.classify() फ़ंक्शन का इस्तेमाल करता है अनुमान. डेटा की कैटगरी तय करने के लिए, एक अलग एक्ज़ीक्यूशन थ्रेड का इस्तेमाल करें ताकि आपके ऐप्लिकेशन में Android यूज़र इंटरफ़ेस थ्रेड ब्लॉक न हो.

नीचे दिया गया कोड बताता है कि टास्क की मदद से प्रोसेसिंग कैसे की जाए मॉडल को एक्ज़ीक्यूट करने की सुविधा मिलती है.

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

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

टास्क को चलाने का तरीका, कोड के उदाहरण में देखा जा सकता है TextClassifierHelper क्लास 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".

कोड के उदाहरण में, नतीजे दिखाने का एक उदाहरण दिया गया है ResultsAdapter क्लास और ViewHolder इनर क्लास.