Zadanie Klasyfikator tekstu pozwala sklasyfikować tekst według zdefiniowanych kategorii, takich jak nastawienie pozytywne lub negatywne. Kategorie są określane na podstawie używanego modelu i sposobu jego wytrenowania. W tych instrukcjach pokazujemy, jak korzystać z klasyfikatora tekstu w aplikacjach na iOS. Przykładowy kod opisany w tych instrukcjach jest dostępny na GitHub.
Działanie tego zadania możesz zobaczyć w tej wersji demonstracyjnej. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w sekcji Omówienie.
Przykładowy kod
Przykładowy kod MediaPipe Tasks to podstawowa implementacja aplikacji Text Classifier na iOS.
Możesz użyć aplikacji jako punktu wyjścia dla własnej aplikacji na iOS lub skorzystać z niej podczas modyfikowania istniejącej aplikacji. Przykładowy kod Text Classifier znajdziesz na GitHub.
Pobieranie kodu
Z instrukcji poniżej dowiesz się, jak utworzyć lokalną kopię przykładowego kodu za pomocą narzędzia wiersza poleceń git.
Aby pobrać przykładowy kod:
Sklonuj repozytorium git za pomocą tego polecenia:
git clone https://github.com/google-ai-edge/mediapipe-samples
Opcjonalnie skonfiguruj instancję git tak, aby używała rozproszonego procesu 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/ios/
Po utworzeniu lokalnej wersji przykładowego kodu możesz zainstalować bibliotekę zadań MediaPipe, otworzyć projekt za pomocą Xcode i uruchomić aplikację. Instrukcje znajdziesz w przewodniku po konfiguracji na iOS.
Kluczowe elementy
Poniższe pliki zawierają najważniejszy kod dla przykładowej aplikacji Text Classifier:
- TextClassifierHelper.swift: inicjuje klasyfikator tekstu i obsługuje wybór modelu.
- ViewController.swift: implementuje interfejs użytkownika i formatuje wyniki.
Konfiguracja
W tej sekcji znajdziesz najważniejsze czynności, jakie należy wykonać, aby skonfigurować środowisko programistyczne i projekty kodu, które mają używać 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 iOS.
Zależności
Klasyfikator tekstu korzysta z biblioteki MediaPipeTasksText
, która musi być zainstalowana za pomocą CocoaPods. Biblioteka jest zgodna z aplikacjami Swift i Objective-C i nie wymaga dodatkowej konfiguracji pod kątem określonego języka.
Instrukcje instalowania CocoaPods w systemie macOS znajdziesz w przewodniku instalacji CocoaPods.
Instrukcje tworzenia Podfile
z podami niezbędnymi do działania aplikacji znajdziesz w artykule Korzystanie z CocoaPods.
Dodaj pod MediaPipeTasksText w elemencie Podfile
, używając tego kodu:
target 'MyTextClassifierApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Jeśli aplikacja zawiera cele testu jednostkowego, dodatkowe informacje o konfigurowaniu Podfile
znajdziesz w przewodniku konfiguracji na iOS.
Model
Zadanie MediaPipe Text Classifier wymaga wytrenowanego modelu, który jest zgodny z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach narzędzia Text Classifier znajdziesz w sekcji poświęconej modelom omawiającym zadania.
Wybierz i pobierz model, a potem dodaj go do katalogu projektów za pomocą Xcode. Instrukcje dodawania plików do projektu Xcode znajdziesz w artykule Zarządzanie plikami i folderami w projekcie Xcode.
Aby określić ścieżkę do modelu w pakiecie aplikacji, użyj właściwości BaseOptions.modelAssetPath
. Przykładowy kod znajdziesz w następnej sekcji.
Tworzenie zadania
Zadanie Klasyfikatora tekstu możesz utworzyć, wywołując jeden z jego inicjatorów. Inicjator TextClassifier(options:)
ustawia wartości opcji konfiguracji.
Jeśli nie potrzebujesz klasyfikatora tekstu zainicjowanego z niestandardowymi opcjami konfiguracji, możesz użyć inicjatora TextClassifier(modelPath:)
, aby utworzyć klasyfikator tekstu z opcjami domyślnymi. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Omówienie konfiguracji.
Poniższy kod pokazuje, jak skompilować i skonfigurować to zadanie.
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6
let textClassifier = try TextClassifier(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;
MPPTextClassifier *textClassifier =
[[MPPTextClassifier alloc] initWithOptions:options error:nil];
Opcje konfiguracji
To zadanie ma te opcje konfiguracji w przypadku aplikacji na iOS:
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. 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(text:)
. Nie ma potrzeby wcześniejszego wstępnego przetwarzania tekstu wejściowego.
Swift
let text = "The input text to be classified."
Objective-C
NSString *text = @"The input text to be classified.";
Uruchamianie zadania
Aby uruchomić Klasyfikator tekstu, użyj metody classify(text:)
. Klasyfikator tekstu zwraca możliwe kategorie tekstu wejściowego.
Swift
let result = try textClassifier.classify(text: text)
Objective-C
MPPTextClassifierResult *result = [textClassifier classifyText:text
error:nil];
Uwaga: zadanie zablokuje bieżący wątek, dopóki nie zakończy wnioskowania na podstawie tekstu. Aby uniknąć zablokowania bieżącego wątku, wykonaj przetwarzanie w wątku w tle za pomocą platform Dispatch lub NSOperation w systemie iOS.
Obsługa i wyświetlanie wyników
Po uruchomieniu wnioskowania zadanie Text Classifier zwraca 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"
.
Plik ViewController.swift w przykładowym kodzie pokazuje, jak wyświetlić wyniki wykrywania zwrócone przez zadanie.