Einbettungen mit Swivel erstellen

In dieser Anleitung wird erläutert, wie Sie ein Einbettungsmodell mit dem Algorithmus Submatrix-wise Vector Embedding Learner (Swivel) mithilfe von Vertex-Pipelines trainieren.

Swivel ist eine Methode zum Erstellen von Einbettungen aus einer Matrix für gemeinsame Vorkommen von Elementen. Bei strukturierten Daten wie 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 beschrieben, wie Sie mit dieser Vorlage Einbettungen aus Ihren eigenen Text- 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. In Vertex-Pipelines trainieren: Erstellen Sie mithilfe der Vorlage für Swivel-Pipelines einen Swirl-Job in Vertex-Pipelines.

Hinweis

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

  2. Aktivieren Sie den Dataflow API-Dienst.

  3. Konfigurieren Sie ein Dienstkonto mit detaillierten Berechtigungen.

    • Wenn Sie kein Dienstkonto angeben, verwendet Ihre Pipelineausführung das Compute Engine-Standarddienstkonto, das standardmäßig die Rolle Projektbearbeiter hat.
    • Wenn Sie ein eigenes Dienstkonto erstellen möchten, gehen Sie wie in diesem Leitfaden vor. Weisen Sie dem Dienstkonto die folgenden Rollen zu: rollen/aiplatform.user, rollen/iam.serviceAccountUser, rollen/dataflow.developer, rollen/compute.viewer, rollen/storage.objectAdmin.

Eingabedaten

Mit Swivel können Sie Einbettungen für Wörter in einem Textkorpus oder Elemente in strukturierten Datasets generieren. Er erwartet, dass die Eingabedatendateien das folgende Format haben:

  • 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 für Ihren Anwendungsfall anzugeben, da er die Verarbeitung der Eingabedaten beeinflusst.

  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 wird sichergestellt, dass Tokens wie "apple", "Apple" und "APPLE!" als dasselbe Token behandelt werden und daher die gleichen Einbettungen haben. Die obige Texteingabe würde beispielsweise so verarbeitet werden:

    an old silent pond

    a frog jumps into the pond splash

    silence again

  2. Eingaben von Elementen werden einfach 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

Sie können die folgenden Beispieldaten zum Testen in Ihren Cloud Storage-Bucket kopieren:

  • Wikipedia: Ein Textkorpus-Dataset, das aus einem Wikipedia-Dump erstellt wurde, mit dem Sie Worteinbettungen lernen können. Hierbei wird der Eingabetyp Text verwendet.

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. Hierbei wird der Eingabetyp "Elemente" verwendet. 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.

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

Sie können die Google Cloud Console zum Ausführen einer Pipeline verwenden. Der Vorgang umfasst drei Schritte:

  1. Laden Sie über die folgenden Links die vorkompilierte Pipelinevorlage und das Konfigurationsskript lokal herunter.

  2. Konfigurieren Sie die Vorlage mithilfe des Skripts swivel_template_configuration.sh. Im Folgenden finden Sie eine Liste der Parameter:

    • pipeline_suffix: Suffix Ihres Pipelinenamens (Kleinbuchstaben und Bindestriche sind zulässig).
    • machine_type: zum Beispiel n1-standard-16. Weitere Informationen zu Maschinentypen.
    • accelerator_count: Anzahl von GPUs in jeder Maschine.
    • accelerator_type: beispielsweise NVIDIA_TESLA_P100, NVIDIA_TESLA_V100. Weitere Informationen zu GPUs.
    • pipeline_root: der Name Ihres Cloud Storage-Buckets. Geben Sie nicht das Präfix gs:// an.

    Führen Sie das folgende Skript aus:

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

    Es wird eine vorkompilierte Pipelinevorlage swivel_pipeline.json mit Ihren Konfigurationen generiert.

  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 ausfüllen 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. Kann entweder "text" (für Wikipedia-Beispiel) oder "items" (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.

Kurz gesagt, bedeutet der Eingabetyp items, dass jede Zeile Ihrer Eingabedaten durch Leerzeichen getrennte Element-IDs enthalten muss. Jede Zeile wird tokenisiert, indem sie bei Leerzeichen aufgeteilt wird. Der Eingabetyp text bedeutet, dass jede Zeile der Eingabedaten als äquivalent zu einem Satz betrachtet wird. 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.

Anleitung

Eine detaillierte Anleitung zum Trainieren von Swivel on Vertex AI finden Sie in den trainierten Einbettungen und Bereitstellen des Einbettungsmodells für die Onlinebereitstellung. Starten Sie dazu in Colab das Beispielnotebook.

Nächste Schritte