Przewodnik po klasyfikacji tekstu w Androidzie

Zadanie MediaPipe Text Classifier umożliwia klasyfikowanie tekstu w zdefiniowanych kategoriach, np. pozytywnego lub negatywnego nastawienia. Kategorie są określane przez model i o tym, jak został wytrenowany. Z tych instrukcji dowiesz się, jak korzystać klasyfikatora tekstu w aplikacjach na Androida.

Aby zobaczyć, jak działa to zadanie, wyświetl demo. Więcej informacji o możliwościach, modelach i modelach dotyczących opcji konfiguracji tego zadania, zobacz Omówienie.

Przykładowy kod

Przykładowy kod klasyfikatora tekstu pozwala w prosty sposób . Ten kod pomoże Ci przetestować to zadanie i zacząć tworząc własną aplikację do klasyfikacji tekstu. Możesz przeglądać Przykładowy kod klasyfikatora tekstu w GitHubie.

Pobieranie kodu

Poniżej znajdziesz instrukcje tworzenia lokalnej kopii przykładu. za pomocą narzędzia wiersza poleceń git do kontroli wersji.

Aby pobrać przykładowy kod:

  1. Sklonuj repozytorium git za pomocą tego polecenia:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Opcjonalnie możesz skonfigurować instancję git tak, aby wykorzystywała rozproszony proces płatności, masz więc tylko pliki przykładowej aplikacji Text Classifier:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/android
    

Aby dowiedzieć się, jak skonfigurować i uruchomić przykład w Android Studio, znajdziesz w sekcji z przykładowymi instrukcjami konfiguracji kodu Przewodnik po konfiguracji na Androida

Kluczowe elementy

Te pliki zawierają kluczowy kod klasyfikacji tekstu przykładowa aplikacja:

Konfiguracja

W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz w projektach kodu, w których używany jest Text Classifier. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym: wymagań wersji platformy, patrz Przewodnik po konfiguracji na Androida

Zależności

Klasyfikator tekstu używa bibliotek com.google.mediapipe:tasks-text. Dodaj to zależności od pliku build.gradle projektu programowania aplikacji na Androida. Wymagane zależności możesz zaimportować przy użyciu tego kodu:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Model

Zadanie MediaPipe Text Classifier wymaga wytrenowanego modelu zgodnego z tym zadanie. Więcej informacji o dostępnych wytrenowanych modelach na potrzeby klasyfikacji tekstu znajdziesz w dokumentacji, która opisuje zapoznaj się z omówieniem zadania sekcją Modele.

Wybierz i pobierz model, a następnie zapisz go w projekcie assets katalogu:

<dev-project-root>/src/main/assets

Użyj metody BaseOptions.Builder.setModelAssetPath(), aby podać ścieżkę wybranego modelu. Przykładowy kod znajdziesz w następnej sekcji.

Tworzenie zadania

Użyj jednej z funkcji klasyfikatora tekstu TextClassifier.createFrom...() do przygotować zadanie do uruchamiania wniosków. Za pomocą usługi createFromFile() ze ścieżką względną lub bezwzględną do pliku wytrenowanego modelu. Kod przykład poniżej pokazuje korzystanie z TextClassifier.createFromOptions() . Więcej informacji o dostępnych opcjach konfiguracji znajdziesz w artykule Opcje konfiguracji:

Poniższy kod pokazuje, jak skompilować i skonfigurować to zadanie.

// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";

fun initClassifier() {
    val baseOptionsBuilder = BaseOptions.builder()
        .setModelAssetPath(currentModel)
    try {
        val baseOptions = baseOptionsBuilder.build()
        val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
            .setBaseOptions(baseOptions)
        val options = optionsBuilder.build()
        textClassifier = TextClassifier.createFromOptions(context, options)
    } catch (e: IllegalStateException) { // exception handling
    }
}

Przykład tworzenia zadania znajdziesz w przykładowym kodzie TextClassifierHelper funkcji initClassifier() klasy.

Opcje konfiguracji

To zadanie zawiera te opcje konfiguracji aplikacji na Androida:

Nazwa opcji Opis Zakres wartości Wartość domyślna
displayNamesLocale Ustawia język etykiet, które mają być używane w przypadku nazw wyświetlanych w kolumnie metadane modelu zadania, jeśli są dostępne. Wartość domyślna to en dla Angielski. Do metadanych modelu niestandardowego możesz dodać zlokalizowane etykiety za pomocą interfejsu TensorFlow Lite Metadata Writer API. Kod języka en
maxResults Ustawia opcjonalną maksymalną liczbę wyników klasyfikacji na . Jeśli < 0 – zostaną zwrócone wszystkie dostępne wyniki. Dowolne liczby dodatnie -1
scoreThreshold Ustawia próg wyniku prognozy, który zastępuje próg podany w polu metadane modelu (jeśli występują). Wyniki poniżej tej wartości zostały odrzucone. Dowolna liczba zmiennoprzecinkowa Nie ustawiono
categoryAllowlist Ustawia opcjonalną listę dozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których nazwa kategorii nie znajduje się w tym zbiorze, zostaną zostały odfiltrowane. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja nie działa z usługą categoryDenylist i korzysta z funkcji skutkuje to błędem. Dowolne ciągi Nie ustawiono
categoryDenylist Ustawia opcjonalną listę nazw kategorii, które nie są dozwolone. Jeśli niepuste, wyniki klasyfikacji, których nazwa kategorii znajduje się w tym zbiorze, zostaną odfiltrowane na zewnątrz. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja jest wzajemna tylko w polu categoryAllowlist, co spowoduje błąd. Dowolne ciągi Nie ustawiono

Przygotuj dane

Klasyfikator tekstu działa z danymi tekstowymi (String). Zadanie obsługuje wprowadzanie danych w tym wstępnego przetwarzania danych, w tym tokenizacji i tensorów.

Całe wstępne przetwarzanie odbywa się w ramach funkcji classify(). Nie ma potrzeby aby wstępnie przetworzyć tekst wejściowy.

String inputText = "The input text to be classified.";

Uruchamianie zadania

Klasyfikator tekstu używa do uruchamiania funkcji TextClassifier.classify() danych. Użyj osobnego wątku wykonania do wykonania klasyfikacji aby uniknąć zablokowania wątku w interfejsie Androida w aplikacji.

Ten kod pokazuje, jak wykonać przetwarzanie za pomocą zadania używając osobnego wątku wykonania.

    fun classify(text: String) {
        executor = ScheduledThreadPoolExecutor(1)

        executor.execute {
            val results = textClassifier.classify(text)
            listener.onResult(results)
        }
    }

Przykład uruchomienia zadania znajdziesz w przykładowym kodzie TextClassifierHelper funkcji classify() klasy.

Obsługa i wyświetlanie wyników

Klasyfikator tekstu zwraca wynik TextClassifierResult zawierający listę możliwych kategorii tekstu wejściowego. Kategorie są określane przez tag używanego modelu. Jeśli chcesz mieć inne kategorie, wybierz inny, lub ponowne wytrenowanie istniejącej.

Poniżej znajdziesz przykładowe dane wyjściowe tego zadania:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

Ten wynik można uzyskać, uruchamiając klasyfikator BERT na tekście wejściowym: "an imperfect but overall entertaining mystery"

W przykładowym kodzie możesz zobaczyć, jak wyświetlić wyniki ResultsAdapter i ViewHolder klasy wewnętrznej.