Przewodnik po klasyfikacji tekstu w iOS

Zadanie Klasyfikator tekstu pozwala sklasyfikować tekst według zdefiniowanych kategorii, np. pozytywnego lub negatywnego nastawienia. Kategorie są określane na podstawie używany model i sposób jego wytrenowania. Te instrukcje pokazują, jak używać klasyfikatora tekstu w aplikacjach na iOS. Przykładowy kod opisany w instrukcje są dostępne na GitHub

Aby zobaczyć, jak działa to zadanie, wejdź na tę stronę wersji demonstracyjnej. Dla: więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania, zobacz Przegląd.

Przykładowy kod

Przykładowy kod MediaPipe Tasks to podstawowa implementacja klasyfikatora tekstu na iOS.

Możesz użyć tej aplikacji jako punktu wyjścia dla własnej aplikacji na iOS lub skorzystać z niej podczas modyfikowania istniejącej aplikacji. Możesz skorzystać z przykładowego kodu klasyfikatora tekstu włączono GitHub

Pobieranie kodu

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

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, aby tylko pliki 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ć z biblioteki zadań MediaPipe, otwórz projekt za pomocą Xcode i uruchom aplikację. Dla: instrukcje znajdziesz w Przewodniku po konfiguracji na iOS.

Kluczowe elementy

Poniższe pliki zawierają kluczowy kod przykładowego klasyfikatora tekstu aplikacja:

Konfiguracja

W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz w projektach kodu, w których będą używane klasyfikatory tekstu. Ogólne informacje o konfigurowaniu środowisko programistyczne do używania zadań MediaPipe, w tym wersja platformy wymagania znajdziesz w przewodniku konfiguracji dla iOS.

Zależności

Klasyfikator tekstu korzysta z biblioteki MediaPipeTasksText, którą należy zainstalować za pomocą CocoaPods. Biblioteka jest zgodna z aplikacjami Swift i Objective-C. i nie wymaga żadnej dodatkowej konfiguracji.

Instrukcje instalowania CocoaPods w macOS znajdziesz w CocoaPods przewodnik instalacji. Aby dowiedzieć się, jak utworzyć Podfile z podami niezbędnymi dla Twojego aplikacji można znaleźć w sekcji Korzystanie CocoaPods.

Dodaj pod MediaPipeTasksText w Podfile przy użyciu tego kodu:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

Jeśli Twoja aplikacja zawiera cele testów jednostkowych, zapoznaj się z przewodnikiem po konfiguracji iOS, gdzie znajdziesz dodatkowe informacje o konfigurowaniu Podfile.

Model

Zadanie MediaPipe Text Classifier wymaga wytrenowanego modelu, który jest zgodny w tym zadaniu. Aby uzyskać więcej informacji o dostępnych wytrenowanych modelach dla Klasyfikator tekstu, zobacz omówienie zadania Modele .

Wybierz i pobierz model, a następnie dodaj go do katalogu projektu za pomocą Xcode. Instrukcje dodawania plików do projektu Xcode znajdziesz w sekcji Zarządzanie pliki i foldery w Xcode projekt.

Użyj właściwości BaseOptions.modelAssetPath, aby określić ścieżkę do modelu w pakiecie aplikacji. Przykładowy kod znajdziesz w następnej sekcji.

Tworzenie zadania

Zadanie klasyfikacji tekstu możesz utworzyć, wywołując jeden z jego inicjatorów. Inicjator TextClassifier(options:) ustawia wartości konfiguracji .

Jeśli nie potrzebujesz klasyfikatora tekstu zainicjowanego z niestandardową konfiguracją możesz użyć inicjatora TextClassifier(modelPath:) do utworzenia Klasyfikator tekstu z opcjami domyślnymi. Więcej informacji o konfiguracji Więcej informacji 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 zawiera te opcje konfiguracji 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 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. 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(text:). Brak konieczne jest wstępne wstępne przetwarzanie 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 wpisanego tekstu.

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

Uwaga: zadanie blokuje bieżący wątek, dopóki nie zakończy działającego wnioskowania. na tekst. Aby uniknąć zablokowania bieżącego wątku, wykonaj przetwarzanie w wątek w tle na urządzeniach z iOS Dispatch lub NSOperation zasad.

Obsługa i wyświetlanie wyników

Po uruchomieniu wnioskowania zadanie Klasyfikator tekstu zwraca wartość TextClassifierResult. który zawiera listę możliwych kategorii tekstu wejściowego. kategorie są definiowane przez używany model, więc jeśli chcesz, kategorii, wybrać inny model lub ponownie wytrenować istniejący.

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"

ViewController.swift w przykładowym kodzie pokazującym, jak wyświetlić wyniki wykrywania zwrócony z zadania.