Klasyfikator tekstu korzysta z technik uczenia maszynowego, aby pomagać programistom w klasyfikowaniu tekstu.
Klasyfikator tekstu w wersji na Androida 11
Android 11 wprowadza możliwość aktualizowania domyślnej implementacji usługi klasyfikatora tekstu w module ExtServices. Na urządzeniach z Androidem 11 lub nowszym metoda
getTextClassifier()
zwraca tę domyślną implementację w module ExtServices.
Producentom urządzeń zalecamy używanie tej implementacji TextClassifierService
, ponieważ można ją aktualizować za pomocą aktualizacji OTA Mainline.
Android 11 usuwa też domyślną implementację klasyfikatora tekstu lokalnego wprowadzoną wcześniej w
Androidzie 8.1. W związku z tym funkcja
getLocalTextClassifier()
zwraca klasyfikator tekstu NO_OP
. Zamiast implementacji lokalnej użyj metody
getDefaultTextClassifierImplementation()
.
Producenci urządzeń, którzy zechcą użyć własnych algorytmów klasyfikacji tekstu, mogą wdrożyć usługę klasyfikatora niestandardowego tekstu, określając właściwość config_defaultTextClassifierPackage
w pliku config.xml
. Jeśli ta konfiguracja nie zostanie określona, zostanie użyta domyślna implementacja systemu. Implementacje niestandardowe mogą uzyskać instancję domyślnej implementacji, wywołując funkcję TextClassifierService.getDefaultTextClassifierImplementation(Context)
.
Więcej informacji znajdziesz w artykule o
wdrażaniu usługi klasyfikatora niestandardowego tekstu.
Testowanie
Aby sprawdzić poprawność implementacji usługi klasyfikatora tekstu, użyj testów z pakietu CTS (Compatibility Test Suite) w
platform/cts/tests/tests/textclassifier/
.
Ulepszenia klasyfikatora tekstu w Androidzie 10
Android 10 wprowadza 2 metody interfejsu TextClassifier API:
suggestConversationActions
i
detectLanguage
.
Metoda suggestConversationActions
generuje sugerowane odpowiedzi i działania na podstawie danej rozmowy, a metoda detectLanguage
wykrywa język tekstu.
Poniżej znajdziesz pliki modeli służące do tych metod. Znajdziesz je w folderze external/libtextclassifier/models/
.
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
Aby uruchomić urządzenie z najnowszymi plikami modelu w obrazie fabrycznym, wykonaj te czynności:
Pobierz najnowsze pliki modeli.
external/libtextclassifier/models/update.sh
- Zmień nazwy pobranych plików, aby zastąpić istniejące.
- Sprawdź konfigurację.
adb shell dumpsys textclassification
Oto przykładowe dane wyjściowe tego polecenia.
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 }
Ulepszenia klasyfikatorów tekstu w Androidzie 9
Android 9 rozszerzył platformę klasyfikacji tekstu wprowadzoną w Androidzie 8.1 o nową usługę klasyfikacji tekstu. Usługa klasyfikatorów tekstu jest zalecanym sposobem dla OEM do zapewniania pomocy w zakresie systemu klasyfikacji tekstu. Usługa klasyfikatora tekstu może być częścią dowolnego pakietu APK systemu i w razie potrzeby może zostać zaktualizowana.
Android 9 zawiera implementację domyślnej usługi klasyfikatora tekstu (
TextClassifierImpl
), która jest używana, o ile nie zastąpisz jej implementacją niestandardowego klasyfikatora tekstu.
Wdrażanie usługi klasyfikatora niestandardowego tekstu
W następnych sekcjach znajdziesz informacje o wdrażaniu opracowanego przez siebie niestandardowego usługi klasyfikatora tekstu.
Rozszerzanie obiektu 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) { ... } ... }
Definiowanie usługi w pliku manifestu Androida
[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>
Pamiętaj, że usługa musi wymagać uprawnienia android.permission.BIND_TEXTCLASSIFIER_SERVICE
i określić działanie intencji android.service.textclassifier.TextClassifierService
.
Ustaw domyślną usługę klasyfikatora tekstu systemu w nakładce konfiguracji
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Umieszczenie usługi klasyfikatora tekstu w obrazie systemu
Niestandardowa usługa klasyfikatora tekstu może być samodzielnym plikiem APK, który jest skompilowany w ramach obrazu systemu lub jako część innego pliku APK systemu. System używa
PackageManager.MATCH_SYSTEM_ONLY
do rozwiązywania problemów z usługą.
Testowanie
Uruchom testy za android.view.textclassifier.cts
.
Inne zmiany w klasyfikacji tekstu w Androidzie 9
Zobacz sprawdzanie zainstalowanych modułów językowych.
Pliki modeli Androida 9 są niezgodne z plikami modeli Androida 8.x.
Pliki modelu Androida 9 mają format nazwy texclassifier.[language-code].model
(np. textclassifier.en.model
) zamiast textclassifier.smartselection.en.model
w Androidzie 8.x.
Uzyskiwanie najnowszych plików modeli klasyfikacji tekstu
Aby uzyskać najnowsze modele, możesz uruchomić ten skrypt, który aktualizuje modele TextClassifier w drzewie źródłowym:
external/libtextclassifier/native/models/update.sh
Klasyfikator tekstu w Androidzie 8.1
W Androidzie 8.1 wprowadzono interfejs TextClassfier API do implementowania klasyfikacji tekstu.
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
Programiści mogą ustawić niestandardowy klasyfikator tekstu:
tcm.setTextClassifier(customTextClassifier);
Jeśli jednak deweloper aplikacji ustawi klasyfikator tekstu na null
, dla getTextClassifier()
zwrócony zostanie domyślny klasyfikator tekstu systemowy.
Zobacz android.view.textclassifier.TextClassifierImpl
.
TextView i WebView używają klasy TextClassifier do inteligentnego zaznaczania i udostępniania tekstu.
Modele sieci neuronowej TextClassifier
Projekt Android Open Source (AOSP) zawiera wiele modeli sieci neuronowych do klasyfikowania tekstu. Każdy plik modelu jest trenowany pod kątem jednego języka. Możesz zainstalować dowolną kombinację modeli. Modele są zdefiniowane w następujących sekcjach:
external/libtextclassifier/Android.mk
Wstępnie instaluj modele językowe na urządzeniach
Możesz określić pakiet modeli językowych i zainstalować je na urządzeniu:
# ----------------------- # 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)
Na przykład w tym języku: device/google/marlin/device-common.mk
.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1
Sprawdź zainstalowane moduły językowe
Użyj ADB, by wyświetlić listę plików w katalogu:
$ 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
Aktualizacje modelu
Modele można aktualizować, dołączając nowy model w ramach aktualizacji obrazu lub dynamicznie, gdy komponent systemu uruchamia aktualizację za pomocą intencji API ACTION_UPDATE_SMART_SELECTION
. Dzięki rozgłaszaniu tej intencji systemowej interfejsu API platforma może aktualizować model językowy obecnie ustawionego języka. Modele zawierają obsługiwany język i numer wersji, dzięki czemu używany jest najnowszy odpowiedni model.
Nie musisz więc wstępnie wczytywać modeli dla wszystkich języków, ponieważ można je dodać później. Jeśli nie zostanie znaleziony plik modelu dla podanego języka, klasyfikacja tekstu zwróci wartości no-op.
Testy Compatibility Test Suite
Powiązane testy Compatibility Test Suite (CTS) dla Androida można znaleźć w tych miejscach:
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