Guide de l'embedding de texte pour iOS

La tâche Text Embedder vous permet de créer une représentation numérique des données textuelles pour en capturer la signification sémantique. Ces instructions vous expliquent comment utiliser l'intégrateur de texte dans les applications iOS.

Vous pouvez voir cette tâche en action dans 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 section Présentation.

Exemple de code

L'exemple de code pour Text Embedder fournit une implémentation de base d'une application iOS qui intègre cette tâche. L'exemple évalue les similitudes sémantiques entre deux éléments de texte et nécessite un appareil iOS physique ou un simulateur 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 de l'outil d'intégration 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 :

  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 également configurer votre instance git pour qu'elle utilise un "checkout sparse" afin de n'avoir que les fichiers de l'application exemple Text Embedder :

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/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 essentiel pour l'exemple d'application de l'outil d'intégration de texte:

Configuration

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

Dépendances

Text Embedder 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 supplémentaire spécifique à la langue.

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

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

target 'MyTextEmbedderApp' 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 d'encapsulation 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 l'intégrateur 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 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 l'intégrateur de texte en appelant l'un de ses initialiseurs. L'initialiseur TextEmbedder(options:) accepte les valeurs des options de configuration.

Si vous n'avez pas besoin d'un outil d'intégration de texte initialisé avec des options de configuration personnalisées, vous pouvez utiliser l'initialiseur TextEmbedder(modelPath:) pour créer un outil d'intégration 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 = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true

let textEmbedder = try TextEmbedder(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;

MPPTextEmbedder *textEmbedder =
      [[MPPTextEmbedder alloc] initWithOptions:options error:nil];

Options de configuration

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

Nom de l'option Description Plage de valeurs Valeur par défaut
l2_normalize Indique si le vecteur de caractéristiques renvoyé doit être normalisé avec la norme L2. N'utilisez cette option que si le modèle ne contient pas encore d'opération TFLite L2_NORMALIZATION native. Dans la plupart des cas, c'est déjà le cas, et la normalisation L2 est ainsi obtenue via l'inférence TFLite, sans avoir besoin de cette option. Boolean False
quantize Indique si la représentation vectorielle continue renvoyée doit être quantifiée en octets via une quantification scalaire. Les représentations vectorielles continues sont implicitement considérées comme étant une norme unitaire. Par conséquent, toute dimension aura une valeur comprise dans [-1.0, 1.0]. Utilisez l'option l2_normalize si ce n'est pas le cas. Boolean False

Exécuter la tâche

Pour intégrer le texte d'entrée et obtenir ses vecteurs d'embedding, vous pouvez utiliser la méthode embed(text:) de TextEmbedder.

Swift

let result = try textEmbedder.embed(text: text)

Objective-C

MPPTextEmbedderResult *result = [textEmbedder embedText:text
                                                  error:nil];

Remarque : La tâche bloque le thread actuel jusqu'à ce qu'elle ait terminé l'exécution de l'inférence sur le texte. Pour éviter de bloquer le thread actuel, exécutez le traitement dans un thread en arrière-plan à l'aide des frameworks iOS Dispatch ou NSOperation. Si votre application est créée à l'aide de Swift, vous pouvez également utiliser la concurrencialité Swift pour l'exécution de threads en arrière-plan.

Dans l'exemple de code, la méthode embed(text:) est appelée dans le fichier TextEmbedderService.swift.

Gérer et afficher les résultats

Lors de l'exécution de l'inférence, la tâche d'encapsulement de texte renvoie un objet TextEmbedderResult contenant une liste d'embeddings (à virgule flottante ou à quantification scalaire) pour le texte d'entrée.

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

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

Vous pouvez comparer la similarité sémantique de deux représentations vectorielles continues à l'aide de la méthode TextEmbedder.cosineSimilarity.

Swift

let similarity = try TextEmbedder.cosineSimilarity(
  embedding1: result.embeddingResult.embeddings[0],
  embedding2: otherResult.embeddingResult.embeddings[0])
    

Objective-C

NSNumber *similarity = [MPPTextEmbedder
      cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0]
                          andEmbedding2:otherResult.embeddingResult.embeddings[0]
                                  error:nil];
    

Dans l'exemple de code, la méthode TextEmbedder.cosineSimilarity est appelée dans le fichier TextEmbedderService.swift.