Guide de classification de texte pour iOS

La tâche de classification de texte vous permet de classer du texte selon un ensemble de catégories définies, telles que les sentiments positifs ou négatifs. Les catégories sont déterminées en fonction du modèle que vous utilisez et de la manière dont ce modèle a été entraîné. Ces instructions vous expliquent comment utiliser le classificateur de texte dans les applications iOS. L'exemple de code décrit dans ces instructions est disponible sur GitHub.

Pour voir concrètement cette tâche, regardez cette démonstration Web. Pour en savoir plus sur les fonctionnalités, les modèles et les options de configuration de cette tâche, consultez la présentation.

Exemple de code

L'exemple de code MediaPipe Tasks est une implémentation de base d'une application de classification de texte pour iOS.

Vous pouvez utiliser l'application comme point de départ pour votre propre application iOS, ou vous y référer lorsque vous modifiez une application existante. Vous pouvez consulter l'exemple de code du classificateur de texte sur GitHub.

Télécharger le code

Les instructions suivantes vous expliquent comment créer une copie locale de l'exemple de code à l'aide de l'outil de ligne de commande git.

Pour télécharger l'exemple de code, procédez comme suit:

  1. Clonez le dépôt git à l'aide de la commande suivante:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Vous pouvez éventuellement configurer votre instance Git pour utiliser le paiement creux afin de n'avoir que les fichiers de l'application exemple de classificateur de texte:

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

Après avoir créé une version locale de l'exemple de code, vous pouvez installer la bibliothèque de tâches MediaPipe, ouvrir le projet à l'aide de Xcode et exécuter l'application. Pour obtenir des instructions, consultez le guide de configuration pour iOS.

Composants clés

Les fichiers suivants contiennent le code crucial de l'exemple d'application de classificateur de texte:

Préparation

Cette section décrit les étapes clés pour configurer votre environnement de développement et vos projets de code afin d'utiliser le classificateur de texte. Pour obtenir des informations générales sur la configuration de votre environnement de développement pour l'utilisation des tâches MediaPipe, y compris les exigences de version de la plate-forme, consultez le guide de configuration pour iOS.

Dépendances

Le classificateur de texte utilise la bibliothèque MediaPipeTasksText, qui doit être installée à l'aide de CocoaPods. La bibliothèque est compatible avec les applications Swift et Objective-C, et ne nécessite aucune configuration spécifique au langage utilisé.

Pour savoir comment installer CocoaPods sous macOS, consultez le guide d'installation de CocoaPods. Pour savoir comment créer un Podfile avec les pods nécessaires à votre application, consultez la section Utiliser CocoaPods.

Ajoutez le pod MediaPipeTasksText dans le fichier Podfile à l'aide du code suivant:

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

Si votre application inclut des cibles de tests unitaires, consultez le guide de configuration pour iOS afin d'obtenir des informations supplémentaires sur la configuration de votre Podfile.

Modèle

La tâche de classificateur de texte MediaPipe nécessite un modèle entraîné compatible avec cette tâche. Pour en savoir plus sur les modèles entraînés disponibles pour le classificateur de texte, consultez la section Modèles de la présentation des tâches.

Sélectionnez et téléchargez un modèle, puis ajoutez-le au répertoire de votre projet à l'aide de Xcode. Pour savoir comment ajouter des fichiers à votre projet Xcode, consultez la page Gérer les fichiers et les dossiers dans votre projet Xcode.

Utilisez la propriété BaseOptions.modelAssetPath pour spécifier le chemin d'accès au modèle dans votre app bundle. Pour obtenir un exemple de code, consultez la section suivante.

Créer la tâche

Vous pouvez créer la tâche de classificateur de texte en appelant l'un de ses initialiseurs. L'initialiseur TextClassifier(options:) définit les valeurs des options de configuration.

Si vous n'avez pas besoin d'un classificateur de texte initialisé avec des options de configuration personnalisées, vous pouvez utiliser l'initialiseur TextClassifier(modelPath:) pour créer un classificateur de texte avec les options par défaut. Pour en savoir plus sur les options de configuration, consultez la section Présentation de la configuration.

Le code suivant montre comment créer et configurer cette tâche.

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

Options de configuration

Cette tâche comporte les options de configuration suivantes pour les applications iOS:

Nom de l'option Description Plage de valeurs Valeur par défaut
displayNamesLocale Définit la langue des libellés à utiliser pour les noms à afficher fournis dans les métadonnées du modèle de la tâche, le cas échéant. La valeur par défaut est en pour l'anglais. Vous pouvez ajouter des thèmes localisés aux métadonnées d'un modèle personnalisé à l'aide de l'API TensorFlow Lite Metadata Writer. Code des paramètres régionaux en
maxResults Définit le nombre maximal (facultatif) de résultats de classification les mieux notés à renvoyer. Si la valeur est inférieure à 0, tous les résultats disponibles sont renvoyés. Tout nombre positif -1
scoreThreshold Définit le seuil de score de prédiction qui remplace celui fourni dans les métadonnées du modèle (le cas échéant). Les résultats inférieurs à cette valeur sont refusés. N'importe quelle valeur flottante Non définie
categoryAllowlist Définit la liste facultative des noms de catégories autorisés. S'ils ne sont pas vides, les résultats de classification dont le nom de catégorie ne figure pas dans cet ensemble sont filtrés. Les noms de catégorie en double ou inconnus sont ignorés. Cette option s'exclut mutuellement avec categoryDenylist. L'utilisation des deux résultats génère une erreur. N'importe quelle chaîne Non définie
categoryDenylist Définit la liste facultative des noms de catégorie qui ne sont pas autorisés. S'ils ne sont pas vides, les résultats de classification dont le nom de catégorie figure dans cet ensemble seront filtrés. Les noms de catégorie en double ou inconnus sont ignorés. Cette option s'exclut mutuellement avec categoryAllowlist. L'utilisation des deux entraîne une erreur. N'importe quelle chaîne Non définie

Préparation des données

Le classificateur de texte fonctionne avec des données textuelles. Cette tâche gère le prétraitement de l'entrée des données, y compris la tokenisation et le prétraitement du Tensor.

L'ensemble du prétraitement est géré dans la fonction classify(text:). Aucun prétraitement supplémentaire du texte d'entrée n'est nécessaire au préalable.

Swift

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

Objective-C

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

Exécuter la tâche

Pour exécuter le classificateur de texte, utilisez la méthode classify(text:). Le classificateur de texte renvoie les catégories possibles pour le texte d'entrée.

Swift

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

Objective-C

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

Remarque: La tâche bloque le thread actuel jusqu'à la fin de l'exécution de l'inférence sur le texte. Pour éviter de bloquer le thread actuel, exécutez le traitement dans un thread d'arrière-plan à l'aide des frameworks Dispatch ou NSOperation d'iOS.

Gérer et afficher les résultats

Lors de l'exécution de l'inférence, la tâche de classificateur de texte renvoie un objet TextClassifierResult contenant la liste des catégories possibles pour le texte d'entrée. Les catégories sont définies par le modèle que vous utilisez. Par conséquent, si vous souhaitez des catégories différentes, choisissez un autre modèle ou réentraînez un modèle existant.

Voici un exemple des données de sortie de cette tâche:

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

Vous avez obtenu ce résultat en exécutant BERT-classifier sur le texte d'entrée : "an imperfect but overall entertaining mystery".

Le fichier ViewController.swift de l'exemple de code montre comment afficher les résultats de détection renvoyés par la tâche.