टेक्स्ट की कैटगरी तय करने की सुविधा लागू करें

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

Android 11 रिलीज़ में टेक्स्ट की कैटगरी तय करने वाला टूल

Android 11 में, ExtServices मॉड्यूल में टेक्स्ट क्लासिफ़ायर सेवा को डिफ़ॉल्ट रूप से लागू किया गया है. इसे अपडेट भी किया जा सकता है. Android 11 या इसके बाद के वर्शन पर चलने वाले डिवाइसों पर, getTextClassifier() तरीका, ExtServices मॉड्यूल में यह डिफ़ॉल्ट लागू करने का तरीका दिखाता है. डिवाइस बनाने वाली कंपनियों को TextClassifierService को इस तरीके से लागू करने का सुझाव दिया जाता है, क्योंकि इसे Mainline OTA अपडेट के ज़रिए अपडेट किया जा सकता है.

Android 11 में, टेक्स्ट को अलग-अलग कैटगरी में बांटने वाले स्थानीय सिस्टम को भी हटा दिया गया है. यह सिस्टम, पहले Android 8.1 में डिफ़ॉल्ट रूप से लागू किया गया था. इस वजह से, getLocalTextClassifier() NO_OP टेक्स्ट क्लासिफ़ायर दिखाता है. स्थानीय तौर पर लागू करने के बजाय, आपको getDefaultTextClassifierImplementation() तरीके का इस्तेमाल करना चाहिए.

डिवाइस बनाने वाली ऐसी कंपनियां जो टेक्स्ट की कैटगरी तय करने वाले अपने एल्गोरिदम का इस्तेमाल करना चाहती हैं वे config.xml फ़ाइल में config_defaultTextClassifierPackage की जानकारी देकर, टेक्स्ट की कैटगरी तय करने वाली कस्टम सेवा लागू कर सकती हैं. अगर इस कॉन्फ़िगरेशन की जानकारी नहीं दी गई है, तो सिस्टम को लागू करने के लिए डिफ़ॉल्ट तरीके का इस्तेमाल किया जाता है. कस्टम तरीके से लागू करने पर, TextClassifierService.getDefaultTextClassifierImplementation(Context) को कॉल करके, डिफ़ॉल्ट तरीके से लागू करने का उदाहरण पाया जा सकता है. ज़्यादा जानकारी के लिए, टेक्स्ट को कैटगरी में बांटने वाली कस्टम सेवा लागू करना लेख पढ़ें.

टेस्ट करना

टेक्स्ट क्लासिफ़ायर सेवा को लागू करने की पुष्टि करने के लिए, platform/cts/tests/tests/textclassifier/ में, काम करने की जांच करने वाले टूल (CTS) के टेस्ट का इस्तेमाल करें.

Android 10 में टेक्स्ट की कैटगरी तय करने की सुविधा में किए गए सुधार

Android 10 में, TextClassifier API के लिए दो तरीके जोड़े गए हैं: suggestConversationActions और detectLanguage. suggestConversationActions तरीका, किसी बातचीत से सुझाए गए जवाब और कार्रवाइयां जनरेट करता है. वहीं, detectLanguage तरीका टेक्स्ट की भाषा का पता लगाता है.

इन तरीकों के लिए मॉडल फ़ाइलें यहां दी गई हैं. इन्हें external/libtextclassifier/models/ में देखा जा सकता है.

  • suggestionConversationActions: actions_suggestions.universal.model
  • detectLanguage: lang_id.model

फ़ैक्ट्री इमेज में, मॉडल की नई फ़ाइलों के साथ डिवाइस रिलीज़ करने के लिए, ये काम करें:

  1. मॉडल की नई फ़ाइलें फ़ेच करें.

    external/libtextclassifier/models/update.sh
    
  2. मौजूदा फ़ाइलों को बदलने के लिए, डाउनलोड की गई फ़ाइलों का नाम बदलें.
  3. सेटअप की पुष्टि करें.
    adb shell dumpsys textclassification
    

    यह उस कमांड के आउटपुट का सैंपल है.

    TextClassifierImpl:
      Annotator model file(s):
        ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=608 locales=und }
        ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=608 locales=en }
      LangID model file(s):
        ModelFile { path=/etc/textclassifier/lang_id.model name=lang_id.model version=0 locales=und }
      Actions model file(s):
        ModelFile { path=/etc/textclassifier/actions_suggestions.universal.model name=actions_suggestions.universal.model version=0 locales=und }

Android 9 में टेक्स्ट की कैटगरी तय करने वाले टूल में किए गए सुधार

Android 9 में, टेक्स्ट के कैटगरी में बांटने की नई सेवा के साथ Android 8.1 में शुरू किए गए टेक्स्ट के कैटगरी में बांटने के फ़्रेमवर्क को बेहतर बनाया गया है. टेक्स्ट क्लासिफ़ायर की सेवा, OEMs के लिए टेक्स्ट क्लासिफ़िकेशन सिस्टम की सहायता देने का सुझाया गया तरीका है. टेक्स्ट को कैटगरी में बांटने वाली सेवा, किसी भी सिस्टम APK का हिस्सा हो सकती है. साथ ही, ज़रूरत पड़ने पर इसे अपडेट किया जा सकता है.

Android 9 में, टेक्स्ट क्लासिफ़ायर की सेवा को डिफ़ॉल्ट रूप से लागू करने की सुविधा ( TextClassifierImpl) शामिल होती है. इसका इस्तेमाल तब तक किया जाता है, जब तक इसे पसंद के मुताबिक टेक्स्ट क्लासिफ़ायर की सेवा को लागू करने की सुविधा से बदला नहीं जाता.

टेक्स्ट को अलग-अलग कैटगरी में बांटने वाली कस्टम सेवा लागू करना

नीचे दिए गए सेक्शन में, टेक्स्ट को अलग-अलग कैटगरी में बांटने वाली कस्टम सेवा को लागू करने का तरीका बताया गया है.

android.service.textclassifier.TextClassifierService को एक्सटेंड़ करना

public final class TextClassifierServiceImpl
        extends TextClassifierService {

    // Returns TextClassifierImpl.
    private final TextClassifier tc = getLocalTextClassifier();

    @Override
    public void onSuggestSelection(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextSelection.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextSelection> callback) {
        CompletableFuture.supplyAsync(
                () -> tc.suggestSelection(request))
                .thenAccept(r -> callback.onSuccess(r));
    }

    @Override
    public void onClassifyText(
            @Nullable TextClassificationSessionId sessionId,
		@NonNull TextClassification.Request request,
		@NonNull CancellationSignal cancellationSignal,
		@NonNull Callback<TextClassification> callback) {
        ...
    }

    @Override
    public void onGenerateLinks(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextLinks.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextLinks> callback) {
        ...
    }
    ...
}

Android मेनिफ़ेस्ट में सेवा की जानकारी देना

[AndroidManifest.xml]

<service android:name=".TextClassifierServiceImpl"
  android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE">
    <intent-filter>
      <action android:name=
        "android.service.textclassifier.TextClassifierService"/>
    </intent-filter>
</service>

ध्यान दें कि सेवा के लिए android.permission.BIND_TEXTCLASSIFIER_SERVICE अनुमति ज़रूरी है. साथ ही, इसमें android.service.textclassifier.TextClassifierService इंटेंट ऐक्शन की जानकारी भी होनी चाहिए.

कॉन्फ़िगरेशन ओवरले में, टेक्स्ट को कैटगरी में बांटने वाली सिस्टम की डिफ़ॉल्ट सेवा सेट करना

[config.xml]

<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>

सिस्टम इमेज में टेक्स्ट क्लासिफ़ायर सेवा बनाएं

टेक्स्ट को कैटगरी में बांटने वाली आपकी कस्टम सेवा, एक स्टैंडअलोन APK हो सकती है. इसे सिस्टम इमेज में बनाया गया हो या किसी अन्य सिस्टम APK का हिस्सा हो. सेवा को ठीक करने के लिए, सिस्टम PackageManager.MATCH_SYSTEM_ONLY का इस्तेमाल करता है.

टेस्ट करना

android.view.textclassifier.cts में टेस्ट चलाएं.

Android 9 में टेक्स्ट की कैटगरी तय करने से जुड़े अन्य बदलाव

इंस्टॉल किए गए भाषा मॉड्यूल की जांच करना लेख पढ़ें.

Android 9 की मॉडल फ़ाइलें, Android 8.x की मॉडल फ़ाइलों के साथ काम नहीं करती हैं.

Android 9 मॉडल फ़ाइलों को नाम देने का पैटर्न: Android 8.x में textclassifier.smartselection.en.model के बजाय, texclassifier.[language-code].model (उदाहरण के लिए, textclassifier.en.model).

टेक्स्ट क्लासिफ़िकेशन मॉडल की नई फ़ाइलें पाना

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

external/libtextclassifier/native/models/update.sh

Android 8.1 रिलीज़ में टेक्स्ट की कैटगरी तय करने वाला टूल

Android 8.1 में, टेक्स्ट का ब्यौरा देने की सुविधा लागू करने के लिए TextClassfier API को शामिल किया गया है.

TextClassificationManager tcm =
    context.getSystemService(TextClassificationManager.class);
TextClassifier classifier = tcm.getTextClassifier();
TextSelection selection = classifier.suggestSelection(...);
TextClassification classification = classifier.classifyText(...);

डेवलपर, टेक्स्ट को अपने हिसाब से अलग-अलग कैटगरी में बांटने वाला कस्टम क्लासिफ़ायर सेट कर सकते हैं:

tcm.setTextClassifier(customTextClassifier);

हालांकि, अगर कोई ऐप्लिकेशन डेवलपर टेक्स्ट क्लासिफ़ायर को null पर सेट करता है, तो getTextClassifier() के लिए सिस्टम का डिफ़ॉल्ट टेक्स्ट क्लासिफ़ायर दिखाया जाता है.

android.view.textclassifier.TextClassifierImpl देखें.

TextView और वेबव्यू, स्मार्ट तरीके से टेक्स्ट चुनने और स्मार्ट टेक्स्ट शेयर करने की सुविधाओं के लिए, TextClassifier का इस्तेमाल करते हैं.

टेक्स्ट क्लासिफ़ायर का इस्तेमाल

पहली इमेज. TextClassifier का इस्तेमाल

TextClassifier के न्यूरल-नेट मॉडल

Android ओपन सोर्स प्रोजेक्ट (AOSP) में, टेक्स्ट की कैटगरी तय करने के लिए कई न्यूरल नेटवर्क मॉडल मौजूद हैं. हर मॉडल फ़ाइल को एक भाषा के लिए ट्रेन किया जाता है. मॉडल के किसी भी कॉम्बिनेशन को इंस्टॉल किया जा सकता है. मॉडल इनमें तय किए जाते हैं:

external/libtextclassifier/Android.mk

डिवाइसों पर भाषा के मॉडल पहले से इंस्टॉल करना

भाषा मॉडल का बंडल तय करके, उन्हें किसी डिवाइस पर इंस्टॉल किया जा सकता है:

# -----------------------
# Smart Selection bundles
# -----------------------

include $(CLEAR_VARS)
LOCAL_MODULE           := textclassifier.smartselection.bundle1
LOCAL_REQUIRED_MODULES := textclassifier.smartselection.en.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.es.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.de.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.fr.model
include $(BUILD_STATIC_LIBRARY)

उदाहरण के लिए, device/google/marlin/device-common.mk में.

# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
    textclassifier.smartselection.bundle1

इंस्टॉल किए गए भाषा मॉड्यूल की जांच करना

डायरेक्ट्री में मौजूद फ़ाइलों की सूची देखने के लिए, ADB का इस्तेमाल करें:

$ adb shell ls -l /etc/textclassifier
-rw-r--r-- 1 root root ... textclassifier.smartselection.de.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.en.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.es.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model

मॉडल के अपडेट

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

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

Compatibility Test Suite के टेस्ट

इससे जुड़े Android Compatibility Test Suite (CTS) टेस्ट यहां देखे जा सकते हैं:

cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java

cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java

  • testSmartSelection
  • testSmartSelection_dragSelection
  • testSmartSelection_resetSelection