Implementare il classificatore di testo

Il classificatore di testo utilizza tecniche di apprendimento automatico per aiutare gli sviluppatori a classificare il testo.

Classificatore di testo della versione Android 11

Android 11 introduce un'implementazione predefinita aggiornabile del servizio di classificazione del testo nel modulo ExtServices . Sui dispositivi che eseguono Android 11 o versioni successive, il metodo getTextClassifier() restituisce questa implementazione predefinita nel modulo ExtServices. Si consiglia ai produttori di dispositivi di utilizzare questa implementazione di TextClassifierService poiché può essere aggiornata tramite gli aggiornamenti OTA principali.

Android 11 rimuove anche l'implementazione predefinita del classificatore di testo locale precedentemente introdotta in Android 8.1 . Di conseguenza, getLocalTextClassifier() restituisce un classificatore di testo NO_OP . Invece dell'implementazione locale, dovresti utilizzare il metodo getDefaultTextClassifierImplementation() .

I produttori di dispositivi che desiderano utilizzare i propri algoritmi di classificazione del testo possono implementare un servizio di classificazione del testo personalizzato specificando config_defaultTextClassifierPackage nel file config.xml . Se questa configurazione non è specificata, viene utilizzata l'implementazione del sistema predefinita. Le implementazioni personalizzate possono ottenere un'istanza dell'implementazione predefinita chiamando TextClassifierService.getDefaultTextClassifierImplementation(Context) . Per ulteriori informazioni, vedere Implementazione di un servizio di classificazione del testo personalizzato .

Test

Per convalidare l'implementazione del servizio di classificazione del testo, utilizzare i test Compatibility Test Suite (CTS) in platform/cts/tests/tests/textclassifier/ .

Miglioramenti al classificatore di testo della versione Android 10

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

I file modello per questi metodi sono mostrati di seguito e possono essere trovati 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 come segue:

  1. Recupera i file del modello più recenti.

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

    Questo è un esempio dell'output di quel 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 versione Android 9

Android 9 ha esteso il framework di classificazione del testo introdotto in Android 8.1 con il nuovo servizio di classificazione del testo. Il servizio di classificazione del testo è il modo consigliato agli OEM per fornire supporto al sistema di classificazione del testo. Il servizio di classificazione del testo può far parte di qualsiasi APK di sistema e può essere aggiornato quando necessario.

Android 9 include un'implementazione del servizio di classificazione del testo predefinita ( TextClassifierImpl ) che viene utilizzata a meno che non la sostituisci con un'implementazione del servizio di classificazione del testo personalizzata.

Implementare un servizio di classificazione del testo personalizzato

Le sezioni seguenti descrivono come implementare un servizio di classificazione del testo personalizzato 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) {
        ...
    }
    ...
}

Definire il servizio nel manifest Android

[Manifest.xml di Android]

<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 l'autorizzazione android.permission.BIND_TEXTCLASSIFIER_SERVICE e deve specificare l'azione dell'intento android.service.textclassifier.TextClassifierService .

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

[ config.xml ]

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

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

Il servizio di classificazione del testo personalizzato può essere un APK autonomo integrato nell'immagine di sistema o 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

Fare riferimento a Ispezione dei moduli linguistici installati .

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

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

Ottenere i file del 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 dei sorgenti:

external/libtextclassifier/native/models/update.sh

Classificatore di testo versione Android 8.1

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

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

Ma se uno sviluppatore di app imposta il classificatore di testo su null , viene restituito un classificatore di testo predefinito del sistema per getTextClassifier() .

Vedi android.view.textclassifier.TextClassifierImpl .

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

Utilizzo del classificatore di testo

Figura 1. Utilizzo di TextClassifier

Modelli di rete neurale TextClassifier

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

external/libtextclassifier/Android.mk

Preinstallare modelli linguistici sui dispositivi

Puoi specificare un pacchetto 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

Ispezionare i moduli linguistici installati

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 come parte di un aggiornamento dell'immagine di sistema oppure dinamicamente disponendo di un componente di sistema che attiva un aggiornamento tramite l'intento API ACTION_UPDATE_SMART_SELECTION . Trasmettendo questo intento API di sistema, il framework è in grado di aggiornare il modello linguistico della lingua attualmente impostata. I modelli stessi contengono la lingua supportata e un numero di versione, quindi viene utilizzato il modello appropriato più recente.

Pertanto non è necessario precaricare i modelli per tutte le lingue perché possono essere aggiunti in seguito. Se non viene trovato alcun file modello per la lingua specificata, la classificazione del testo restituisce valori no-op.

Test della suite di test di compatibilità

I test associati di Android Compatibility Test Suite (CTS) sono reperibili 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