Text mit vortrainierten TensorFlow-Modellen einbetten

In dieser Anleitung erfahren Sie, wie Sie mit vortrainierten TensorFlow-Modellen NNLM-, SWIVEL- und BERT-Texteinbettungen in BigQuery generieren. Eine Texteinbettung ist eine dichte Vektordarstellung eines Textes. Wenn also zwei Textelemente semantisch ähnlich sind, liegen die entsprechenden Einbettungen im Einbettungsvektorbereich nahe beieinander.

Die Modelle NNLM, SWIVEL und BERT

Die NNLM-, SWIVEL- und BERT-Modelle unterscheiden sich in Größe, Genauigkeit, Skalierbarkeit und Kosten. Anhand der folgenden Tabelle können Sie feststellen, welches Modell verwendet werden sollte:

Modell Modellgröße Einbettungsdimension Anwendungsfall Beschreibung
NNLM <150 MB 50 Kurze Wortgruppen, Neuigkeiten, Tweets, Rezensionen Neuronales Netzwerk Sprach-Modell
SWIVEL <150 MB 20 Kurze Wortgruppen, Neuigkeiten, Tweets, Rezensionen Submatrix-vektor Embedding Learner
BERT ~200 MB 768 Kurze Formulierungen, Neuigkeiten, Tweets, Rezensionen, kurze Absätze Bidirectional Encoder Representations from Transformers

In dieser Anleitung sind die NNLM- und SWIVEL-Modelle importierte TensorFlow-Modelle und das BERT-Modell ist ein Remote-Modell in Vertex AI.

Erforderliche Berechtigungen

  • Zum Erstellen des Datasets benötigen Sie die IAM (Identity and Access Management)-Berechtigung bigquery.datasets.create.

  • Zum Erstellen des Buckets benötigen Sie die IAM-Berechtigung storage.buckets.create.

  • Zum Hochladen des Modells in Cloud Storage benötigen Sie die IAM-Berechtigungen storage.objects.create und storage.objects.get.

  • Zum Erstellen der Verbindungsressource benötigen Sie die folgenden IAM-Berechtigungen:

    • bigquery.connections.create
    • bigquery.connections.get
  • Zum Laden des Modells in BigQuery ML benötigen Sie die folgenden IAM-Berechtigungen:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Zum Ausführen von Inferenzen benötigen Sie die folgenden IAM-Berechtigungen:

    • bigquery.tables.getData für die Objekttabelle
    • bigquery.models.getData für das Modell
    • bigquery.jobs.create

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • BigQuery: You incur costs for the queries that you run in BigQuery.
  • BigQuery ML: You incur costs for the model that you create and the inference that you perform in BigQuery ML.
  • Cloud Storage: You incur costs for the objects that you store in Cloud Storage.
  • Vertex AI: If you follow the instructions for generating the BERT model, then you incur costs for deploying the model to an endpoint.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Neuen Google Cloud Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Weitere Informationen finden Sie in den folgenden Ressourcen:

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Dataset erstellen

    Wählen Sie eine der folgenden Optionen aus, um ein Dataset mit dem Namen tf_models_tutorial zu erstellen, in dem die von Ihnen erstellten Modelle gespeichert werden:

    SQL

    Verwenden Sie die AnweisungCREATE SCHEMA:

    1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

      BigQuery aufrufen

    2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

      CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;

      Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    3. Klicken Sie auf Ausführen.

    Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

    bq

    1. Aktivieren Sie Cloud Shell in der Google Cloud Console.

      Cloud Shell aktivieren

    2. Führen Sie den bq mk-Befehl aus, um das Dataset zu erstellen:

      bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial

      Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    Modell erstellen und in Cloud Storage hochladen

    Eine ausführlichere Anleitung zum Generieren von Texteinbettungen mit vortrainierten TensorFlow-Modellen finden Sie im Colab-Notebook. Wählen Sie anderenfalls eine der folgenden Modelle aus:

    NNLM

    1. Installieren Sie die bigquery-ml-utils-Bibliothek mit pip:

      pip install bigquery-ml-utils
      
    2. Generieren Sie ein NNLM-Modell. Mit dem folgenden Python-Code wird ein NNLM-Modell aus TensorFlow Hub geladen und für BigQuery vorbereitet:

      from bigquery_ml_utils import model_generator
      import tensorflow_text
      
      # Establish an instance of TextEmbeddingModelGenerator.
      text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator()
      
      # Generate an NNLM model.
      text_embedding_model_generator.generate_text_embedding_model('nnlm', OUTPUT_MODEL_PATH)
      

      Ersetzen Sie OUTPUT_MODEL_PATH durch einen Pfad zu einem lokalen Ordner, in dem Sie das Modell vorübergehend speichern können.

    3. Optional: Geben Sie die Signatur des generierten Modells aus:

      import tensorflow as tf
      
      reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
      print(reload_embedding_model.signatures["serving_default"])
      
    4. Verwenden Sie die Google Cloud CLI, um das generierte Modell aus Ihrem lokalen Ordner in einen Cloud Storage-Bucket zu kopieren:

      gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
      

      Ersetzen Sie BUCKET_PATH durch den Namen des Cloud Storage-Bucket, in den Sie das Modell kopieren.

    SWIVEL

    1. Installieren Sie die bigquery-ml-utils-Bibliothek mit pip:

      pip install bigquery-ml-utils
      
    2. SWIVEL-Modell generieren Mit dem folgenden Python-Code wird ein SWIVEL-Modell aus TensorFlow Hub geladen und für BigQuery vorbereitet:

      from bigquery_ml_utils import model_generator
      import tensorflow_text
      
      # Establish an instance of TextEmbeddingModelGenerator.
      text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator()
      
      # Generate a SWIVEL model.
      text_embedding_model_generator.generate_text_embedding_model('swivel', OUTPUT_MODEL_PATH)
      

      Ersetzen Sie OUTPUT_MODEL_PATH durch einen Pfad zu einem lokalen Ordner, in dem Sie das Modell vorübergehend speichern können.

    3. Optional: Geben Sie die Signatur des generierten Modells aus:

      import tensorflow as tf
      
      reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
      print(reload_embedding_model.signatures["serving_default"])
      
    4. Verwenden Sie die Google Cloud CLI, um das generierte Modell aus Ihrem lokalen Ordner in einen Cloud Storage-Bucket zu kopieren:

      gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
      

      Ersetzen Sie BUCKET_PATH durch den Namen des Cloud Storage-Bucket, in den Sie das Modell kopieren.

    BERT

    1. Installieren Sie die bigquery-ml-utils-Bibliothek mit pip:

      pip install bigquery-ml-utils
      
    2. BERT-Modell generieren Mit dem folgenden Python-Code wird ein BERT-Modell aus dem TensorFlow Hub geladen und für BigQuery vorbereitet:

      from bigquery_ml_utils import model_generator
      import tensorflow_text
      
      # Establish an instance of TextEmbeddingModelGenerator.
      text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator()
      
      # Generate a BERT model.
      text_embedding_model_generator.generate_text_embedding_model('bert', OUTPUT_MODEL_PATH)
      

      Ersetzen Sie OUTPUT_MODEL_PATH durch einen Pfad zu einem lokalen Ordner, in dem Sie das Modell vorübergehend speichern können.

    3. Optional: Geben Sie die Signatur des generierten Modells aus:

      import tensorflow as tf
      
      reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
      print(reload_embedding_model.signatures["serving_default"])
      
    4. Verwenden Sie die Google Cloud CLI, um das generierte Modell aus Ihrem lokalen Ordner in einen Cloud Storage-Bucket zu kopieren:

      gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursive
      

      Ersetzen Sie BUCKET_PATH durch den Namen des Cloud Storage-Bucket, in den Sie das Modell kopieren.

    Modell in BigQuery laden

    Wählen Sie eines der folgenden Modelle aus:

    NNLM

    Verwenden Sie die AnweisungCREATE MODEL:

    1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

      BigQuery aufrufen

    2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

      CREATE OR REPLACE MODEL tf_models_tutorial.nnlm_model
      OPTIONS (
        model_type = 'TENSORFLOW',
        model_path = 'gs://BUCKET_NAME/nnlm_model/*');

      Ersetzen Sie BUCKET_NAME durch den Namen des Buckets, den Sie zuvor erstellt haben.

    3. Klicken Sie auf Ausführen.

    Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

    SWIVEL

    Verwenden Sie die AnweisungCREATE MODEL:

    1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

      BigQuery aufrufen

    2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

      CREATE OR REPLACE MODEL tf_models_tutorial.swivel_model
      OPTIONS (
        model_type = 'TENSORFLOW',
        model_path = 'gs://BUCKET_NAME/swivel_model/*');

      Ersetzen Sie BUCKET_NAME durch den Namen des Buckets, den Sie zuvor erstellt haben.

    3. Klicken Sie auf Ausführen.

    Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

    BERT

    Um das BERT-Modell in BigQuery zu laden, importieren Sie das BERT-Modell in Vertex AI, stellen Sie das Modell auf einem Vertex AI-Endpunkt bereit, erstellen Sie eine Verbindung und erstellen Sie dann ein Remote-Modell in BigQuery.

    So importieren Sie das BERT-Modell in Vertex AI:

    1. Rufen Sie in der Google Cloud Console die Seite Vertex AI Model Registry auf.

      Zu Model Registry

    2. Klicken Sie auf Importieren und gehen Sie dann so vor:

      • Geben Sie für Name BERT ein.
      • Wählen Sie unter Region eine Region aus, die der Region Ihres Cloud Storage-Bucket entspricht.
    3. Klicken Sie auf Weiter und gehen Sie dann so vor:

      • Wählen Sie für Modell-Framework-Version die Option 2.8 aus.
      • Geben Sie unter Speicherort des Modellartefakts den Pfad zum Cloud Storage-Bucket ein, in dem Sie die Modelldatei gespeichert haben. Beispiel: gs://BUCKET_PATH/bert_model.
    4. Klicken Sie auf Importieren. Wenn der Import abgeschlossen ist, wird das Modell auf der Seite Modell-Registry angezeigt.

    So stellen Sie das BERT-Modell auf einem Vertex AI-Endpunkt bereit und verbinden es mit BigQuery:

    1. Rufen Sie in der Google Cloud Console die Seite Vertex AI Model Registry auf.

      Zu Model Registry

    2. Klicken Sie auf den Namen Ihres Modells.

    3. Klicken Sie auf Bereitstellen und testen.

    4. Klicken Sie auf In Endpunkt bereitstellen.

    5. Geben Sie unter Endpunktname bert_model_endpoint ein.

    6. Klicken Sie auf Weiter.

    7. Wählen Sie Ihre Rechenressourcen aus.

    8. Klicken Sie auf Bereitstellen.

    9. Erstellen Sie eine BigQuery-Cloud-Ressourcenverbindung und gewähren Sie Zugriff auf das Dienstkonto der Verbindung.

    Verwenden Sie die CREATE MODEL-Anweisung, um ein Remote-Modell basierend auf dem Vertex AI-Endpunkt zu erstellen:

    1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

      BigQuery aufrufen

    2. Geben Sie im Abfrageeditor die folgende Anweisung ein:

      CREATE OR REPLACE MODEL tf_models_tutorial.bert_model
      INPUT(content STRING)
      OUTPUT(embedding ARRAY<FLOAT64>)
      REMOTE WITH CONNECTION `PROJECT_ID.CONNECTION_LOCATION.CONNECTION_ID`
      OPTIONS (
        ENDPOINT = "https://ENDPOINT_LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/ENDPOINT_LOCATION/endpoints/ENDPOINT_ID");

      Ersetzen Sie Folgendes:

      • PROJECT_ID: die Projekt-ID
      • CONNECTION_LOCATION: Der Standort Ihrer BigQuery-Verbindung.
      • CONNECTION_ID: die ID Ihrer BigQuery-Verbindung.

        Wenn Sie sich Verbindungsdetails in der Google Cloud Console ansehen, ist dies der Wert im letzten Abschnitt der voll qualifizierten Verbindungs-ID, der unter Verbindungs-ID angezeigt wird, z. B. projects/myproject/locations/connection_location/connections/myconnection.

      • ENDPOINT_LOCATION: der Standort Ihres Vertex AI-Endpunkts Beispiel: "us-central1".
      • ENDPOINT_ID: die ID Ihres Modellendpunkts

    3. Klicken Sie auf Ausführen.

    Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

    Texteinbettungen generieren

    In diesem Abschnitt verwenden Sie die ML.PREDICT()-Inferenzfunktion, um Texteinbettungen der Spalte review aus dem öffentlichen Dataset bigquery-public-data.imdb.reviews zu generieren. Durch die Abfrage wird die Tabelle auf 500 Zeilen beschränkt, um die Menge der verarbeiteten Daten zu reduzieren.

    NNLM

    SELECT
      *
    FROM
      ML.PREDICT(
        MODEL `tf_models_tutorial.nnlm_model`,
        (
        SELECT
          review AS content
        FROM
          `bigquery-public-data.imdb.reviews`
        LIMIT
          500)
      );

    Das Ergebnis sieht etwa so aus:

    +-----------------------+----------------------------------------+
    | embedding             | content                                |
    +-----------------------+----------------------------------------+
    |  0.08599445223808289  | Isabelle Huppert must be one of the... |
    | -0.04862852394580841  |                                        |
    | -0.017750458791851997 |                                        |
    |  0.8658871650695801   |                                        |
    | ...                   |                                        |
    +-----------------------+----------------------------------------+
    

    SWIVEL

    SELECT
      *
    FROM
      ML.PREDICT(
        MODEL `tf_models_tutorial.swivel_model`,
        (
        SELECT
          review AS content
        FROM
          `bigquery-public-data.imdb.reviews`
        LIMIT
          500)
      );

    Das Ergebnis sieht etwa so aus:

    +----------------------+----------------------------------------+
    | embedding            | content                                |
    +----------------------+----------------------------------------+
    |  2.5952553749084473  | Isabelle Huppert must be one of the... |
    | -4.015787601470947   |                                        |
    |  3.6275434494018555  |                                        |
    | -6.045154333114624   |                                        |
    | ...                  |                                        |
    +----------------------+----------------------------------------+
    

    BERT

    SELECT
      *
    FROM
      ML.PREDICT(
        MODEL `tf_models_tutorial.bert_model`,
        (
        SELECT
          review AS content
        FROM
          `bigquery-public-data.imdb.reviews`
        LIMIT
          500)
      );

    Das Ergebnis sieht etwa so aus:

    +--------------+---------------------+----------------------------------------+
    | embedding    | remote_model_status | content                                |
    +--------------+---------------------+----------------------------------------+
    | -0.694072425 | null                | Isabelle Huppert must be one of the... |
    |  0.439208865 |                     |                                        |
    |  0.99988997  |                     |                                        |
    | -0.993487895 |                     |                                        |
    | ...          |                     |                                        |
    +--------------+---------------------+----------------------------------------+
    

    Bereinigen

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.