Implementare il classificatore di testo

Il classificatore di testo utilizza tecniche di machine learning per aiutare gli sviluppatori per classificare il testo.

Classificatore del testo della release di Android 11

Android 11 introduce un'impostazione predefinita aggiornabile del servizio di classificazione del testo Modulo ExtServices. Sui dispositivi con Android 11 o superiore, getTextClassifier() restituisce questa implementazione predefinita nel modulo ExtServices. Consigliamo ai produttori di utilizzare questa implementazione TextClassifierService perché può essere aggiornato tramite OTA di Mainline aggiornamenti.

Android 11 rimuove anche il classificatore di testo locale un'implementazione predefinita introdotta in precedenza Android 8.1 Di conseguenza, getLocalTextClassifier() restituisce un classificatore di testo NO_OP. Invece della strategia devi utilizzare la classe getDefaultTextClassifierImplementation() .

Per i produttori di dispositivi che potrebbero volere utilizzare il proprio testo per classificare possono implementare un servizio di classificazione del testo personalizzato specificando config_defaultTextClassifierPackage in config.xml . Se questa configurazione non è specificata, l'implementazione predefinita di sistema . Le implementazioni personalizzate possono ottenere un'istanza del dell'implementazione richiamando TextClassifierService.getDefaultTextClassifierImplementation(Context). Per ulteriori informazioni, vedi Implementazione di un servizio di classificazione del testo personalizzato.

Test

Per convalidare l'implementazione del servizio di classificazione del testo, utilizza il metodo Test della Compatibility Test Suite (CTS) in platform/cts/tests/tests/textclassifier/.

Miglioramenti al classificatore di testo della release Android 10

Android 10 introduce due metodi API TextClassifier: suggestConversationActions e detectLanguage. Il metodo suggestConversationActions genera le risposte suggerite e le azioni da una determinata conversazione e il metodo detectLanguage rileva la lingua del testo.

I file del modello per questi metodi sono mostrati di seguito e si trovano in external/libtextclassifier/models/.

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

Per rilasciare un dispositivo con i file del modello più recenti nell'immagine di fabbrica, procedi nel seguente modo: le seguenti:

  1. Recupera i file del modello più recenti.

    external/libtextclassifier/models/update.sh
    
  2. Rinomina i file scaricati per sostituire quelli esistenti.
  3. Verifica la configurazione.
    adb shell dumpsys textclassification
    

    Questo è un esempio dell'output del comando.

    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 }
    

Miglioramenti al classificatore di testo della release Android 9

Android 9 ha esteso il testo di classificazione introdotto in Android 8.1 con il nuovo testo di classificazione. Il servizio di classificazione del testo è la soluzione consigliata per gli OEM per fornire il supporto dei sistemi di classificazione del testo. Il servizio di classificazione del testo può far parte di qualsiasi APK di sistema e può essere aggiornata quando necessario.

Android 9 include un classificatore di testo predefinito implementazione del servizio ( TextClassifierImpl) che viene utilizzato, a meno che non lo sostituisci con un servizio di classificazione del testo personalizzato implementazione.

Implementare un servizio di classificazione del testo personalizzato

Le seguenti sezioni descrivono come implementare un classificatore di testo personalizzato per il servizio che hai sviluppato.

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

Definisci il servizio nel file manifest di 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>

Tieni presente che il servizio deve richiedere android.permission.BIND_TEXTCLASSIFIER_SERVICE e devono specificare Intenzione android.service.textclassifier.TextClassifierService un'azione.

Imposta un servizio di classificazione del testo predefinito di sistema nell'overlay di configurazione

[config.xml]

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

Creare il servizio di classificazione del testo nell'immagine di sistema

Il servizio di classificazione del testo personalizzato può essere un APK autonomo creato nell'immagine di sistema o in una parte di un altro APK di sistema. Il sistema utilizza PackageManager.MATCH_SYSTEM_ONLY per risolvere il servizio.

Test

Esegui test in android.view.textclassifier.cts.

Altre modifiche alla classificazione del testo in Android 9

Consulta Controllo dei moduli di linguaggio installati.

I file del modello Android 9 non sono compatibili con File di modello di Android 8.x.

I file del modello di Android 9 hanno il seguente pattern di denominazione: texclassifier.[language-code].model (ad esempio textclassifier.en.model) anziché textclassifier.smartselection.en.model in Android 8.x.

Ottieni i file di modello di classificazione del testo più recenti

Per ottenere i modelli più aggiornati, è possibile eseguire il seguente script che aggiorna i modelli TextClassifier nell'albero di origine:

external/libtextclassifier/native/models/update.sh

Classificatore di testo versione 8.1 di Android

Android 8.1 ha introdotto l'API TextClassfier per implementare il testo per la classificazione.

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

Gli sviluppatori possono impostare un classificatore di testo personalizzato:

tcm.setTextClassifier(customTextClassifier);

Se invece uno sviluppatore di app imposta il classificatore di testo su null, viene generato viene restituito il classificatore di testo predefinito per getTextClassifier().

Leggi i android.view.textclassifier.TextClassifierImpl.

TextView e WebView utilizzano TextClassifier per la selezione intelligente e il testo intelligente funzionalità di condivisione.

Utilizzo del classificatore di testo

Figura 1. Utilizzo di TextClassifier

Modelli di rete neurale di TextClassifier

L'Android Open Source Project (AOSP) offre una serie di di classificazione per la classificazione del testo. Ogni file del modello viene addestrato per una singola lingua. Puoi installare qualsiasi combinazione di modelli. I modelli sono definiti in:

external/libtextclassifier/Android.mk

Lingua di preinstallazione modelli sui dispositivi

Puoi specificare un bundle di modelli linguistici e installarli su un dispositivo:

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

Ad esempio, in device/google/marlin/device-common.mk.

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

Controlla la lingua installata moduli

Utilizza ADB per elencare i file nella directory:

$ 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

Aggiornamenti del modello

I modelli possono essere aggiornati includendo un nuovo modello in un sistema aggiornare le immagini o in modo dinamico, grazie a un componente di sistema che attiva un aggiornamento tramite il sistema API ACTION_UPDATE_SMART_SELECTION l'intento. Trasmettendo questo intent dell'API di sistema, il framework è in grado di aggiorna il modello linguistico della lingua attualmente impostata. I modelli stessi contenere la lingua supportata e un numero di versione in modo che la versione viene usato un modello.

Non è quindi necessario precaricare i modelli per tutte le lingue perché possono essere aggiunti in un secondo momento. Se non viene trovato alcun file del modello per la lingua specificata, la classificazione del testo restituisce valori autonomi.

Test della suite di test di compatibilità

I test Android Compatibility Test Suite (CTS) associati sono disponibili in:

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