Text mit vortrainierten TensorFlow-Modellen einbetten

In dieser Anleitung erfahren Sie, wie Sie mithilfe von 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.

NNLM-, SWIVEL- und BERT-Modelle

Die NNLM-, SWIVEL- und BERT-Modelle variieren 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: Für die Abfragen, die Sie in BigQuery ausführen, fallen Kosten an.
  • BigQuery ML: Für das von Ihnen erstellte Modell und die Inferenz in BigQuery ML fallen Kosten an.
  • Cloud Storage: Es fallen Kosten für die Objekte an, die Sie in Cloud Storage speichern.
  • Vertex-AI: Wenn Sie die Anleitung zum Generieren des BERT-Modells befolgen, fallen Kosten für die Bereitstellung des Modells auf einem Endpunkt an.

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 zum Speichern der von Ihnen erstellten Modelle zu erstellen:

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

Ausführliche Anleitungen 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 Bibliothek bigquery-ml-utils mit pip:

    pip install bigquery-ml-utils
    
  2. NNLM-Modell generieren 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
    
    # 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 das gsutil-Tool, um das generierte Modell aus Ihrem lokalen Ordner in einen Cloud Storage-Bucket zu kopieren:

    gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model
    

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

SWIVEL

  1. Installieren Sie die Bibliothek bigquery-ml-utils 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
    
    # 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 das gsutil-Tool, um das generierte Modell aus Ihrem lokalen Ordner in einen Cloud Storage-Bucket zu kopieren:

    gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model
    

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

BERT

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

    pip install bigquery-ml-utils
    
  2. BERT-Modell generieren. Mit dem folgenden Python-Code wird ein BERT-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 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 das gsutil-Tool, um das generierte Modell aus Ihrem lokalen Ordner in einen Cloud Storage-Bucket zu kopieren:

    gsutil cp -r OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model
    

    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 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 als 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 Import (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 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 Zugriff auf das Dienstkonto der Verbindung.

Verwenden Sie die Anweisung CREATE MODEL, 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 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.