Android के लिए भाषा का पता लगाने की गाइड

MediaPipe भाषा डिटेक्टर टास्क से, आपको टेक्स्ट के किसी हिस्से की भाषा की पहचान करने में मदद मिलती है. ये निर्देश आपको बताते हैं कि Android ऐप्लिकेशन के साथ भाषा का पता लगाने वाले टूल का इस्तेमाल कैसे किया जाता है. इन निर्देशों में बताया गया कोड सैंपल, GitHub पर उपलब्ध है.

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

कोड का उदाहरण

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

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

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

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

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

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

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

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

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

सेटअप

इस सेक्शन में खास तौर पर लैंग्वेज डिटेक्टर का इस्तेमाल करने के लिए, अपने डेवलपमेंट एनवायरमेंट को सेट अप करने और कोड प्रोजेक्ट को सेट करने के मुख्य चरणों के बारे में बताया गया है. MediaPipe Tasks का इस्तेमाल करने और प्लैटफ़ॉर्म के वर्शन की ज़रूरी शर्तों के साथ-साथ अपना डेवलपमेंट एनवायरमेंट सेट अप करने से जुड़ी सामान्य जानकारी के लिए, Android के लिए सेटअप गाइड देखें.

डिपेंडेंसी

भाषा का पता लगाने वाला टूल, com.google.mediapipe:tasks-text लाइब्रेरी का इस्तेमाल करता है. अपने Android ऐप्लिकेशन डेवलपमेंट प्रोजेक्ट की build.gradle फ़ाइल में यह डिपेंडेंसी जोड़ें. इस कोड के साथ ज़रूरी डिपेंडेंसी इंपोर्ट की जा सकती हैं:

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

मॉडल

MediaPipe लैंग्वेज डिटेक्टर टास्क के लिए एक प्रशिक्षित मॉडल की ज़रूरत होती है, जो इस टास्क के साथ काम कर सके. भाषा का पता लगाने वाले टूल के लिए उपलब्ध प्रशिक्षित मॉडल के बारे में ज़्यादा जानकारी के लिए, टास्क की खास जानकारी मॉडल सेक्शन देखें.

मॉडल चुनें और डाउनलोड करें और फिर इसे अपनी प्रोजेक्ट डायरेक्ट्री में स्टोर करें:

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

ModelName पैरामीटर में मॉडल का पाथ बताएं.

टास्क बनाएं

टास्क बनाने के लिए, createFrom...() में से किसी एक फ़ंक्शन का इस्तेमाल किया जा सकता है. createFromOptions() फ़ंक्शन, भाषा की पहचान करने वाले टूल के लिए कॉन्फ़िगरेशन के विकल्पों को स्वीकार करता है. createFromFile() फ़ैक्ट्री फ़ंक्शन का इस्तेमाल करके भी टास्क शुरू किया जा सकता है. createFromFile() फ़ंक्शन, ट्रेन की गई मॉडल फ़ाइल के रिलेटिव या ऐब्सलूट पाथ को स्वीकार करता है. टास्क को कॉन्फ़िगर करने के बारे में ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन के विकल्प देखें.

नीचे दिए गए कोड में इस टास्क को बनाने और कॉन्फ़िगर करने का तरीका बताया गया है.

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

कोड उदाहरण में, टास्क बनाने का एक उदाहरण देखा जा सकता है LanguageDetectorHelper क्लास initDetector() फ़ंक्शन.

कॉन्फ़िगरेशन विकल्प

इस टास्क में, Android ऐप्लिकेशन के कॉन्फ़िगरेशन के ये विकल्प मौजूद हैं:

विकल्प का नाम ब्यौरा वैल्यू रेंज डिफ़ॉल्ट मान
maxResults नतीजे दिखाने के लिए, सबसे ज़्यादा स्कोर किए गए भाषा के सुझावों की ज़्यादा से ज़्यादा वैकल्पिक संख्या सेट करता है. अगर यह वैल्यू शून्य से कम है, तो सभी उपलब्ध नतीजे दिखाए जाते हैं. कोई भी पॉज़िटिव नंबर -1
scoreThreshold अनुमान के स्कोर का थ्रेशोल्ड सेट करता है, जो मॉडल मेटाडेटा (अगर कोई है) में दिए गए स्कोर को बदलता है. इस वैल्यू से कम के नतीजे अस्वीकार कर दिए गए हैं. कोई भी फ़्लोट सेट नहीं किया गया है
categoryAllowlist अनुमति वाली भाषा के कोड की वैकल्पिक सूची सेट करता है. अगर यह खाली नहीं है, तो ऐसे भाषा के अनुमान फ़िल्टर कर दिए जाएँगे जिनका भाषा कोड इस सेट में नहीं है. यह विकल्प categoryDenylist के साथ म्यूचुअली एक्सक्लूसिव है और इसके दोनों नतीजों का इस्तेमाल करने में गड़बड़ी है. कोई भी स्ट्रिंग सेट नहीं किया गया है
categoryDenylist उन भाषा कोड की वैकल्पिक सूची सेट करता है जिनकी अनुमति नहीं है. अगर यह खाली नहीं है, तो ऐसे भाषा के अनुमान फ़िल्टर करके बाहर कर दिए जाएंगे जिनका भाषा कोड इस सेट में होगा. यह विकल्प categoryAllowlist के साथ म्यूचुअली एक्सक्लूसिव है और दोनों नतीजों का इस्तेमाल करने में गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं किया गया है

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

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

String inputText = "Some input text for the language detector";

टास्क चलाएं

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

नीचे दिया गया कोड बताता है कि एक अलग एक्ज़ीक्यूशन थ्रेड का इस्तेमाल करके, टास्क मॉडल की प्रोसेसिंग को कैसे एक्ज़ीक्यूट करें.

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

कोड के उदाहरण में, टास्क चलाने का एक उदाहरण देखा जा सकता है LanguageDetectorHelper क्लास detect() फ़ंक्शन.

नतीजे मैनेज करें और दिखाएं

भाषा का पता लगाने वाला टूल, LanguageDetectorResult देता है. इसमें भाषा के अनुमान की सूची के साथ-साथ, उन अनुमानों की संभावना भी होती है. मॉडल में भाषा की कैटगरी बताई गई हैं. जिस मॉडल का इस्तेमाल किया जा रहा है उससे जुड़ी जानकारी के लिए, टास्क की खास जानकारी मॉडल सेक्शन देखें.

इस टास्क के आउटपुट डेटा का एक उदाहरण यहां दिया गया है:

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

यह नतीजा, इनपुट टेक्स्ट पर मॉडल चलाकर मिला है: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

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