Przewodnik po klasyfikacji tekstu w Pythonie

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. Te instrukcje pokazują, jak korzystać z klasyfikatora tekstu w Pythonie.

Aby zobaczyć, jak działa to zadanie, obejrzyj prezentację w wersji internetowej. 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 pełną implementację tego zadania w Pythonie dla ułatwienia. Ten kod ułatwia przetestowanie tego zadania i rozpoczęcie tworzenia własnej aplikacji do klasyfikacji tekstu. Możesz wyświetlić, uruchomić i edytować przykładowy kod aplikacji do klasyfikacji tekstu za pomocą przeglądarki.

Jeśli wdrażasz klasyfikator tekstu dla Raspberry Pi, zapoznaj się z przykładową aplikacją Raspberry Pi.

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 dla Pythona.

Pakiety

Klasyfikator tekstu korzysta z pakietu pip mediapipe. Możesz zainstalować te zależności za pomocą:

$ python -m pip install mediapipe

Importowane dane

Aby uzyskać dostęp do funkcji zadań Klasyfikatora tekstu, zaimportuj te klasy:

from mediapipe.tasks import python
from mediapipe.tasks.python import text

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 lokalnym:

model_path = '/absolute/path/to/text_classifier.tflite'

Określ ścieżkę modelu za pomocą parametru model_asset_path obiektu BaseOptions, jak poniżej:

base_options = BaseOptions(model_asset_path=model_path)

Tworzenie zadania

Zadanie MediaPipe Text Classifier korzysta z funkcji create_from_options do konfigurowania tego zadania. Funkcja create_from_options akceptuje wartości opcji konfiguracji, aby ustawić opcje klasyfikatora. Możesz też zainicjować zadanie za pomocą funkcji fabrycznej create_from_model_path. Funkcja create_from_model_path akceptuje ścieżkę względną lub bezwzględną do wytrenowanego pliku modelu. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Opcje konfiguracji.

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

base_options = python.BaseOptions(model_asset_path=model_path)
options = text.TextClassifierOptions(base_options=base_options)

with python.text.TextClassifier.create_from_options(options) as classifier:
  classification_result = classifier.classify(text)

Opcje konfiguracji

To zadanie ma te opcje konfiguracji aplikacji na Androida:

Nazwa opcji Opis Zakres wartości Wartość domyślna
display_names_locale 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
max_results 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
score_threshold 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
category_allowlist 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, category_denylist i ich użycie kończy się błędem. Dowolne ciągi Nie ustawiono
category_denylist 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 category_allowlist, a korzystanie z obu daje błąd. Dowolne ciągi Nie ustawiono

Przygotuj dane

Klasyfikator tekstu obsługuje dane tekstowe (str). 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.

input_text = 'The input text to be classified.'

Uruchamianie zadania

Klasyfikator tekstu używa funkcji classify do aktywowania wnioskowania. W przypadku klasyfikacji tekstu oznacza to zwracanie możliwych kategorii dla tekstu wejściowego.

Poniższy kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadań.

with python.text.TextClassifier.create_from_options(options) as classifier:
  classification_result = classifier.classify(text)

Obsługa i wyświetlanie wyników

Klasyfikator tekstu generuje obiekt 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".