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

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

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

कोड का उदाहरण

MediaPipe Tasks का उदाहरण कोड iOS के लिए टेक्स्ट क्लासिफ़ायर ऐप्लिकेशन को बुनियादी तौर पर लागू करने का तरीका है.

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

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

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

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

  1. नीचे दिए गए कमांड का इस्तेमाल करके, गिट रिपॉज़िटरी का क्लोन बनाएं:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. इसके अलावा, स्पार्स चेकआउट का इस्तेमाल करने के लिए अपना गिट इंस्टेंस कॉन्फ़िगर करें, ताकि आपके पास सिर्फ़ Text Classifier उदाहरण वाले ऐप्लिकेशन की फ़ाइलें हों:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

उदाहरण कोड का स्थानीय वर्शन बनाने के बाद, MediaPipe टास्क लाइब्रेरी को इंस्टॉल किया जा सकता है, Xcode का इस्तेमाल करके प्रोजेक्ट खोला जा सकता है, और ऐप्लिकेशन चलाया जा सकता है. निर्देशों के लिए, iOS के लिए सेटअप गाइड देखें.

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

इन फ़ाइलों में Text Classifier ऐप्लिकेशन के उदाहरण वाला ज़रूरी कोड दिया गया है:

  • TextClassifierHelper.swift: टेक्स्ट की कैटगरी तय करने वाली प्रोसेस को शुरू करता है और मॉडल चुनने का काम हैंडल करता है.
  • ViewController.swift: यूज़र इंटरफ़ेस (यूआई) को लागू करता है और नतीजों को फ़ॉर्मैट करता है.

सेटअप

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

डिपेंडेंसी

टेक्स्ट क्लासिफ़ायर, MediaPipeTasksText लाइब्रेरी का इस्तेमाल करता है, जिसे CocoaPods का इस्तेमाल करके इंस्टॉल किया जाना चाहिए. यह लाइब्रेरी, Swift और Objective-C ऐप्लिकेशन, दोनों के साथ काम करती है और इसके लिए अलग से किसी भाषा के सेटअप की ज़रूरत नहीं होती.

macOS पर CocoaPods इंस्टॉल करने के निर्देशों के लिए, CocoaPods को इंस्टॉल करने से जुड़ी गाइड देखें. अपने ऐप्लिकेशन के लिए ज़रूरी पॉड के साथ Podfile बनाने का तरीका जानने के लिए, CocoaPods का इस्तेमाल करना देखें.

नीचे दिए गए कोड का इस्तेमाल करके, Podfile में MediaPipesText पॉड जोड़ें:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

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

मॉडल

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

कोई मॉडल चुनें और डाउनलोड करें और Xcode का इस्तेमाल करके उसे अपनी प्रोजेक्ट डायरेक्ट्री में जोड़ें. अपने Xcode प्रोजेक्ट में फ़ाइलें जोड़ने के तरीके से जुड़े निर्देशों के लिए, अपने Xcode प्रोजेक्ट में फ़ाइलें और फ़ोल्डर मैनेज करना देखें.

अपने ऐप्लिकेशन बंडल में मॉडल का पाथ बताने के लिए, BaseOptions.modelAssetPath प्रॉपर्टी का इस्तेमाल करें. कोड के उदाहरण के लिए, अगला सेक्शन देखें.

टास्क बनाएं

टेक्स्ट क्लासिफ़ायर टास्क के किसी इनिशलाइज़र को कॉल करके टास्क बनाया जा सकता है. TextClassifier(options:) शुरू करने वाला टूल, कॉन्फ़िगरेशन के विकल्पों के लिए वैल्यू सेट करता है.

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

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

Swift

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

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

इस टास्क में, iOS ऐप्लिकेशन के लिए कॉन्फ़िगरेशन के ये विकल्प शामिल हैं:

विकल्प का नाम ब्यौरा वैल्यू रेंज डिफ़ॉल्ट मान
displayNamesLocale अगर यह उपलब्ध हो, तो टास्क के मॉडल के मेटाडेटा में दिए गए डिसप्ले नेम के लिए, लेबल की भाषा सेट करता है. अंग्रेज़ी के लिए डिफ़ॉल्ट रूप से en है. TensorFlow Lite Metadata Writer API का इस्तेमाल करके, कस्टम मॉडल के मेटाडेटा में स्थानीय भाषा के हिसाब से लेबल जोड़े जा सकते हैं स्थान-भाषा का कोड en
maxResults यह विकल्प, टॉप-स्कोर किए गए क्लासिफ़िकेशन के नतीजों की ज़्यादा से ज़्यादा संख्या को सेट करता है, ताकि नतीजे दिखाए जा सकें. अगर < 0 है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे. कोई भी पॉज़िटिव नंबर -1
scoreThreshold अनुमान के स्कोर का थ्रेशोल्ड सेट करता है, जो मॉडल मेटाडेटा (अगर कोई है) में दिए गए स्कोर को बदलता है. इस वैल्यू से कम के नतीजे अस्वीकार कर दिए गए हैं. कोई भी फ़्लोट सेट नहीं किया गया है
categoryAllowlist अनुमति वाली कैटगरी के नामों की वैकल्पिक सूची सेट करता है. अगर यह खाली नहीं है, तो कैटगरी के जिन नतीजों की कैटगरी का नाम इस सेट में नहीं होगा उन्हें फ़िल्टर कर दिया जाएगा. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता है. यह विकल्प categoryDenylist के साथ म्यूचुअली एक्सक्लूसिव है और दोनों नतीजों का इस्तेमाल करने में गड़बड़ी है. कोई भी स्ट्रिंग सेट नहीं किया गया है
categoryDenylist उन कैटगरी के नामों की वैकल्पिक सूची सेट करता है जिनकी अनुमति नहीं है. अगर यह फ़ील्ड खाली नहीं है, तो कैटगरी के जिन नतीजों की कैटगरी का नाम इस सेट में होगा उन्हें फ़िल्टर करके बाहर कर दिया जाएगा. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता है. यह विकल्प categoryAllowlist के साथ म्यूचुअली एक्सक्लूसिव है और इसका इस्तेमाल करने पर दोनों में गड़बड़ी होगी. कोई भी स्ट्रिंग सेट नहीं किया गया है

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

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

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

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

टास्क चलाएं

टेक्स्ट की कैटगरी तय करने वाला टूल चलाने के लिए, classify(text:) तरीके का इस्तेमाल करें. टेक्स्ट क्लासिफ़ायर, इनपुट टेक्स्ट के लिए संभावित कैटगरी दिखाता है.

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

ध्यान दें: टास्क, मौजूदा थ्रेड को तब तक ब्लॉक करता है, जब तक कि वह टेक्स्ट पर अनुमान लगाना खत्म नहीं कर देता. मौजूदा थ्रेड को ब्लॉक करने से बचने के लिए, iOS Dispatch या NSOperation फ़्रेमवर्क का इस्तेमाल करके, बैकग्राउंड थ्रेड में प्रोसेसिंग चलाएं.

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

अनुमान चलाने पर, टेक्स्ट क्लासिफ़ायर टास्क एक 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".

उदाहरण कोड में मौजूद ViewController.swift फ़ाइल में यह दिखाया गया है कि टास्क से दिखाए गए, पहचान के नतीजों को कैसे दिखाया जाए.