Implementazione del classificatore di testo

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

Classificatore di testo versione Android 11

Android 11 introduce un'implementazione di default aggiornabile del servizio di testo classificatore nel modulo di ExtServices . Su dispositivi con Android 11 o superiore, le getTextClassifier() metodo restituisce questa implementazione predefinita nel modulo ExtServices. Produttori di dispositivi si consiglia di utilizzare questa implementazione di TextClassifierService in quanto può essere aggiornato tramite aggiornamenti OTA Mainline.

Android 11 rimuove anche l'implementazione predefinita del testo classificatore locale già introdotto in Android 8.1 . Di conseguenza, getLocalTextClassifier() restituisce un NO_OP classificatore testo. Al posto della attuazione locale, è necessario utilizzare il getDefaultTextClassifierImplementation() metodo.

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

test

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

Miglioramenti del classificatore di testo per il rilascio di Android 10

Android 10 introduce due metodi per l'API TextClassifier: suggestConversationActions e detectLanguage . Il suggestConversationActions metodo genera risposte e le azioni suggerite da un dato conversazione ed il detectLanguage metodo rileva la lingua del testo.

I file di modello per questi metodi sono riportati 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. Verifica 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 del classificatore di testo per il rilascio di Android 9

Android 9 ha esteso il quadro di classificazione testo introdotto in Android 8.1 con il nuovo servizio di testo classificatore. Il servizio di classificazione del testo è il modo consigliato per gli 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 testo predefinito implementazione del servizio classificatore ( TextClassifierImpl ) che viene utilizzato a meno che non si sostituisce con un'implementazione del servizio classificatore testo personalizzato.

Implementazione di un servizio di classificazione di testo personalizzato

Le sezioni seguenti descrivono come implementare un servizio di classificazione di 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 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>

Si noti che il servizio deve richiedere l' android.permission.BIND_TEXTCLASSIFIER_SERVICE permesso e deve specificare android.service.textclassifier.TextClassifierService azione intento.

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>

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

Il tuo 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

Eseguire i test in android.view.textclassifier.cts .

Altre modifiche alla classificazione del testo in Android 9

Fare riferimento a Ispezione moduli linguistici installati .

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

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

Ottenere gli ultimi file del modello di classificazione del testo

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 8.1 di Android

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 per null , un classificatore di testo predefinito di sistema viene restituito per getTextClassifier() .

Vedere android.view.textclassifier.TextClassifierImpl .

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

Utilizzo del classificatore di testo

Utilizzo Figura 1. 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 di modello è addestrato per una singola lingua. Puoi installare qualsiasi combinazione di modelli. I modelli sono definiti in:

external/libtextclassifier/Android.mk

Preinstallazione dei 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)

Per esempio, nel device/google/marlin/device-common.mk .

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

Ispezione dei moduli di lingua installati

Usa 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 sia avendo un nuovo modello incluso come parte di un aggiornamento un'immagine di sistema, o dinamicamente avendo un componente di sistema che attiva un aggiornamento attraverso il sistema API ACTION_UPDATE_SMART_SELECTION intenti. 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 l'ultimo modello appropriato.

Quindi 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 di non operazione.

Test 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