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

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

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

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

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

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

टेस्ट करना

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

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

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

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

कंपैटबिलिटी टेस्ट सुइट की जांच

Android कंपैटबिलिटी टेस्ट सुइट (सीटीएस) के संबंधित टेस्ट, यहां दिए गए हैं:

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