Textklassifikator implementieren

Der Textklassifikator nutzt Methoden des maschinellen Lernens, Text klassifizieren.

Textklassifikator in der Android 11-Version

Android 11 führt einen aktualisierbaren Standard ein Implementierung des Textklassifikatordienstes in der <ph type="x-smartling-placeholder"></ph> ExtServices-Modul Auf Geräten mit Android 11 oder höher, die <ph type="x-smartling-placeholder"></ph> getTextClassifier(). -Methode diese Standardimplementierung im ExtServices-Modul zurück. Geräteherstellern wird empfohlen, diese Implementierung TextClassifierService, da es über Mainline OTA aktualisiert werden kann Aktualisierungen.

Unter Android 11 wird auch der lokale Textklassifikator entfernt Standardimplementierung, die zuvor in <ph type="x-smartling-placeholder"></ph> Android 8.1 Daher <ph type="x-smartling-placeholder"></ph> getLocalTextClassifier(). gibt einen NO_OP-Textklassifikator zurück. Anstelle der lokalen -Implementierung verwenden, sollten Sie die Methode <ph type="x-smartling-placeholder"></ph> getDefaultTextClassifierImplementation(). .

Für Gerätehersteller, die eine eigene Textklassifizierung verwenden möchten, einen benutzerdefinierten Textklassifikatordienst implementieren, indem sie config_defaultTextClassifierPackage in config.xml -Datei. Wenn diese Konfiguration nicht angegeben ist, wird die verwendet wird. Bei benutzerdefinierten Implementierungen kann eine Instanz des Standard- Implementierung durch den Aufruf <ph type="x-smartling-placeholder"></ph> TextClassifierService.getDefaultTextClassifierImplementation(Context) Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Benutzerdefinierten Textklassifikatordienst implementieren

Testen

Überprüfen Sie die Implementierung des Textklassifikatordienstes mit dem CTS-Tests (Compatibility Test Suite) in platform/cts/tests/tests/textclassifier/

Verbesserungen am Textklassifikator in Android 10

Android 10 bietet zwei Methoden zur TextClassifier API: <ph type="x-smartling-placeholder"></ph> suggestConversationActions. und <ph type="x-smartling-placeholder"></ph> detectLanguage Mit der Methode „suggestConversationActions“ werden Antwortvorschläge generiert und Aktionen aus einer bestimmten Unterhaltung und der detectLanguage-Methode die Sprache des Textes erkennt.

Die Modelldateien für diese Methoden sind unten aufgeführt. Sie finden sie unter <ph type="x-smartling-placeholder"></ph> external/libtextclassifier/models/

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

So geben Sie ein Gerät mit den neuesten Modelldateien in Ihrem Factory Image frei: Folgendes:

  1. Rufen Sie die neuesten Modelldateien ab.

    external/libtextclassifier/models/update.sh
    
  2. Benennen Sie die heruntergeladenen Dateien um, um die vorhandenen zu ersetzen.
  3. Überprüfen Sie die Einrichtung.
    adb shell dumpsys textclassification
    

    Dies ist ein Beispiel für die Ausgabe dieses Befehls.

    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 }
    

Verbesserungen am Textklassifikator der Android 9-Version

Mit Android 9 wurde der Text Klassifizierungs-Framework eingeführt, das mit Android 8.1 mit dem neuen Text eingeführt wurde. Klassifikatordienst. Für OEMs wird der Textklassifikatordienst empfohlen. zur Unterstützung des Textklassifizierungssystems. Der Textklassifikatordienst kann Teil eines beliebigen System-APKs sein und bei Bedarf aktualisiert werden.

Android 9 enthält einen Standard-Textklassifikator Dienstimplementierung ( TextClassifierImpl), die verwendet wird, es sei denn, Sie ersetzen sie durch einen benutzerdefinierter Textklassifikatordienst Implementierung.

Benutzerdefinierten Textklassifikatordienst implementieren

In den folgenden Abschnitten wird beschrieben, wie Sie einen benutzerdefinierten Textklassifikator implementieren. den Sie entwickeln.

android.service.textclassifier.TextClassifierService erweitern

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

Dienst im Android-Manifest definieren

[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>

Für den Dienst muss der Parameter android.permission.BIND_TEXTCLASSIFIER_SERVICE-Berechtigung und muss geben Sie die android.service.textclassifier.TextClassifierService Intent Aktion ausführen.

Standard-Textklassifikatordienst des Systems im Konfigurations-Overlay festlegen

[config.xml]

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

Textklassifikatordienst in das System-Image einbinden

Ihr benutzerdefinierter Textklassifikator kann ein eigenständiges APK sein, in das System-Image oder einen Teil eines anderen System-APKs. Das System verwendet PackageManager.MATCH_SYSTEM_ONLY um den Dienst zu beheben.

Testen

Führe Tests in android.view.textclassifier.cts aus.

Weitere Änderungen bei der Textklassifizierung in Android 9

Weitere Informationen finden Sie unter Installierte Sprachmodule prüfen

Die Modelldateien von Android 9 sind nicht kompatibel mit Android 8.x-Modelldateien

Android 9-Modelldateien haben folgendes Benennungsmuster: texclassifier.[language-code].model (z. B. textclassifier.en.model) statt textclassifier.smartselection.en.model in Android 8.x.

Neueste Dateien des Textklassifizierungsmodells abrufen

Um die aktuellsten Modelle zu erhalten, kann das folgende Skript ausgeführt werden, das aktualisiert die TextClassifier-Modelle in der Quellstruktur:

external/libtextclassifier/native/models/update.sh

Textklassifikator der Android-Version 8.1

Mit Android 8.1 wurde die TextClassfier API eingeführt, um Text zu implementieren. Klassifizierung.

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

Entwickler können einen benutzerdefinierten Textklassifikator festlegen:

tcm.setTextClassifier(customTextClassifier);

Wenn ein App-Entwickler jedoch den Textklassifikator auf null setzt, wird ein System Der Standardtextklassifikator wird für getTextClassifier() zurückgegeben.

android.view.textclassifier.TextClassifierImpl ansehen.

TextView und WebView verwenden TextClassifier für intelligente Auswahl und intelligenten Text Funktionen zum Teilen von Inhalten.

Verwendung des Textklassifikators

Abbildung 1: Verwendung von TextClassifier

Neuronale Netzmodelle von TextClassifier

Das Android Open Source Project (AOSP) umfasst eine Reihe neuronaler Netze zum Klassifizieren von Text. Jede Modelldatei wird für eine einzelne Sprache trainiert. Sie können beliebige Kombinationen von Modellen installieren. Die Modelle sind definiert in:

external/libtextclassifier/Android.mk

Vorinstallierte Sprache Modelle auf Geräten

Sie können ein Bundle mit Sprachmodellen angeben und auf einem Gerät installieren:

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

Beispiel: device/google/marlin/device-common.mk.

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

Installierte Sprache prüfen Module

Verwenden Sie ADB, um die Dateien im Verzeichnis aufzulisten:

$ 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

Modellaktualisierungen

Modelle können entweder durch Einbinden eines neuen Modells in ein System aktualisiert werden. Bildaktualisierung oder dynamisch, indem eine Systemkomponente eingerichtet wird, die ein Update über das System API ACTION_UPDATE_SMART_SELECTION Nutzerabsicht verstehen. Durch die Übertragung dieses System-API-Intents kann das Framework Aktualisiert das Sprachmodell der aktuell eingestellten Sprache. Die Modelle selbst die unterstützte Sprache und eine Versionsnummer enthalten, sodass die aktuelle passende -Modell verwendet wird.

Sie müssen Modelle also nicht für alle Sprachen vorab laden, . Wenn für die angegebene Sprache keine Modelldatei gefunden wird, erfolgt die Textklassifizierung. gibt No-Op-Werte zurück.

Kompatibilitätstest-Suite-Tests

Die zugehörigen Tests der Android Compatibility Test Suite (CTS) finden Sie hier:

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