टेक्स्ट क्लासिफ़ायर लागू करना

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

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) को कॉल करना होगा. ज़्यादा जानकारी के लिए, पसंद के मुताबिक टेक्स्ट क्लासिफ़ायर सेवा लागू करना लेख पढ़ें.

जांच करना

टेक्स्ट क्लासिफ़ायर सेवा के अपने वर्शन की पुष्टि करने के लिए, Compatibility Test Suite (CTS) के टेस्ट का इस्तेमाल करें जो platform/cts/tests/tests/textclassifier/ में मौजूद हैं.

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

[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 के मॉडल की फ़ाइलों के नाम का पैटर्न यह है: texclassifier.[language-code].model. उदाहरण के लिए, textclassifier.en.model. वहीं, Android 8.x में यह पैटर्न textclassifier.smartselection.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 और WebView, स्मार्ट तरीके से चुनने और स्मार्ट तरीके से टेक्स्ट शेयर करने की सुविधाओं के लिए, TextClassifier का इस्तेमाल करते हैं.

टेक्स्ट क्लासिफ़ायर के इस्तेमाल से जुड़ी जानकारी

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

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

Android Open Source Project (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