Text mit vortrainierten TensorFlow-Modellen einbetten

In dieser Anleitung erfahren Sie, wie Sie mithilfe von vorab trainierten TensorFlow-Modellen NNLM-, SWIVEL- und BERT-Text-Embeddings 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.

NNLM-, SWIVEL- und BERT-Modelle

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.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

Dataset erstellen

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

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 Befehl bq mk 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ührliche 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. NNLM-Modell generieren Im folgenden Python-Code wird ein NNLM-Modell aus TensorFlow Hub geladen und für BigQuery vorbereitet:

    from bigquery_ml_utils import model_generator
    
    # 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: Drucken 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-Buckets, in den Sie das Modell kopieren.

SWIVEL

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

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

    from bigquery_ml_utils import model_generator
    
    # 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: Drucken 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-Buckets, in den Sie das Modell kopieren.

BERT

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

    pip install bigquery-ml-utils
    
  2. Erstellen Sie ein BERT-Modell. Der folgende Python-Code lädt ein BERT-Modell aus dem TensorFlow Hub und bereitet es für BigQuery vor:

    from bigquery_ml_utils import model_generator
    
    # 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: Drucken 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-Buckets, 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

Wenn Sie das BERT-Modell in BigQuery laden möchten, importieren Sie es in Vertex AI, stellen Sie es 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 die Region aus, die der Region Ihres Cloud Storage-Buckets 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. Nach Abschluss des Imports 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 als 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 dem Dienstkonto der Verbindung Zugriff.

Verwenden Sie die CREATE MODEL-Anweisung, um ein Remote-Modell auf Grundlage des Vertex AI-Endpunkts 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 Inferenzfunktion ML.PREDICT(), um Texteinbettungen der Spalte review aus dem öffentlichen Dataset bigquery-public-data.imdb.reviews zu generieren. Die Abfrage beschränkt die Tabelle auf 500 Zeilen, um die verarbeitete Datenmenge 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.