Leitfaden zur Textklassifizierung für iOS

Mit der Aufgabe „Textklassifikator“ können Sie Text in bestimmte Kategorien unterteilen, wie positive oder negative Stimmungen. Die Kategorien basieren auf und wie es trainiert wurde. In dieser Anleitung erfahren Sie, wie Sie den Textklassifikator in iOS-Apps verwenden. Das hier beschriebene Codebeispiel finden Sie unter GitHub

Sie können diese Aufgabe in Aktion sehen, indem Sie dieses Web- Für über die Funktionen, Modelle und Konfigurationsoptionen finden Sie in der Übersicht:

Codebeispiel

Der Beispielcode von MediaPipe Tasks ist eine einfache Implementierung eines Textklassifikators. App für iOS.

Du kannst die App als Ausgangspunkt für deine eigene iOS-App verwenden oder darauf verweisen wenn Sie eine vorhandene App ändern. Sehen Sie sich dazu den Beispielcode des Textklassifikators an. am GitHub

Code herunterladen

In der folgenden Anleitung erfahren Sie, wie Sie eine lokale Kopie des Beispiels erstellen. mit dem Befehlszeilentool git erstellen.

<ph type="x-smartling-placeholder">

So laden Sie den Beispielcode herunter:

  1. Klonen Sie das Git-Repository mit dem folgenden Befehl:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Konfigurieren Sie optional Ihre Git-Instanz für den Sparse-Checkout, damit Sie nur die Dateien für die Textklassifikator-Beispiel-App:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_classification/ios/
    

Nachdem Sie eine lokale Version des Beispielcodes erstellt haben, können Sie den MediaPipe-Aufgabenbibliothek, öffnen Sie das Projekt mit Xcode und führen Sie die App aus. Für finden Sie im Einrichtungsleitfaden für iOS.

Schlüsselkomponenten

Die folgenden Dateien enthalten den wichtigen Code für das Beispiel des Textklassifikators Anwendung:

Einrichtung

In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und für die Verwendung des Textklassifikators. Allgemeine Informationen zum Einrichten der Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Plattformversion finden Sie im Einrichtungsleitfaden für iOS.

<ph type="x-smartling-placeholder">

Abhängigkeiten

Der Textklassifikator verwendet die Bibliothek MediaPipeTasksText, die installiert werden muss mit CocoaPods. Die Bibliothek ist sowohl mit Swift- als auch mit Objective-C-Apps kompatibel. und erfordert keine zusätzliche sprachspezifische Einrichtung.

Eine Anleitung zur Installation von CocoaPods unter macOS findest du im Artikel zu CocoaPods Installationsanleitung. Eine Anleitung zum Erstellen eines Podfile mit den für Ihr Projekt erforderlichen Pods erhalten Sie unter Verwendung CocoaPods

Fügen Sie mit dem folgenden Code den Pod „MediaPipeTasksText“ in Podfile ein:

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

Falls Ihre App Einheitentestziele enthält, lesen Sie den Einrichtungsleitfaden für iOS: Weitere Informationen zur Einrichtung Dein Podfile.

Modell

Für die Aufgabe „Textklassifikator“ von MediaPipe ist ein trainiertes Modell erforderlich, bei dieser Aufgabe. Weitere Informationen zu den verfügbaren trainierten Modellen für Textklassifikator, siehe Aufgabenübersicht Modelle .

Wählen Sie ein Modell aus, laden Sie es herunter und fügen Sie es mit Xcode Ihrem Projektverzeichnis hinzu. Eine Anleitung zum Hinzufügen von Dateien zu Ihrem Xcode-Projekt finden Sie unter Verwalten von Dateien und Ordner in Ihrem Xcode Projekt.

Verwenden Sie das Attribut BaseOptions.modelAssetPath, um den Pfad zum Modell anzugeben in deinem App Bundle. Ein Codebeispiel finden Sie im nächsten Abschnitt.

Aufgabe erstellen

Sie können die Textklassifikatoraufgabe erstellen, indem Sie einen seiner Initialisierer aufrufen. Die Der TextClassifier(options:)-Initialisierer legt Werte für die Konfiguration fest. Optionen.

Wenn Sie keinen Textklassifikator benötigen, der mit einer benutzerdefinierten Konfiguration initialisiert wurde können Sie mit dem TextClassifier(modelPath:)-Initialisierer ein Textklassifikator mit den Standardoptionen. Weitere Informationen zur Konfiguration finden Sie unter Konfigurationsübersicht.

Der folgende Code zeigt, wie diese Aufgabe erstellt und konfiguriert wird.

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];

Konfigurationsoptionen

Diese Aufgabe bietet die folgenden Konfigurationsoptionen für iOS-Apps:

Option Beschreibung Wertebereich Standardwert
displayNamesLocale Legt die Sprache der Labels fest, die für Anzeigenamen in der Metadaten des Aufgabenmodells, falls verfügbar. Standardwert ist en für Englisch. Sie können den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen mit der TensorFlow Lite Metadata Writer API Gebietsschemacode de
maxResults Legt die optionale maximale Anzahl der am besten bewerteten Klassifizierungsergebnisse fest auf zurückgeben. Wenn < 0 setzen, werden alle verfügbaren Ergebnisse zurückgegeben. Beliebige positive Zahlen -1
scoreThreshold Legt den Schwellenwert für die Vorhersagepunktzahl fest, der den Wert in die Modellmetadaten (falls vorhanden). Ergebnisse unter diesem Wert werden abgelehnt. Beliebiger Gleitkommawert Nicht festgelegt
categoryAllowlist Legt die optionale Liste der zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist, Klassifizierungsergebnisse, deren Kategoriename nicht in dieser Gruppe enthalten ist, werden herausgefiltert. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option schließt sich mit categoryDenylist gegenseitig aus und verwendet führt beides zu einem Fehler. Alle Strings Nicht festgelegt
categoryDenylist Legt die optionale Liste der unzulässigen Kategorienamen fest. Wenn nicht leer ist, werden Klassifizierungsergebnisse gefiltert, deren Kategoriename in diesem Satz enthalten ist. aus. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option ausschließlich mit categoryAllowlist und die Verwendung beider führt zu einem Fehler. Alle Strings Nicht festgelegt

Daten vorbereiten

Der Textklassifikator funktioniert mit Textdaten. Die Aufgabe verarbeitet die Dateneingabe Vorverarbeitung, einschließlich Tokenisierung und Tensor-Vorverarbeitung.

Die gesamte Vorverarbeitung erfolgt über die Funktion classify(text:). Es gibt keine eine zusätzliche Vorverarbeitung des Eingabetexts.

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

Aufgabe ausführen

Verwenden Sie die Methode classify(text:), um den Textklassifikator auszuführen. Textklassifikator gibt die möglichen Kategorien für den Eingabetext zurück.

Swift

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

Objective-C

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

Hinweis: Die Aufgabe blockiert den aktuellen Thread, bis die Inferenz ausgeführt wird. auf den Text. Um das Blockieren des aktuellen Threads zu vermeiden, führen Sie die Verarbeitung in einem Hintergrundthread mit iOS Versand oder NSOperation Frameworks.

Ergebnisse verarbeiten und anzeigen

Beim Ausführen einer Inferenz gibt die Textklassifikatoraufgabe ein TextClassifierResult zurück. -Objekt, das die Liste der möglichen Kategorien für den Eingabetext enthält. Die Kategorien werden durch das verwendete Modell definiert. Wenn Sie Wählen Sie ein anderes Modell aus oder trainieren Sie ein vorhandenes Modell neu.

Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:

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

Dieses Ergebnis erhalten Sie, indem Sie den BERT-Klassifikator für den Eingabetext ausgeführt haben: "an imperfect but overall entertaining mystery"

Die ViewController.swift im Beispielcode, der zeigt, wie die Erkennungsergebnisse angezeigt werden die von der Aufgabe zurückgegeben wurden.