Der Textklassifizierer nutzt Techniken des maschinellen Lernens, um Entwicklern bei der Klassifizierung von Text zu helfen.
Textklassifizierer für Android 11-Release
Android 11 führt eine aktualisierbare Standardimplementierung des Textklassifizierungsdienstes im ExtServices-Modul ein. Auf Geräten mit Android 11 oder höher gibt die Methode getTextClassifier()
diese Standardimplementierung im ExtServices-Modul zurück. Geräteherstellern wird empfohlen, diese Implementierung von TextClassifierService
zu verwenden, da sie über Mainline-OTA-Updates aktualisiert werden kann.
Android 11 entfernt außerdem die Standardimplementierung des lokalen Textklassifikators, die zuvor in Android 8.1 eingeführt wurde. Als Ergebnis gibt getLocalTextClassifier()
einen NO_OP
Textklassifikator zurück. Anstelle der lokalen Implementierung sollten Sie die Methode getDefaultTextClassifierImplementation()
verwenden.
Gerätehersteller, die möglicherweise ihre eigenen Textklassifizierungsalgorithmen verwenden möchten, können einen benutzerdefinierten Textklassifizierungsdienst implementieren, indem sie config_defaultTextClassifierPackage
in der Datei config.xml
angeben. Wenn diese Konfiguration nicht angegeben ist, wird die Standardsystemimplementierung verwendet. Benutzerdefinierte Implementierungen können eine Instanz der Standardimplementierung abrufen, indem sie TextClassifierService.getDefaultTextClassifierImplementation(Context)
aufrufen. Weitere Informationen finden Sie unter Implementieren eines benutzerdefinierten Textklassifizierungsdienstes .
Testen
Um Ihre Implementierung des Textklassifizierungsdienstes zu validieren, verwenden Sie die Tests der Compatibility Test Suite (CTS) in platform/cts/tests/tests/textclassifier/
.
Verbesserungen des Textklassifikators der Android 10-Version
Android 10 führt zwei Methoden in die TextClassifier-API ein: suggestConversationActions
und detectLanguage
. Die Methode suggestConversationActions
generiert vorgeschlagene Antworten und Aktionen aus einer bestimmten Konversation und die Methode detectLanguage
erkennt die Sprache des Textes.
Die Modelldateien für diese Methoden werden unten angezeigt und sind in external/libtextclassifier/models/
zu finden.
-
suggestionConversationActions
:actions_suggestions.universal.model
-
detectLanguage
:lang_id.model
Gehen Sie wie folgt vor, um ein Gerät mit den neuesten Modelldateien in Ihrem Werksimage freizugeben:
Rufen Sie die neuesten Modelldateien ab.
external/libtextclassifier/models/update.sh
- Benennen Sie die heruntergeladenen Dateien um, um die vorhandenen zu ersetzen.
- Überprüfen Sie die Einrichtung.
adb shell dumpsys textclassification
Dies ist ein Beispiel der 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 des Textklassifizierers für Android 9
Android 9 erweiterte das in Android 8.1 eingeführte Textklassifizierungs-Framework um den neuen Textklassifizierungsdienst. Der Textklassifizierungsdienst ist die empfohlene Methode für OEMs, um Unterstützung für Textklassifizierungssysteme bereitzustellen. Der Textklassifizierungsdienst kann Teil jeder System-APK sein und bei Bedarf aktualisiert werden.
Android 9 enthält eine Standardimplementierung des Textklassifizierungsdiensts ( TextClassifierImpl
), die verwendet wird, sofern Sie sie nicht durch eine benutzerdefinierte Implementierung des Textklassifizierungsdiensts ersetzen.
Implementieren Sie einen benutzerdefinierten Textklassifizierungsdienst
In den folgenden Abschnitten wird beschrieben, wie Sie einen von Ihnen entwickelten benutzerdefinierten Textklassifizierungsdienst implementieren.
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 die Berechtigung android.permission.BIND_TEXTCLASSIFIER_SERVICE
erfordern und die Absichtsaktion android.service.textclassifier.TextClassifierService
angeben muss.
Legen Sie im Konfigurations-Overlay einen Systemstandard-Textklassifizierungsdienst fest
[ config.xml ]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Bauen Sie den Textklassifizierungsdienst in das Systembild ein
Ihr benutzerdefinierter Textklassifizierungsdienst kann ein eigenständiges APK sein, das in das System-Image integriert ist, oder ein Teil eines anderen System-APK. Das System verwendet PackageManager.MATCH_SYSTEM_ONLY
, um den Dienst aufzulösen.
Testen
Führen Sie Tests in android.view.textclassifier.cts
aus.
Weitere Änderungen bei der Textklassifizierung in Android 9
Weitere Informationen finden Sie unter Überprüfen installierter Sprachmodule .
Android 9-Modelldateien sind nicht mit Android 8.x-Modelldateien kompatibel.
Android 9-Modelldateien haben das Benennungsmuster: texclassifier.[language-code].model
(z. B. textclassifier.en.model
) anstelle von textclassifier.smartselection.en.model
in Android 8.x.
Besorgen Sie sich die neuesten Textklassifizierungsmodelldateien
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
Textklassifikator für Android Version 8.1
Mit 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);
Wenn ein App-Entwickler den Textklassifizierer jedoch auf null
setzt, wird für getTextClassifier()
ein Systemstandardtextklassifizierer zurückgegeben.
Siehe android.view.textclassifier.TextClassifierImpl
.
TextView und WebView verwenden TextClassifier für intelligente Auswahl- und intelligente Textfreigabefunktionen.
TextClassifier-Modelle für neuronale Netze
Das Android Open Source Project (AOSP) bietet eine Reihe neuronaler Netzwerkmodelle zur Klassifizierung von Text. Jede Modelldatei wird für eine einzelne Sprache trainiert. Sie können jede 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 diese 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 Sie die installierten 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
Modellaktualisierungen
Modelle können entweder aktualisiert werden, indem ein neues Modell als Teil einer System-Image-Aktualisierung eingebunden wird, oder dynamisch, indem eine Systemkomponente vorhanden ist, die eine Aktualisierung über die System API ACTION_UPDATE_SMART_SELECTION
auslöst. Durch die Übertragung 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 diese 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