Wdróż klasyfikator tekstu

Klasyfikator tekstu wykorzystuje techniki systemów uczących się, aby pomagać programistom i klasyfikować tekst.

Klasyfikator tekstu w wersji na Androida 11

Android 11 wprowadza ustawienie domyślne, które można zaktualizować po wdrożeniu usługi klasyfikatora tekstu w Moduł ExtServices. Na urządzeniach z Androidem 11 lub wyżej, getTextClassifier() zwraca tę domyślną implementację w module ExtServices. Producenci urządzeń powinni korzystać z tej implementacji: TextClassifierService, ponieważ można je zaktualizować przez sieć OTA Mainline aktualizacje.

Android 11 usuwa też lokalny klasyfikator tekstu domyślna implementacja wprowadzona w Android 8.1 W rezultacie getLocalTextClassifier() zwraca klasyfikator tekstu NO_OP. Zamiast interfejsu lokalnego implementacji, użyj funkcji getDefaultTextClassifierImplementation() .

Producenci urządzeń, którzy mogą chcieć używać własnego klasyfikacji tekstu algorytmach, mogą wdrożyć usługę klasyfikatora niestandardowego tekstu, określając config_defaultTextClassifierPackage w: config.xml . Jeśli ta konfiguracja nie zostanie określona, zostanie zastosowana domyślna implementacja systemu. i zgody na określone zastosowania ich danych. Implementacje niestandardowe mogą pobierać instancję domyślnej przez wywołanie funkcji TextClassifierService.getDefaultTextClassifierImplementation(Context) Więcej informacji: Wdrożenie usługi klasyfikatora niestandardowego tekstu.

Testowanie

Aby sprawdzić poprawność implementacji usługi klasyfikatora tekstu, użyj Testy Compatibility Test Suite (CTS) w platform/cts/tests/tests/textclassifier/

Ulepszenia klasyfikatorów tekstu w Androidzie 10

Android 10 wprowadza dwie metody Interfejs API TextClassifier: suggestConversationActions oraz . detectLanguage Metoda suggestConversationActions generuje sugerowane odpowiedzi i czynności z danego wątku oraz metody detectLanguage wykrywa język tekstu.

Pliki modeli dla tych metod znajdują się poniżej i można je znaleźć w external/libtextclassifier/models/

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

Aby zwolnić urządzenie z najnowszymi plikami modelu w obrazie fabrycznym, wykonaj następujące:

  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ł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ł tekst platformę klasyfikacji wprowadzoną w Androidzie 8.1 z nowym tekstem, usługi klasyfikatora. Usługa klasyfikatorów tekstu jest zalecanym sposobem dla producentów OEM aby zapewnić obsługę systemu klasyfikacji tekstu. Usługa klasyfikatorów tekstu może być częścią każdego systemowego pliku APK i w razie potrzeby być aktualizowane.

Android 9 zawiera domyślny klasyfikator tekstu wdrożenie usługi ( TextClassifierImpl), który jest używany, o ile nie zastąpisz go elementem usługa klasyfikatora niestandardowego tekstu implementacji.

Wdrażanie usługi klasyfikatora niestandardowego tekstu

W sekcjach poniżej opisujemy, jak wdrożyć niestandardowy klasyfikator tekstu opracowanej przez siebie usługi.

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

Określ usługę 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ć android.permission.BIND_TEXTCLASSIFIER_SERVICE – wymagane określ Zamiar android.service.textclassifier.TextClassifierService działania.

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

Plik [config.xml]

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

Umieszczenie usługi klasyfikatora tekstu w obrazie systemu

Usługa klasyfikatora niestandardowego tekstu może być samodzielnym plikiem APK, który został utworzony do obrazu systemu lub do innego systemowego pliku APK. System wykorzystuje PackageManager.MATCH_SYSTEM_ONLY , aby rozwiązać problem.

Testowanie

Uruchom testy za android.view.textclassifier.cts.

Inne zmiany w klasyfikacji tekstu w Androidzie 9

Patrz: Sprawdzanie zainstalowanych modułów językowych.

Pliki z modelem Androida 9 są niezgodne z usługami Pliki modelu Androida 8.x.

Pliki modelu Androida 9 mają następujący wzorzec nazewnictwa: texclassifier.[language-code].model (na przykład textclassifier.en.model). zamiast textclassifier.smartselection.en.model w Androidzie 8.x.

Uzyskiwanie najnowszych plików modeli klasyfikacji tekstu

Aby uzyskać najbardziej aktualne modele, można uruchomić następujący 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 implementacji tekstu klasyfikacja danych.

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, system dla getTextClassifier() jest zwracany domyślny klasyfikator tekstu.

Zobacz android.view.textclassifier.TextClassifierImpl.

TextView i WebView korzystają z technologii TextClassifier do inteligentnego zaznaczania i inteligentnego tekstu funkcje udostępniania.

Użycie klasyfikatora tekstu

Rysunek 1. Wykorzystanie TextClassifier

Modele sieci neuronowej TextClassifier

W ramach Android Open Source Project (AOSP) wykorzystuje się wiele sieci neuronowych do klasyfikowania tekstu. Każdy plik modelu jest trenowany dla 1 języka. Możesz zainstalować dowolną kombinację modeli. Modele są zdefiniowane w następujących sekcjach:

external/libtextclassifier/Android.mk

Wstępnie zainstaluj język modele 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ź zainstalowany język moduły

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ć przez dodanie nowego modelu jako części systemu aktualizacje obrazu lub dynamiczne za pomocą komponentu systemowego, który uruchamia aktualizacja w systemie API ACTION_UPDATE_SMART_SELECTION intencji. Dzięki rozgłaszaniu tej intencji systemowego interfejsu API platforma może zaktualizowanie modelu językowego obecnie ustawionego języka. same modele, zawierać obsługiwany język i numer wersji, dzięki czemu najnowsze model 3D.

Nie musisz więc wstępnie wczytywać modeli dla wszystkich języków, ponieważ można je dodawać później. Jeśli w podanym języku nie zostanie znaleziony plik modelu, zostanie zastosowana klasyfikacja tekstu. zwraca wartości bezobsługowe.

Testy Compatibility Test Suite

Powiązane testy z pakietem Android Compatibility Test Suite (CTS) znajdziesz tutaj:

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