Wdróż klasyfikator tekstu

Klasyfikator tekstu korzysta z systemów uczących się, aby ułatwić deweloperom klasyfikowanie tekstu.

Klasyfikator tekstu w Androidzie 11

Android 11 wprowadza możliwość aktualizacji 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ż lokalny klasyfikator tekstu, który był domyślnie implementowany w  Androidzie 8.1. W związku z tym funkcja getLocalTextClassifier() zwraca klasyfikator tekstu NO_OP. Zamiast lokalnej implementacji użyj metody getDefaultTextClassifierImplementation().

Producenci urządzeń, którzy chcą używać własnych algorytmów do klasyfikowania tekstu, mogą wdrożyć niestandardową usługę klasyfikatora tekstu, podając w pliku config_defaultTextClassifierPackage wartość config_defaultTextClassifierPackage.config.xml Jeśli ta konfiguracja nie jest określona, używana jest 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 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 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 tych metod, które są dostępne w folderze external/libtextclassifier/models/.

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

Aby wydać urządzenie z najnowszymi plikami modelu w obrazu fabrycznego, wykonaj te czynności:

  1. Pobierz najnowsze pliki modeli.

    external/libtextclassifier/models/update.sh
    
  2. Zmień nazwy pobranych plików, aby zastąpić istniejące.
  3. 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ł ramy odniesienia do klasyfikacji tekstu wprowadzone w Androidzie 8.1 o nową usługę klasyfikacji tekstu. Usługa klasyfikatora tekstu to zalecany sposób zapewnienia przez OEM-ów obsługi 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 domyślną implementację usługi klasyfikatora tekstu ( TextClassifierImpl), która jest używana, chyba że zostanie zastąpiona niestandardową implementacją usługi klasyfikatora tekstu.

Wdrażanie niestandardowej usługi klasyfikatora tekstu

W następnych sekcjach znajdziesz informacje o wdrażaniu opracowanego przez siebie niestandardowego usługi klasyfikatora tekstu.

Rozszerzenie 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ślać działanie android.service.textclassifier.TextClassifierService.

Ustaw domyślną usługę klasyfikatora tekstu w konfiguracji

[config.xml]

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

Włącz usługę klasyfikatora tekstu do obrazu 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

Przeprowadzanie testów w 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 modeli w Androidzie 9 mają wzór nazwy: texclassifier.[language-code].model (na przykład 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 wersji Android 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(...);

Deweloperzy 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 systemowy klasyfikator tekstu.

Zobacz android.view.textclassifier.TextClassifierImpl.

TextView i WebView używają klasy TextClassifier do inteligentnego zaznaczania i udostępniania tekstu.

Korzystanie z klasyfikatora tekstu

Rysunek 1. Użycie klasyfikatora 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:

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.bundle1

Sprawdzanie zainstalowanych modułów językowych

Użyj ADB, aby 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 systemu lub dynamicznie, gdy komponent systemu uruchamia aktualizację za pomocą intencji API ACTION_UPDATE_SMART_SELECTION systemu. Dzięki przesyłaniu intencji interfejsu API system może aktualizować model językowy aktualnie 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 uda się znaleźć pliku modelu dla wybranego 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