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 के लिए सेटअप गाइड देखें.

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

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

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

सेटअप

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

अगर आपको पसंद के मुताबिक बनाए गए कॉन्फ़िगरेशन के विकल्पों के साथ शुरू किए गए टेक्स्ट एम्बेडर की ज़रूरत नहीं है, तो डिफ़ॉल्ट विकल्पों वाला टेक्स्ट एम्बेडर बनाने के लिए, 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 के एक साथ कई काम करने की सुविधा का भी इस्तेमाल किया जा सकता है.

उदाहरण के कोड में, 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 फ़ाइल में कॉल किया जाता है.