Einbettungen mithilfe der Swivel-Pipeline-Vorlage erstellen

Sie können ein Einbettungsmodell mit Vertex AI Pipelines mit dem Algorithmus Submatrix-vektor Embedding Learner (Swivel) trainieren.

Swivel ist eine Methode zum Erstellen von Einbettungen aus einer Matrix für gemeinsame Vorkommen von Elementen. Bei strukturierten Daten, wie beispielsweise Aufträgen, kann die Matrix für gemeinsame Vorkommen von Elementen berechnet werden. Dazu wird die Anzahl der Aufträge, die sowohl Produkt A als auch Produkt B enthalten, für alle Produkte gezählt, für die Sie Einbettungen erzeugen möchten.

In dieser Anleitung wird gezeigt, wie Sie mit der Swivel-Pipelinevorlage Einbettungen aus eigenen Texten oder strukturierten Daten generieren. Die durchgeführten Schritte umfassen Folgendes:

  1. Einrichtung: APIs aktivieren, Berechtigungen erteilen, Eingabedaten vorbereiten.
  2. Parameter konfigurieren: Legen Sie die entsprechenden Parameterwerte für den Swivel-Job fest.
  3. Auf Vertex AI Pipelines trainieren: Erstellen Sie mit der Swivel-Pipelinevorlage einen Swivel-Job auf Vertex AI Pipelines.

Hinweis

  1. Richten Sie Ihr Google Cloud-Projekt für Vertex AI Pipelines ein.

  2. Aktivieren Sie den Dataflow API-Dienst.

  3. Konfigurieren Sie ein Dienstkonto mit detaillierten Berechtigungen.

    • Wenn Sie kein Dienstkonto angeben, verwendet die Pipelineausführung das Compute Engine-Standarddienstkonto, das standardmäßig die Rolle Projektbearbeiter hat.
    • Informationen zum Erstellen eines eigenen Dienstkontos finden Sie unter Dienstkonto mit detaillierten Berechtigungen konfigurieren. Weisen Sie dem Dienstkonto die folgenden Rollen zu:
      • roles/aiplatform.user
      • roles/iam.serviceAccountUser
      • roles/dataflow.developer
      • roles/compute.viewer
      • roles/storage.objectAdmin

Eingabedaten

Mit der Swivel-Pipelinevorlage können Sie Einbettungen für Wörter in einem Textkorpus oder Elemente in strukturierten Datasets generieren. Die Swivel-Pipelinevorlage erwartet, dass Eingabedatendateien im folgenden Format vorliegen:

  • Jede Zeile stellt einen Kontext für gemeinsames Vorkommen dar. Zum Beispiel Wörter in einem Satz, eine Gruppe von Produkten in einem Einkaufswagen, eine Reihe von Songs in einer Playlist oder eine Reihe von URLs, die in einer Nutzersitzung besucht werden.

  • Die Elemente in jeder Zeile sind durch ein Leerzeichen getrennt. Daher dürfen Elementnamen keine Leerzeichen enthalten.

Eingabedatentypen

Es gibt zwei Arten von Eingaben: Text und Elemente. Es ist wichtig, den richtigen Datentyp für Ihren Anwendungsfall anzugeben, da sich die Eingabespezifikation auf die Verarbeitung der Eingabedaten auswirkt.

  1. Bei der Eingabe von Text wird erwartet, dass er Großschreibung und Satzzeichen enthält. Swivel ändert den ganzen Text daher in Kleinbuchstaben und entfernt Satzzeichen. Damit sorgt Swivel dafür, dass Tokens wie "apple", "Apple" und "APPLE!" als dasselbe Token behandelt werden und daher die gleichen Einbettungen haben.

  2. Eingaben von Elementen werden nach Leerzeichen aufgeteilt und jedes Token sollte eine Element-ID sein. Außerdem spielt die Reihenfolge für die Eingabe von Elementen keine Rolle, da Gruppen von Elementen zum Beispiel in einem Einkaufswagen nicht von Natur aus geordnet sind. Anders ausgedrückt: Jede Zeile für Elementeingaben wird wie eine Gruppe und nicht als Array behandelt. Somit wird jedes Element in der Zeile von Swivel als gleichwertig gegenüber den anderen behandelt.

Beispieldaten

Kopieren Sie die folgenden Beispieldaten zum Testen in Ihren Cloud Storage-Bucket:

  • Wikipedia: Ein Textkorpus-Dataset, das aus einem Wikimedia-Dump erstellt wurde, mit dem Sie Worteinbettungen lernen können. Dieses Dataset verwendet den Eingabetyp "Text".

Führen Sie den folgenden Befehl aus, um diese Daten zu kopieren:

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

Ersetzen Sie BUCKET_NAME durch den Namen eines von Ihnen verwalteten Cloud Storage-Buckets.

  • movielens_25m: Ein Dataset zur Filmbewertung, mit dem Sie Einbettungen für Filme erstellen können. Dieses Dataset wird so verarbeitet, dass jede Zeile die Filme mit derselben Bewertung durch denselben Nutzer enthält. Das Verzeichnis enthält auch movies.csv, das die Film-IDs ihren Namen zuordnet. Dieses Dataset verwendet den Eingabetyp "Elemente".

Führen Sie den folgenden Befehl aus, um diese Daten zu kopieren:

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

Ersetzen Sie BUCKET_NAME durch den Namen eines von Ihnen verwalteten Cloud Storage-Buckets.

Swivel-Job mit Vertex AI Pipelines erstellen

Verwenden Sie zum Ausführen einer Pipeline die Google Cloud Console:

  1. Laden Sie die folgende vorkompilierte Pipeline-Vorlage und das Konfigurationsskript lokal herunter.

  2. Konfigurieren Sie die Vorlage mithilfe des folgenden swivel_template_configuration.sh-Skripts:

    ./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
    

    Im Folgenden finden Sie eine Liste der Parameter:

    • pipeline_suffix: Suffix Ihres Pipelinenamens (Kleinbuchstaben und Bindestriche sind zulässig).
    • machine_type: Beispielsweise n1-standard-16. Weitere Informationen finden Sie unter Computing-Ressourcen für benutzerdefiniertes Training konfigurieren.
    • accelerator_count: Anzahl von GPUs in jeder Maschine.
    • accelerator_type: Beispielsweise NVIDIA_TESLA_P100, NVIDIA_TESLA_V100. Weitere Informationen finden Sie unter GPUs.
    • pipeline_root: Der Name Ihres Cloud Storage-Buckets. Geben Sie nicht das Präfix gs:// an.
    • region: Optional: Die Standardeinstellung ist us-central1.
    • network_name: Optional: Ihr Subnetzwerk.

    Das Skript swivel_template_configuration.sh generiert eine vorkompilierte Pipelinevorlage, die Ihre Konfiguration verwendet.

    Wenn Sie keine private IP-Adresse verwenden und kein VPC-Netzwerk einrichten müssen, entfernen Sie die folgenden Zeilen in swivel_pipeline.json, bevor Sie den Swivel-Job senden:

    • --subnetwork=regions/%REGION%/subnetworks/%NETWORK_NAME%
    • --no_use_public_ips
    • network: projects/%PROJECT_NUMBER%/global/networks/%NETWORK_NAME%\
  3. Erstellen Sie eine Pipeline, die mit swivel_pipeline.json in der Cloud Console ausgeführt wird.

    In der folgenden Tabelle sind die Laufzeitparameter aufgeführt, die Sie in der Cloud Console festlegen müssen und die vom Swivel-Job verwendet werden:

    Parameter Datentyp Beschreibung Erforderlich
    embedding_dim Ganzzahl Die Dimensionen der Einbettungen, die trainiert werden sollen. Nein. Die Standardeinstellung ist 100.
    input_base String Cloud Storage-Pfad zu den gespeicherten Eingabedaten. Ja
    input_type String Typ der Eingabedaten. Der Typ kann entweder "Text" (für Wikipedia-Beispiel) oder "Elemente" (für MovieLens-Beispiel) sein. Ja
    max_vocab_size Ganzzahl Maximale Vokabulargröße, für die Einbettungen generiert werden sollen. Nein. Die Standardeinstellung ist 409600.
    num_epochs Ganzzahl Anzahl der Epochen für das Training. Nein. Die Standardeinstellung ist 20.
    • Für den Eingabetyp Elemente muss jede Zeile Ihrer Eingabedaten durch Leerzeichen getrennte Element-IDs sein. Jede Zeile wird tokenisiert, indem sie bei Leerzeichen aufgeteilt wird.
    • Für den Eingabetyp Text wird jede Zeile Ihrer Eingabedaten als Äquivalent zu einem Satz betrachtet. Jede Zeile wird durch Umwandlung in Kleinbuchstaben und Aufteilung bei Leerzeichen tokenisiert.
    • Verwenden Sie für das Wikipedia-Beispiel input_type = text und input_base = {SOURCE_DATA}/wikipedia.
    • Für das MovieLens-Beispiel verwenden Sie input_type = items und input_base = {SOURCE_DATA}/movielens_25m.

Trainiertes Einbettungsmodell verwenden

Nach erfolgreicher Ausführung der Pipeline wird das trainierte TensorFlow-SavedModel in ein Cloud Storage-Verzeichnis exportiert:

{BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/model/

Sie finden diesen Pfad im Abschnitt "Vertex ML Metadata" der Cloud Console.

Tutorial

Um Informationen zum Trainieren der Swivel-Pipelinevorlage in Vertex AI zu erhalten, sehen Sie sich die trainierten Einbettungen an, stellen Sie das Einbettungsmodell für die Onlinebereitstellung bereit und starten Sie das Beispielnotebooks in Colab.

Nächste Schritte