Créer des représentations vectorielles continues à l'aide de Swivel

Ce guide explique comment entraîner un modèle de représentations vectorielles continues à l'aide de l'algorithme de représentation vectorielle continue au niveau de la matrice (Swivel) au moyen de Vertex Pipelines.

Swivel est une méthode permettant de générer des représentations vectorielles continues d'éléments à partir d'une matrice de cooccurrence d'éléments. Pour les données structurées, telles que les bons de commande, la matrice de cooccurrence d'éléments peut être calculée en comptant le nombre de bons de commande contenant à la fois le produit A et le produit B, pour tous les produits dans lesquels vous souhaitez générer des représentations vectorielles continues.

Ce tutoriel explique comment utiliser ce modèle pour générer des représentations vectorielles continues à partir de vos propres données textuelles ou structurées. La procédure comprend les étapes suivantes :

  1. Configuration : activer les API, accorder des autorisations, préparer les données d'entrée.
  2. Configurer les paramètres : définissez les valeurs de paramètre appropriées pour la tâche Swivel.
  3. Entraînez-vous sur Vertex Pipelines : créez une tâche Swivel sur Vertex Pipelines à l'aide du modèle de pipeline Swivel.

Avant de commencer

  1. Configurez votre projet Google Cloud pour Vertex Pipelines.

  2. Activez le service d'API Dataflow.

  3. Configurer un compte de service avec des autorisations précises.

    • Si vous ne spécifiez pas de compte de service, l'exécution du pipeline utilise le compte de service Compute Engine par défaut, qui est doté du rôle d'éditeur de projet par défaut.
    • Si vous souhaitez créer votre propre compte de service, suivez ce guide et attribuer les rôles suivants au compte de service : roles/aiplatform.user, roles/iam.serviceAccountUser, roles/dataflow.developer, roles/compute.viewer, roles/storage.objectAdmin.

Données d'entrée

Vous pouvez utiliser Swivel pour générer des représentations vectorielles continues de mots dans un corpus de texte ou d'éléments dans des ensembles de données structurés. Il s'attend à ce que les fichiers de données d'entrée soient au format suivant :

  • Chaque ligne représente un contexte de cooccurrence. Par exemple, des mots dans une phrase, un ensemble de produits dans un panier, un ensemble de chansons dans une playlist ou un ensemble d'URL visitées dans une session utilisateur.

  • Les éléments de chaque ligne sont séparés par un espace. Par conséquent, les noms d'éléments ne doivent pas contenir d'espaces.

Types de données d'entrée

Il existe deux types d'entrées : texte et éléments. Il est important de spécifier le bon type pour votre cas d'utilisation, car cela affecte la façon dont les données d'entrée sont traitées.

  1. L'entrée texte doit contenir des majuscules et des signes de ponctuation. Par conséquent, Swivel met le texte en lettres minuscules et supprime la ponctuation. Cela permet de garantir que les jetons comme "apple", "Apple" et "APPLE!" sont traitées comme le même jeton et ont donc les mêmes représentations vectorielles continues. Par exemple, l'entrée de texte ci-dessus serait traitée comme suit :

    un ancien étang silencieux

    une grenouille saute dans l'eau plouf

    nouveau silence

  2. Les entrées d'éléments sont simplement divisées par des espaces blancs, et chaque jeton doit être un ID d'élément. En outre, l'ordre n'a pas d'importance pour les entrées d'éléments, car les groupes d'éléments dans un genre de panier ne sont pas intrinsèquement ordonnés. En d'autres termes, chaque ligne d'entrée d'éléments est traitée comme un ensemble, et non comme un tableau. Ainsi, Swivel considère que chaque élément de la ligne comme ayant une relation égale.

Exemples de données

Vous pouvez copier les échantillons de données suivants dans votre bucket Cloud Storage à des fins de test :

  • wikipedia : ensemble de données de corpus de texte créé à partir d'un vidage Wikipédia pour l'apprentissage de représentations vectorielles continues de mots. Elle utilise le type d'entrée texte.

Exécutez la commande suivante pour copier ces données :

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/wikipedia/* BUCKET_NAME/wikipedia

Remplacez BUCKET_NAME par le nom d'un bucket Cloud Storage que vous gérez.

  • movielens_25m : ensemble de données de notation de films permettant de créer des représentations vectorielles continues de films. Il utilise le type d'entrée des éléments. Cet ensemble de données est traité de sorte que chaque ligne contienne les films ayant reçu la même note du même utilisateur. Le répertoire inclut également le fichier movies.csv, qui mappe les identifiants de films à leurs noms.

Exécutez la commande suivante pour copier ces données :

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/data* BUCKET_NAME/movielesn_25m

Remplacez BUCKET_NAME par le nom d'un bucket Cloud Storage que vous gérez.

Créer une tâche Swivel à l'aide de Vertex Pipelines

Vous pouvez utiliser Google Cloud Console pour exécuter un pipeline. Il s'agit d'un processus en trois étapes :

  1. À partir des liens suivants, téléchargez localement le modèle de pipeline précompilé et le script de configuration.

  2. Configurez le modèle à l'aide du script (swivel_template_configuration.sh). Voici une liste des paramètres :

    • pipeline_suffix : suffixe du nom de votre pipeline (les minuscules et les tirets sont autorisés).
    • machine_type : par exemple, n1-standard-16. En savoir plus sur les types de machines.
    • accelerator_count : nombre de GPU sur chaque machine.
    • accelerator_type : par exemple, NVIDIA_TESLA_P100, NVIDIA_TESLA_V100. En savoir plus sur les GPU
    • pipeline_root : nom du bucket Cloud Storage. N'incluez pas le préfixe gs://.

    Exécutez le script suivant :

    ./swivel_template_configuration.sh -pipeline_suffix {your-pipeline-suffix} -project_id {your-project-id} -machine_type n1-standard-16 -accelerator_count 2 -accelerator_type NVIDIA_TESLA_V100 -pipeline_root {BUCKET_NAME}
    

    Un modèle de pipeline précompilé swivel_pipeline.json avec vos configurations est généré.

  3. Créez une exécution de pipeline à l'aide de swivel_pipeline.json dans Cloud Console.

    Le tableau suivant présente les paramètres d'exécution que vous devez remplir dans Cloud Console et utilisés par la tâche Swivel :

    Paramètre Type de données Description Requis
    embedding_dim entier Dimensions des représentations vectorielles continues à entraîner. Non. La valeur par défaut est 100.
    input_base chaîne Chemin d'accès Cloud Storage où les données d'entraînement sont stockées. Oui
    input_type chaîne Type des données d'entrée. Peut être "texte" (pour l'exemple Wikipédia) ou "éléments" (pour l'exemple MovieLens). Oui
    max_vocab_size entier Taille maximale du vocabulaire pour laquelle générer des représentations vectorielles continues. Non. La valeur par défaut est 409600.
    num_epochs entier Nombre d'époques d'entraînement. Non. La valeur par défaut est 20.

En résumé, le type d'entrée éléments signifie que chaque ligne de vos données d'entrée doit être un ID d'élément séparé par un espace. Chaque ligne est tokenisée en divisant le texte par des espaces blancs. Le type d'entrée texte signifie que chaque ligne de vos données d'entrée est considérée comme équivalente à une phrase. Chaque ligne est tokenisée par l'utilisation de lettres minuscules et en divisant le texte par des espaces blancs.

Pour l'exemple Wikipédia, utilisez input_type = text et input_base = {SOURCE_DATA}/wikipedia. Pour l'exemple MovieLens, utilisez input_type = items et input_base = {SOURCE_DATA}/movielens_25m.

Utiliser votre modèle de représentations vectorielles continues entraîné

Une fois l'exécution du pipeline terminée, le fichier SavedModel TensorFlow entraîné est exporté vers un répertoire Cloud Storage : {BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/model/. Vous trouverez ce chemin d'accès dans la section "Vertex ML Metadata" de Cloud Console.

Tutoriel

Pour obtenir un tutoriel détaillé sur l'entraînement de Swivel sur Vertex AI, l'exploration des représentations vectorielles continues entraînées et le déploiement du modèle de représentation vectorielle continue pour la diffusion en ligne, lancez l'exemple de notebook dans Colab.

Étape suivante