Implémenter un classificateur de texte

Le classificateur de texte utilise des techniques de machine learning pour aider les développeurs classer du texte.

Classificateur de texte dans la version Android 11

Android 11 introduit un paramètre par défaut pouvant être mis à jour du service de classification de texte <ph type="x-smartling-placeholder"></ph> ExtServices. Sur les appareils équipés d'Android 11 ou à un niveau supérieur, le <ph type="x-smartling-placeholder"></ph> getTextClassifier() renvoie cette implémentation par défaut dans le module ExtServices. Il est recommandé aux fabricants d'appareils d'utiliser cette implémentation de TextClassifierService, car il peut être mis à jour via l'OTA Mainline mises à jour.

Android 11 supprime également le classificateur de texte local l'implémentation par défaut, précédemment introduite dans <ph type="x-smartling-placeholder"></ph> Android 8.1 Par conséquent, <ph type="x-smartling-placeholder"></ph> getLocalTextClassifier() renvoie un classificateur de texte de NO_OP. Au lieu de l’environnement local vous devez utiliser <ph type="x-smartling-placeholder"></ph> getDefaultTextClassifierImplementation() .

Pour les fabricants d'appareils qui souhaitent utiliser leur propre classification de texte des algorithmes, ils peuvent implémenter un service de classificateur de texte personnalisé en spécifiant config_defaultTextClassifierPackage dans la zone "config.xml" . Si cette configuration n'est pas spécifiée, la mise en œuvre par défaut du système est utilisé. Les implémentations personnalisées peuvent obtenir une instance la mise en œuvre en appelant <ph type="x-smartling-placeholder"></ph> TextClassifierService.getDefaultTextClassifierImplementation(Context). Pour en savoir plus, consultez <ph type="x-smartling-placeholder"></ph> Implémenter un service de classificateur de texte personnalisé

Tests

Pour valider votre implémentation du service de classification de texte, utilisez la classe Tests de la suite de tests de compatibilité (CTS) dans platform/cts/tests/tests/textclassifier/.

Améliorations apportées au classificateur de texte dans la version Android 10

Android 10 introduit deux méthodes API TextClassifier: <ph type="x-smartling-placeholder"></ph> suggestConversationActions et <ph type="x-smartling-placeholder"></ph> detectLanguage La méthode suggestConversationActions génère des suggestions de réponses. et les actions d'une conversation donnée, ainsi que la méthode detectLanguage détecte la langue du texte.

Les fichiers de modèle pour ces méthodes sont présentés ci-dessous et se trouvent dans <ph type="x-smartling-placeholder"></ph> external/libtextclassifier/models/.

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

Pour publier un appareil dont l'image d'usine contient les derniers fichiers du modèle, procédez comme suit : les éléments suivants:

  1. Récupérez les derniers fichiers de modèle.

    external/libtextclassifier/models/update.sh
    
  2. Renommez les fichiers téléchargés pour remplacer les fichiers existants.
  3. Vérifiez la configuration.
    adb shell dumpsys textclassification
    

    Voici un exemple du résultat de cette commande.

    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 }
    

Améliorations apportées au classificateur de texte dans la version Android 9

Android 9 a étendu le texte de classification introduit dans Android 8.1, avec le nouveau système un service de classification. Le service de classification de texte est recommandé pour les OEM. pour assurer la compatibilité avec un système de classification de texte. Le service de classification de texte font partie de n'importe quel APK système et peuvent être mis à jour si nécessaire.

Android 9 inclut un classificateur de texte par défaut implémentation de service ( TextClassifierImpl) utilisé, sauf si vous le remplacez par un service de classificateur de texte personnalisé la mise en œuvre.

Implémenter un service de classificateur de texte personnalisé

Les sections suivantes décrivent comment implémenter un classificateur de texte personnalisé que vous développez.

Étendre 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) {
        ...
    }
    ...
}

Définir le service dans le fichier manifeste 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>

Notez que le service doit exiger Autorisation android.permission.BIND_TEXTCLASSIFIER_SERVICE et doit spécifiez le Intention android.service.textclassifier.TextClassifierService action.

Définir un service de classificateur de texte par défaut du système dans la superposition de configuration

[config.xml].

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

Créer le service de classification de texte dans l'image système

Votre service de classification de texte personnalisé peut être un APK autonome dans l'image système ou dans une partie d'un autre APK système. Le système utilise PackageManager.MATCH_SYSTEM_ONLY pour résoudre le service.

Tests

Exécutez des tests dans android.view.textclassifier.cts.

Autres modifications apportées à la classification de texte sous Android 9

Reportez-vous à Inspecter les modules de langage installés

Les fichiers de modèle Android 9 ne sont pas compatibles avec Fichiers de modèle Android 8.x.

Les fichiers de modèle Android 9 portent le nom suivant: texclassifier.[language-code].model (par exemple, textclassifier.en.model). au lieu de textclassifier.smartselection.en.model dans Android 8.x.

Obtenir les derniers fichiers du modèle de classification de texte

Pour obtenir les modèles les plus récents, vous pouvez exécuter le script suivant, qui met à jour les modèles TextClassifier dans l'arborescence source:

external/libtextclassifier/native/models/update.sh

Classificateur de texte dans la version 8.1 d'Android

Android 8.1 a introduit l'API TextClassfier pour implémenter le texte la classification.

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

Les développeurs peuvent définir un classificateur de texte personnalisé:

tcm.setTextClassifier(customTextClassifier);

Toutefois, si le développeur d'une application définit le classificateur de texte sur null, un système Le classificateur de texte par défaut est renvoyé pour getTextClassifier().

Consultez la android.view.textclassifier.TextClassifierImpl.

TextView et WebView utilisent TextClassifier pour la sélection intelligente et le texte intelligent partager des caractéristiques.

Utilisation du classificateur de texte

Figure 1 : Utilisation de TextClassifier

Modèles de réseau de neurones TextClassifier

Le projet Android Open Source (AOSP) comprend plusieurs réseaux de neurones permettant de classer du texte. Chaque fichier de modèle est entraîné pour un seul langage. Vous pouvez installer n'importe quelle combinaison de modèles. Les modèles sont définis dans:

external/libtextclassifier/Android.mk

Langue de préinstallation sur les appareils

Vous pouvez spécifier un bundle de modèles de langage et l'installer sur un appareil:

# -----------------------
# 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)

Par exemple, dans device/google/marlin/device-common.mk.

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

Inspecter la langue installée modules

Utilisez ADB pour lister les fichiers du répertoire:

$ 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

Mises à jour du modèle

Les modèles peuvent être mis à jour en incluant un nouveau modèle dans un système une mise à jour d'image, ou de manière dynamique avec un composant système qui déclenche une mise à jour via le système API ACTION_UPDATE_SMART_SELECTION l'intention. En diffusant cet intent d'API du système, le framework peut mettre à jour le modèle de langage de la langue actuellement définie. Les modèles eux-mêmes contiennent la langue acceptée et un numéro de version, afin que la version la plus récente est utilisé.

Il n'est donc pas nécessaire de précharger les modèles pour toutes les langues, car ils peuvent être ajoutés plus tard. Si aucun fichier de modèle n'est trouvé pour la langue spécifiée, classification du texte renvoie des valeurs "no-op".

Tests de la suite de tests de compatibilité

Les tests de la suite de tests de compatibilité Android (CTS) associés sont disponibles dans:

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