iOS के लिए टेक्स्ट एम्बेड करने से जुड़ी गाइड

टेक्स्ट एम्बेडर टास्क की मदद से, टेक्स्ट डेटा को संख्या के तौर पर दिखाया जा सकता है, ताकि उसका सिमेंटिक मतलब कैप्चर किया जा सके. ये निर्देश आपको iOS ऐप्लिकेशन में टेक्स्ट एम्बेडर इस्तेमाल करने का तरीका बताते हैं.

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

कोड का उदाहरण

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

इस ऐप्लिकेशन का इस्तेमाल, अपने iOS ऐप्लिकेशन के लिए शुरुआती बिंदु के तौर पर किया जा सकता है. इसके अलावा, किसी मौजूदा ऐप्लिकेशन में बदलाव करते समय भी इसका इस्तेमाल किया जा सकता है. 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_embedder/ios/
    

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

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

नीचे दी गई फ़ाइलों में, टेक्स्ट एम्बेडर के उदाहरण वाले ऐप्लिकेशन के लिए ज़रूरी कोड शामिल है:

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

सेटअप

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

डिपेंडेंसी

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

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

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

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

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

मॉडल

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

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

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

टास्क बनाना

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

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

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

Swift

import MediaPipeTasksText

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

let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true

let textEmbedder = try TextEmbedder(options: options)

Objective-C

@import MediaPipeTasksText;

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

MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;

MPPTextEmbedder *textEmbedder =
      [[MPPTextEmbedder alloc] initWithOptions:options error:nil];

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

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

विकल्प का नाम ब्यौरा वैल्यू की रेंज डिफ़ॉल्ट मान
l2_normalize लौटाए गए फ़ीचर वेक्टर को L2 नॉर्म के साथ नॉर्मलाइज़ करना है या नहीं. इस विकल्प का इस्तेमाल सिर्फ़ तब करें, जब मॉडल में पहले से कोई नेटिव L2_NORMALIZATION TFLite Op मौजूद न हो. ज़्यादातर मामलों में, ऐसा पहले से ही होता है और इसलिए, L2 नॉर्मलाइज़ेशन को TFLite इंफ़रेंस की मदद से हासिल किया जाता है. इसके लिए, इस विकल्प की ज़रूरत नहीं होती. Boolean False
quantize स्केलर क्वांटाइज़ेशन की मदद से, रिटर्न किए गए एम्बेड को बाइट में क्वांटाइज़ किया जाना चाहिए या नहीं. एम्बेड को यूनिट-नॉर्म माना जाता है और इसलिए, किसी भी डाइमेंशन की वैल्यू [-1.0, 1.0] के बीच होनी चाहिए. अगर ऐसा नहीं है, तो l2_normalize विकल्प का इस्तेमाल करें. Boolean False

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

इनपुट टेक्स्ट को एम्बेड करने और उसके एम्बेड किए गए वैक्टर पाने के लिए, TextEmbedder के embed(text:) तरीके का इस्तेमाल किया जा सकता है.

Swift

let result = try textEmbedder.embed(text: text)

Objective-C

MPPTextEmbedderResult *result = [textEmbedder embedText:text
                                                  error:nil];

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

उदाहरण के कोड में, embed(text:) तरीके को TextEmbedderService.swift फ़ाइल में कॉल किया गया है.

नतीजों को हैंडल करना और दिखाना

अनुमान लगाने के बाद, टेक्स्ट एम्बेडर टास्क एक TextEmbedderResult ऑब्जेक्ट दिखाता है. इसमें इनपुट टेक्स्ट के लिए एम्बेड (फ़्लोटिंग पॉइंट या स्केलर-क्विंटाइज़्ड) की सूची होती है.

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

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

TextEmbedder.cosineSimilarity तरीके का इस्तेमाल करके, दो एम्बेड की सेमेटिक मिलती-जुलती चीज़ों की तुलना की जा सकती है.

Swift

let similarity = try TextEmbedder.cosineSimilarity(
  embedding1: result.embeddingResult.embeddings[0],
  embedding2: otherResult.embeddingResult.embeddings[0])
    

Objective-C

NSNumber *similarity = [MPPTextEmbedder
      cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0]
                          andEmbedding2:otherResult.embeddingResult.embeddings[0]
                                  error:nil];
    

उदाहरण के लिए दिए गए कोड में, TextEmbedder.cosineSimilarity तरीके को TextEmbedderService.swift फ़ाइल में कॉल किया गया है.