Guide d'intégration de texte pour Android

La tâche d'intégration de texte MediaPipe vous permet de créer une représentation numérique des données textuelles afin de capturer leur signification sémantique. Ces instructions vous expliquent comment utiliser l'outil d'intégration de texte avec des applications Android.

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 simple d'une application d'intégration de texte pour Android. L'exemple évalue les similitudes sémantiques entre deux textes et nécessite un appareil Android physique ou un émulateur Android.

Vous pouvez utiliser l'application comme point de départ pour votre propre application Android ou vous y référer lorsque vous modifiez une application existante. L'exemple de code de l'outil d'intégration de texte est hébergé 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 l'outil d'intégration de texte :
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

Après avoir créé une version locale de l'exemple de code, vous pouvez importer le projet dans Android Studio et exécuter l'application. Pour obtenir des instructions, consultez le guide de configuration pour Android.

Composants clés

Les fichiers suivants contiennent le code crucial pour cet exemple d'application d'intégration de texte:

  • TextEmbedderHelper.kt : initialise l'outil d'intégration de texte, et gère la sélection du modèle et des délégués.
  • MainActivity.kt : implémente l'application et assemble les composants de l'interface utilisateur.

Préparation

Cette section décrit les étapes clés de la configuration de votre environnement de développement et de vos projets de code spécifiquement pour l'utilisation de l'outil d'intégration 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 sur les exigences de version de la plate-forme, consultez le guide de configuration pour Android.

Dépendances

L'outil d'intégration de texte utilise les bibliothèques com.google.mediapipe:tasks-text. Ajoutez cette dépendance au fichier build.gradle de votre projet de développement d'application Android. Vous pouvez importer les dépendances requises à l'aide du code suivant:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

Modèle

La tâche d'intégration 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'outil d'intégration de texte, consultez la section Modèles de la présentation des tâches.

Sélectionnez et téléchargez le modèle, puis stockez-le dans le répertoire de votre projet:

<dev-project-root>/src/main/assets

Spécifiez le chemin d'accès du modèle dans le paramètre ModelAssetPath. Dans l'exemple de code, le modèle est défini dans la fonction setupTextEmbedder() du fichier TextEmbedderHelper.kt:

Utilisez la fonction BaseOptions.Builder.setModelAssetPath() pour spécifier le chemin d'accès utilisé par le modèle. Cette méthode est référencée dans l'exemple de code de la section suivante.

Créer la tâche

Vous pouvez utiliser l'une des fonctions createFrom...() pour créer la tâche. La fonction createFromOptions() accepte des options de configuration pour définir les options de l'outil d'intégration. Vous pouvez également initialiser la tâche à l'aide de la fonction de fabrique createFromFile(). La fonction createFromFile() accepte un chemin d'accès relatif ou absolu au fichier du modèle entraîné. Pour en savoir plus sur les options de configuration, consultez la section Options de configuration.

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

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

L'exemple d'implémentation de code définit les options de l'outil d'intégration de texte dans la fonction setupTextEmbedder() du fichier TextEmbedderHelper.kt.

Options de configuration

Cette tâche dispose des options de configuration suivantes pour les applications Android:

Nom de l'option Description Plage de valeurs Valeur par défaut
l2_normalize Indique s'il faut normaliser le vecteur de caractéristiques renvoyé 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 donc obtenue via l'inférence TFLite sans utiliser 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 de norme unitaire. Par conséquent, la valeur de toute dimension est forcément comprise dans [-1.0, 1.0]. Si ce n'est pas le cas, utilisez l'option l2_normalize. Boolean False

Préparation des données

L'outil d'intégration de texte fonctionne avec les données de texte (String). 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 embed(). Aucun prétraitement supplémentaire du texte d'entrée n'est nécessaire au préalable.

val inputText = "The input text to be embedded."

Exécuter la tâche

L'outil d'intégration de texte utilise la fonction embed pour déclencher des inférences. Pour la représentation vectorielle continue de texte, cela signifie renvoyer les vecteurs de représentation vectorielle continue du texte d'entrée.

Le code suivant montre comment exécuter le traitement avec le modèle de tâche.

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

Dans l'exemple de code, la fonction embed est appelée dans le fichier TextEmbedderHelper.kt.

Gérer et afficher les résultats

Lors de l'exécution de l'inférence, la tâche de l'intégrateur de texte renvoie un objet TextEmbedderResult contenant une liste de représentations vectorielles continues (à 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 fonction TextEmbedder.cosineSimilarity. Consultez le code suivant pour obtenir un exemple.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

Dans l'exemple de code, la fonction TextEmbedder.cosineSimilarity() est appelée dans le fichier TextEmbedderHelper.kt.