Android के लिए टेक्स्ट एम्बेड करने की गाइड

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

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

कोड का उदाहरण

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

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

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

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

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

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

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

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

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

  • TextEmbedderHelper.kt: टेक्स्ट एम्बेडर को शुरू करता है और मॉडल और प्रतिनिधि चुनने का काम मैनेज करता है.
  • MainActivity.kt: ऐप्लिकेशन को लागू करता है और यूज़र इंटरफ़ेस के कॉम्पोनेंट इकट्ठा करता है.

सेटअप

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

ModelAssetPath पैरामीटर में मॉडल का पाथ बताएं. उदाहरण कोड में, मॉडल को TextEmbedderHelper.kt फ़ाइल में मौजूद setupTextEmbedder() फ़ंक्शन में तय किया गया है:

मॉडल के लिए इस्तेमाल किया गया पाथ बताने के लिए, BaseOptions.Builder.setModelAssetPath() फ़ंक्शन का इस्तेमाल करें. इस तरीके की जानकारी अगले सेक्शन में दिए गए कोड उदाहरण में दी गई है.

टास्क बनाएं

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

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

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

लागू किए गए उदाहरण में, TextEmbedderHelper.kt फ़ाइल में मौजूद setupTextEmbedder() फ़ंक्शन में टेक्स्ट एम्बेडर के विकल्प सेट किए जाते हैं.

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

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

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

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

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

val inputText = "The input text to be embedded."

टास्क चलाएं

टेक्स्ट एम्बेडर, अनुमान को ट्रिगर करने के लिए embed फ़ंक्शन का इस्तेमाल करता है. टेक्स्ट एम्बेड करने का मतलब है, इनपुट टेक्स्ट के लिए एम्बेडिंग वेक्टर दिखाना.

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

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

उदाहरण के तौर पर दिए गए कोड में, embed फ़ंक्शन को TextEmbedderHelper.kt फ़ाइल में कॉल किया गया है.

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

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

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

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

TextEmbedder.cosineSimilarity फ़ंक्शन का इस्तेमाल करके, एम्बेड किए गए दो वीडियो के मिलते-जुलते मतलब की तुलना की जा सकती है. उदाहरण के लिए, यह कोड देखें.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

उदाहरण के तौर पर दिए गए कोड में, TextEmbedder.cosineSimilarity() फ़ंक्शन को TextEmbedderHelper.kt फ़ाइल में कॉल किया गया है.