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
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: 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.
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
zum Speichern der von Ihnen erstellten Modelle zu erstellen:
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
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
Installieren Sie die Bibliothek
bigquery-ml-utils
mit pip:pip install bigquery-ml-utils
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.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"])
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
Installieren Sie die Bibliothek
bigquery-ml-utils
mit pip:pip install bigquery-ml-utils
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.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"])
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
Installieren Sie die Bibliothek
bigquery-ml-utils
mit pip:pip install bigquery-ml-utils
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.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"])
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
:
Ö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 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:
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 als 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 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:
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 Zugriff auf das Dienstkonto der Verbindung.
Verwenden Sie die Anweisung CREATE MODEL
, um ein Remote-Modell basierend auf dem Vertex AI-Endpunkt 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.