Zadanie Klasyfikatora tekstu MediaPipe pozwala sklasyfikować tekst według zdefiniowanych kategorii, takich jak nastawienie pozytywne lub negatywne. Kategorie określają używany model i sposób jego trenowania. W tych instrukcjach pokazujemy, jak korzystać z klasyfikatora tekstu w aplikacjach na Androida.
Aby zobaczyć, jak działa to zadanie, obejrzyj prezentację. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w artykule Omówienie.
Przykładowy kod
Przykładowy kod narzędzia Text Classifier zawiera prostą implementację tego zadania do celów referencyjnych. Ten kod pomoże Ci przetestować to zadanie i rozpocząć tworzenie własnej aplikacji do klasyfikacji tekstu. Przykładowy kod klasyfikatora tekstu możesz przejrzeć na GitHubie.
Pobieranie kodu
Z instrukcji poniżej dowiesz się, jak utworzyć lokalną kopię przykładowego kodu za pomocą narzędzia wiersza poleceń git do kontroli wersji.
Aby pobrać przykładowy kod:
- Sklonuj repozytorium git za pomocą tego polecenia:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Opcjonalnie skonfiguruj w instancji git rozproszony proces płatności, aby mieć tylko pliki dla przykładowej aplikacji Text Classifier:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/android
Instrukcje konfigurowania i uruchamiania przykładowego kodu w Android Studio znajdziesz w przewodniku konfiguracji na Androida.
Kluczowe elementy
Te pliki zawierają kluczowy kod aplikacji przykładowej do klasyfikacji tekstu:
- TextClassifierHelper.kt – inicjuje klasyfikator tekstu i realizuje wybór modelu.
- MainActivity.kt – implementuje aplikację, w tym wywołuje funkcje
TextClassifierHelper
iResultsAdapter
. - ResultsAdapter.kt – obsługuje i formatuje wyniki.
Konfiguracja
W tej sekcji opisujemy najważniejsze czynności, jakie należy wykonać, aby skonfigurować środowisko programistyczne i projekty kodu związane konkretnie z korzystaniem z Klasyfikatora tekstu. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby zadań MediaPipe, w tym o wymaganiach dotyczących wersji platformy, znajdziesz w przewodniku konfiguracji na Androida.
Zależności
Klasyfikator tekstu korzysta z bibliotek com.google.mediapipe:tasks-text
. Dodaj tę zależność do pliku build.gradle
swojego projektu na Androida.
Możesz zaimportować wymagane zależności za pomocą tego kodu:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
Model
Zadanie MediaPipe Text Classifier wymaga wytrenowanego modelu zgodnego z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach Klasyfikatora tekstu znajdziesz w sekcji poświęconej modelom na temat zadań.
Wybierz i pobierz model, a następnie zapisz go w katalogu assets
projektu:
<dev-project-root>/src/main/assets
Aby określić ścieżkę modelu, który ma zostać użyty, użyj metody BaseOptions.Builder.setModelAssetPath()
. Przykładowy kod znajdziesz w następnej sekcji.
Tworzenie zadania
Użyj 1 z funkcji klasyfikatora tekstu TextClassifier.createFrom...()
, aby przygotować zadanie do uruchamiania wnioskowania. Możesz użyć funkcji createFromFile()
ze ścieżką względną lub bezwzględną do wytrenowanego pliku modelu. W poniższym przykładzie kodu pokazano korzystanie z funkcji 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ładowej funkcji kodu TextClassifierHelper w klasie initClassifier()
.
Opcje konfiguracji
To zadanie ma 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 metadanych modelu zadania (jeśli są dostępne). Wartość domyślna w języku angielskim to en . Za pomocą TensorFlow Lite MetadataWriter API możesz dodawać zlokalizowane etykiety do metadanych modelu niestandardowego.
| Kod języka | en |
maxResults |
Określa opcjonalną maksymalną liczbę zwracanych wyników klasyfikacji o najwyższych wynikach. Jeśli wartość jest mniejsza niż 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 metadanych modelu (jeśli istnieją). Wyniki poniżej tej wartości zostały odrzucone. | Dowolna liczba zmiennoprzecinkowa | Nie ustawiono |
categoryAllowlist |
Ustawia opcjonalną listę dozwolonych nazw kategorii. Jeśli nie będzie pusty, wyniki klasyfikacji, których nazwy kategorii nie ma w tym zbiorze, zostaną odfiltrowane. Zduplikowane i nieznane nazwy kategorii są ignorowane.
Ta opcja wzajemnie się wyklucza, categoryDenylist i ich użycie kończy się błędem. |
Dowolne ciągi | Nie ustawiono |
categoryDenylist |
Ustawia opcjonalną listę niedozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których nazwa kategorii znajduje się w tym zbiorze, zostaną odfiltrowane. Zduplikowane i nieznane nazwy kategorii są ignorowane. Ta opcja wzajemnie się wyklucza z categoryAllowlist , a korzystanie z obu daje błąd. |
Dowolne ciągi | Nie ustawiono |
Przygotuj dane
Klasyfikator tekstu obsługuje dane tekstowe (String
). To zadanie obsługuje wstępne przetwarzanie danych wejściowych, w tym tokenizację i wstępne przetwarzanie tensorów.
Przetwarzanie wstępne jest realizowane w ramach funkcji classify()
. Nie ma potrzeby wcześniejszego wstępnego przetwarzania tekstu wejściowego.
String inputText = "The input text to be classified.";
Uruchamianie zadania
Klasyfikator tekstu używa funkcji TextClassifier.classify()
do uruchamiania wnioskowania. Do przeprowadzenia klasyfikacji użyj osobnego wątku wykonania, aby uniknąć zablokowania wątku interfejsu Androida w aplikacji.
Poniższy kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadań za pomocą osobnego wątku wykonywania.
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
Przykład uruchamiania zadania znajdziesz w przykładowej funkcji kodu TextClassifierHelper w klasie classify()
.
Obsługa i wyświetlanie wyników
Klasyfikator tekstu generuje element TextClassifierResult
zawierający listę możliwych kategorii tekstu wejściowego. Kategorie są definiowane przez używany przez Ciebie model, więc jeśli chcesz korzystać z innych kategorii, wybierz inny model lub ponownie wytrenuj istniejący.
Poniżej znajdziesz przykład danych wyjściowych z 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
Wynik można uzyskać, uruchamiając klasyfikator BERT na tekście wejściowym: "an imperfect but overall entertaining mystery"
.
Przykład wyświetlania wyników znajdziesz w przykładowej klasie ResultsAdapter i klasie wewnętrznej ViewHolder
.