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
undstorage.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 Objekttabellebigquery.models.getData
für das Modellbigquery.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.
Weitere Informationen finden Sie in den folgenden Ressourcen:
Hinweise
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI 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
:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
bq
Aktivieren Sie Cloud Shell in der Google Cloud Console.
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
Installieren Sie die
bigquery-ml-utils
-Bibliothek mit pip:pip install bigquery-ml-utils
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.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"])
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
Installieren Sie die
bigquery-ml-utils
-Bibliothek mit pip:pip install bigquery-ml-utils
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.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"])
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
Installieren Sie die
bigquery-ml-utils
-Bibliothek mit pip:pip install bigquery-ml-utils
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.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"])
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
:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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.Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.
SWIVEL
Verwenden Sie die AnweisungCREATE MODEL
:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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.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:
Rufen Sie in der Google Cloud Console die Seite Vertex AI Model Registry auf.
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.
- Geben Sie für Name
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
.
- Wählen Sie für Modell-Framework-Version die Option
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:
Rufen Sie in der Google Cloud Console die Seite Vertex AI Model Registry auf.
Klicken Sie auf den Namen Ihres Modells.
Klicken Sie auf Bereitstellen und testen.
Klicken Sie auf In Endpunkt bereitstellen.
Geben Sie als Endpunktname
bert_model_endpoint
ein.Klicken Sie auf Weiter.
Wählen Sie Ihre Rechenressourcen aus.
Klicken Sie auf Bereitstellen.
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:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
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-IDCONNECTION_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
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.