Implementieren von Textklassifikator

Der Textklassifikator verwendet Techniken des maschinellen Lernens, um Entwicklern bei der Klassifizierung von Text zu helfen.

Textklassifikator für Android 11 veröffentlicht

Android 11 stellt in dem eine aktualisierbare Standardimplementierung des Text - Klassifikator Service ExtServices Modul . Bei Geräten Android 11 oder höher, die laufenden getTextClassifier() Methode gibt diese Standardimplementierung im ExtServices Modul. Gerätehersteller empfohlen , diese Umsetzung zu verwenden TextClassifierService wie es durch Magistrale OTA - Updates aktualisiert werden kann.

Android 11 entfernt auch die lokale Text - Klassifikator Standardimplementierung zuvor in eingeführte Android 8.1 . Als Ergebnis getLocalTextClassifier() gibt einen NO_OP Text - Klassifikator. Anstelle der lokalen Umsetzung, sollten Sie die Verwendung getDefaultTextClassifierImplementation() Methode.

Für Gerätehersteller , die wollen vielleicht ihre eigenen Textklassifizierungsalgorithmen verwenden, können sie einen benutzerdefinierten Text - Klassifikator Service durch Angabe implementieren config_defaultTextClassifierPackage in der config.xml Datei. Wenn diese Konfiguration nicht angegeben ist, wird die Standardsystemimplementierung verwendet. Benutzerdefinierte Implementierungen können eine Instanz der Standardimplementierung erhalten durch den Aufruf TextClassifierService.getDefaultTextClassifierImplementation(Context) . Weitere Informationen finden Sie einen benutzerdefinierten Text - Klassifikator Service implementieren .

Testen

Um die Implementierung des Text - Klassifikator Service, verwenden Sie die Compatibility Test Suite (CTS) Tests in zu validieren platform/cts/tests/tests/textclassifier/ .

Verbesserungen des Textklassifizierers für Android 10

Android 10 stellt zwei Methoden zum TextClassifier API: suggestConversationActions und detectLanguage . Die suggestConversationActions Methode erzeugt vorgeschlagen Antworten und Aktionen von einem bestimmten Gespräch und die detectLanguage Methode erkennt die Sprache des Textes.

Die Modelldateien für diese Methoden sind unten dargestellt und finden sich in external/libtextclassifier/models/ .

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

Gehen Sie wie folgt vor, um ein Gerät mit den neuesten Modelldateien in Ihrem Factory-Image freizugeben:

  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 }
    

Textklassifikator-Verbesserungen für Android 9 veröffentlicht

Android 9 erweitert den Rahmen Textklassifikation in Android 8.1 eingeführt mit dem neuen Text - Klassifikator Service. Der Textklassifikatordienst ist die empfohlene Methode für OEMs, um Unterstützung für Textklassifizierungssysteme bereitzustellen. Der Textklassifikatordienst kann Teil jeder System-APK sein und bei Bedarf aktualisiert werden.

Android 9 enthält eine Standard - Text - Klassifikator Service - Implementierung ( TextClassifierImpl ) , die verwendet wird , wenn Sie es mit einer benutzerdefinierten Text - Klassifikator Service - Implementierung ersetzen.

Implementieren eines benutzerdefinierten Textklassifiziererdienstes

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

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

Definieren Sie den Dienst im Android-Manifest

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

Beachten Sie, dass der Dienst muss die erfordern android.permission.BIND_TEXTCLASSIFIER_SERVICE Erlaubnis und die angeben müssen android.service.textclassifier.TextClassifierService Absicht Aktion.

Legen Sie einen Systemstandard-Textklassifikatordienst im Konfigurations-Overlay fest

[Config.xml]

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

Bauen Sie den Textklassifikatordienst in das Systemabbild ein

Ihr benutzerdefinierter Textklassifikatordienst kann ein eigenständiges APK sein, das in das System-Image integriert ist, oder ein Teil eines anderen System-APKs. Das System verwendet PackageManager.MATCH_SYSTEM_ONLY den Dienst zu lösen.

Testen

Führen Sie Tests in android.view.textclassifier.cts .

Andere Änderungen der Textklassifizierung in Android 9

Siehe Inspizieren installierte Sprachmodule .

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

Android 9 Modell - Dateien haben die Namensmuster: texclassifier.[language-code].model (zB textclassifier.en.model ) statt textclassifier.smartselection.en.model in Android 8.x

Abrufen der neuesten Textklassifikationsmodelldateien

Um die aktuellsten Modelle zu erhalten, kann das folgende Skript ausgeführt werden, das die TextClassifier-Modelle im Quellbaum aktualisiert:

external/libtextclassifier/native/models/update.sh

Android Release 8.1 Textklassifikator

In Android 8.1 wurde die TextClassfier-API eingeführt, um die Textklassifizierung zu implementieren.

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

Aber wenn ein App - Entwickler den Text - Klassifikator setzt null , wird ein System Standard - Text - Klassifikator für zurück getTextClassifier() .

Siehe android.view.textclassifier.TextClassifierImpl .

TextView und WebView verwenden TextClassifier für intelligente Auswahl- und intelligente Textfreigabefunktionen.

Verwendung von Textklassifikatoren

Abbildung 1. TextClassifier Nutzung

Neuronale Netzmodelle von TextClassifier

Das Android Open Source Project (AOSP) bietet eine Reihe von neuronalen Netzmodellen zur Klassifizierung von Text. Jede Modelldatei wird für eine einzelne Sprache trainiert. Sie können eine beliebige Kombination von Modellen installieren. Die Modelle sind definiert in:

external/libtextclassifier/Android.mk

Sprachmodelle auf Geräten vorinstallieren

Sie können ein Bündel von 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)

Zum Beispiel in device/google/marlin/device-common.mk .

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

Überprüfen installierter Sprachmodule

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

Modellupdates

Modelle können als Teil eines Systemabbilds Aktualisierungs- oder dynamisch Komponente , indem ein System enthalten , indem ein neues Modell aktualisiert werden , dass entweder löst eine Aktualisierung durch das System API ACTION_UPDATE_SMART_SELECTION Absicht. Durch Senden dieser System-API-Absicht ist das Framework in der Lage, das Sprachmodell der aktuell eingestellten Sprache zu aktualisieren. Die Modelle selbst enthalten die unterstützte Sprache und eine Versionsnummer, sodass das neueste geeignete Modell verwendet wird.

Sie müssen also nicht für alle Sprachen Modelle vorab laden, da sie später hinzugefügt werden können. Wenn für die angegebene Sprache keine Modelldatei gefunden wird, gibt die Textklassifizierung No-Op-Werte zurück.

Kompatibilitätstest-Suite-Tests

Die zugehörigen Tests der Android Compatibility Test Suite (CTS) finden Sie 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