Créer des représentations vectorielles continues à l'aide du modèle de pipeline Swivel

Vous pouvez entraîner un modèle de représentation vectorielle continue à l'aide de Vertex AI Pipelines avec l'algorithme de représentation vectorielle continue au niveau de la matrice (Swivel).

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 le modèle de pipeline Swivel pour générer des représentations vectorielles continues à partir de votre propre texte ou à l'aide de données 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 AI Pipelines : créez une tâche Swivel sur Vertex AI Pipelines à l'aide du modèle de pipeline Swivel.

Avant de commencer

  1. Configurez votre projet Google Cloud pour Vertex AI 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.
    • Pour savoir comment créer votre propre compte de service, consultez la page Configurer un compte de service avec des autorisations précises et attribuez-lui les rôles suivants :
      • roles/aiplatform.user
      • roles/iam.serviceAccountUser
      • roles/dataflow.developer
      • roles/compute.viewer
      • roles/storage.objectAdmin

Données d'entrée

Vous pouvez utiliser le modèle de pipeline 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. Le modèle de pipeline Swivel 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 la spécification d'entrée affecte la manière 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 à Swivel 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.

  2. L'entrée éléments est divisée 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

Copiez les échantillons de données dans votre bucket Cloud Storage à des fins de tests :

  • 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. Cet ensemble de données utilise le type d'entrée texte.

Pour copier ces données, exécutez la commande suivante :

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. 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. Cet ensemble de données utilise le type d'entrée des éléments.

Pour copier ces données, exécutez la commande suivante :

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 AI Pipelines

Pour exécuter un pipeline, utilisez Google Cloud Console :

  1. Téléchargez localement le modèle de pipeline et le script de configuration précompilés.

  2. Configurez le modèle à l'aide du script swivel_template_configuration.sh suivant :

    ./swivel_template_configuration.sh \
        -pipeline_suffix YOUR_PIPELINE_SUFFIX \
        -project_id PROJECT_ID \
        -machine_type n1-standard-16 \
        -accelerator_count 2 \
        -accelerator_type NVIDIA_TESLA_V100 \
        -pipeline_root BUCKET_NAME \
        -region YOUR_REGION \
        -network_name YOUR_NETWORK_NAME
    

    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. Pour plus d'informations, consultez la page Configurer des ressources de calcul pour l'entraînement personnalisé.
    • accelerator_count : nombre de GPU sur chaque machine.
    • accelerator_type : par exemple, NVIDIA_TESLA_P100, NVIDIA_TESLA_V100. Pour en savoir plus, consultez la section GPU.
    • pipeline_root : nom du bucket Cloud Storage. N'incluez pas le préfixe gs://.
    • region (facultatif) : la valeur par défaut est us-central1.
    • network_name (facultatif) : votre sous-réseau.

    Le script swivel_template_configuration.sh génère un modèle de pipeline précompilé qui utilise votre configuration.

    Si vous n'utilisez pas d'adresse IP privée et si vous n'avez pas besoin de configurer un réseau VPC, supprimez les lignes suivantes dans votre fichier swivel_pipeline.json avant d'envoyer la tâche Swivel :

    • --subnetwork=regions/%REGION%/subnetworks/%NETWORK_NAME%
    • --no_use_public_ips
    • network : projects/%PROJECT_NUMBER%/global/networks/%NETWORK_NAME%\
  3. Créez un pipeline exécuté à l'aide de swivel_pipeline.json dans Cloud Console.

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

    Parameter 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. Le type 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.
    • Pour le type d'entrée éléments, chaque ligne de vos données d'entrée doit être constituée d'ID d'éléments séparés par un espace. Chaque ligne est tokenisée en divisant le texte par des espaces blancs.
    • Pour le type d'entrée texte, 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 pouvez trouver ce chemin d'accès dans la section "Vertex ML Metadata" de Cloud Console.

Tutoriel

Pour en savoir plus sur l'entraînement du modèle de pipeline Swivel sur Vertex AI, explorez les représentations vectorielles continues entraînées, déployez le modèle de représentation vectorielle continue pour la diffusion en ligne et lancez l'exemple de notebook dans Colab.

Étape suivante