Klasyfikator tekstu korzysta z technik uczenia maszynowego, aby pomóc deweloperom w klasyfikowaniu tekstu.
Klasyfikator tekstu w Androidzie 11
Android 11 wprowadza domyślną
implementację usługi klasyfikatora tekstu, którą można aktualizować, w
module ExtServices. Na urządzeniach z Androidem 11
lub nowszym
getTextClassifier()
metoda zwraca tę domyślną implementację w module ExtServices.
Producenci urządzeń powinni używać tej implementacji TextClassifierService, ponieważ można ją aktualizować za pomocą aktualizacji OTA Mainline.
Android 11 usuwa też lokalny klasyfikator tekstu
domyślną implementację, która została wcześniej wprowadzona w
Androidzie 8.1. W związku z tym
getLocalTextClassifier()
zwraca klasyfikator tekstu NO_OP.
Zamiast implementacji lokalnej należy użyć metody.getDefaultTextClassifierImplementation()
Producenci urządzeń, którzy chcą używać własnych algorytmów klasyfikacji tekstu, mogą zaimplementować niestandardową usługę klasyfikatora tekstu, określając config_defaultTextClassifierPackage w pliku config.xml. Jeśli ta konfiguracja nie zostanie określona, używana jest domyślna implementacja systemowa. Implementacje niestandardowe mogą uzyskać instancję domyślnej
implementacji, wywołując
TextClassifierService.getDefaultTextClassifierImplementation(Context).
Więcej informacji znajdziesz w artykule
Implementowanie niestandardowej usługi klasyfikatora tekstu.
Testowanie
Aby sprawdzić implementację usługi klasyfikatora tekstu, użyj testów
Compatibility Test Suite (CTS) w
platform/cts/tests/tests/textclassifier/.
Ulepszenia klasyfikatora tekstu w Androidzie 10
Android 10 wprowadza 2 metody do 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.
Pliki modelu dla tych metod są pokazane poniżej i można je znaleźć w
external/libtextclassifier/models/.
suggestionConversationActions:actions_suggestions.universal.modeldetectLanguage:lang_id.model
Aby opublikować urządzenie z najnowszymi plikami modelu w obrazie fabrycznym, wykonaj te czynności:
Pobierz najnowsze pliki modelu.
external/libtextclassifier/models/update.sh
- Zmień nazwy pobranych plików, aby zastąpić istniejące.
- Sprawdź konfigurację.
adb shell dumpsys textclassification
Oto przykład danych wyjściowych 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 klasyfikatora tekstu w Androidzie 9
Android 9 rozszerzył framework klasyfikacji tekstu wprowadzony w Androidzie 8.1 o nową usługę klasyfikatora tekstu. Usługa klasyfikatora tekstu to zalecany sposób, w jaki producenci OEM mogą zapewnić obsługę systemu klasyfikacji tekstu. Usługa klasyfikatora tekstu może być częścią dowolnego pakietu APK systemu i można ją w razie potrzeby aktualizować.
Android 9 zawiera domyślną implementację usługi klasyfikatora tekstu
(
TextClassifierImpl), która jest używana, chyba że zastąpisz ją niestandardową implementacją usługi klasyfikatora tekstu.
Implementowanie niestandardowej usługi klasyfikatora tekstu
W sekcjach poniżej opisujemy, jak zaimplementować niestandardową usługę klasyfikatora tekstu.
Rozszerzanie 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 musi określać działanie intencji android.service.textclassifier.TextClassifierService.
Ustawianie domyślnej usługi klasyfikatora tekstu w nakładce konfiguracji
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
Tworzenie usługi klasyfikatora tekstu w obrazie systemu
Niestandardowa usługa klasyfikatora tekstu może być samodzielnym pakietem APK, który jest wbudowany w obraz systemu, lub częścią innego pakietu APK systemu. System używa PackageManager.MATCH_SYSTEM_ONLY do rozpoznawania usługi.
Testowanie
Uruchom testy w android.view.textclassifier.cts.
Inne zmiany w klasyfikacji tekstu w Androidzie 9
Zapoznaj się z artykułem Sprawdzanie zainstalowanych modułów językowych.
Pliki modelu Androida 9 są niezgodne z plikami modelu Androida 8.x.
Pliki modelu Androida 9 mają wzorzec nazewnictwa:
texclassifier.[language-code].model (np.
textclassifier.en.model)
zamiast textclassifier.smartselection.en.model w Androidzie 8.x.
Pobieranie najnowszych plików modelu 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
Android 8.1 wprowadził 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(...);Deweloperzy mogą ustawić niestandardowy klasyfikator tekstu:
tcm.setTextClassifier(customTextClassifier);
Jeśli jednak deweloper aplikacji ustawi klasyfikator tekstu na null, metoda getTextClassifier() zwróci domyślny klasyfikator tekstu systemu.
Zobacz android.view.textclassifier.TextClassifierImpl.
TextView i WebView używają TextClassifier do funkcji inteligentnego zaznaczania i inteligentnego udostępniania tekstu.
Rysunek 1. Użycie TextClassifier
Modele sieci neuronowych TextClassifier
Projekt Android Open Source (AOSP) zawiera kilka modeli sieci neuronowych do klasyfikowania tekstu. Każdy plik modelu jest trenowany w jednym języku. Możesz zainstalować dowolną kombinację modeli. Modele są zdefiniowane w:
external/libtextclassifier/Android.mk
Wstępne instalowanie modeli językowych 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 device/google/marlin/device-common.mk.
# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
textclassifier.smartselection.bundle1Sprawdzanie zainstalowanych modułów językowych
Aby wyświetlić listę plików w katalogu, użyj ADB:
$ 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 do aktualizacji obrazu systemu lub dynamicznie, za pomocą komponentu systemu, który wywołuje aktualizację za pomocą intencji API ACTION_UPDATE_SMART_SELECTION systemu. Dzięki rozgłaszaniu tej intencji interfejsu API systemu framework może aktualizować model językowy aktualnie ustawionego języka. Same 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 określonego języka, klasyfikacja tekstu zwróci wartości no-op.
Testy Compatibility Test Suite
Powiązane testy Android Compatibility Test Suite (CTS) znajdziesz w:
cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java
cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java
testSmartSelectiontestSmartSelection_dragSelectiontestSmartSelection_resetSelection