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 :
Clonez le dépôt Git à l'aide de la commande suivante :
git clone https://github.com/google-ai-edge/mediapipe-samples
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:
- TextEmbedderService.swift : initialise l'outil d'intégration du texte et exécute l'inférence sur les données d'entrée.
- ViewController.swift : implémente l'UI et met en forme les résultats.
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.