Menyematkan teks dengan model TensorFlow yang telah dilatih sebelumnya

Tutorial ini menunjukkan cara membuat embedding teks NNLM, SWIVEL, dan BERT di BigQuery menggunakan model TensorFlow yang telah dilatih sebelumnya. Embedding teks adalah representasi vektor padat dari sebuah teks sedemikian rupa, sehingga jika dua potongan teks serupa secara semantik, maka embedding masing-masing akan berdekatan dalam ruang vektor embedding.

Model NNLM, SWIVEL, dan BERT

Model NNLM, SWIVEL, dan BERT bervariasi dalam ukuran, akurasi, skalabilitas, dan biaya. Gunakan tabel berikut untuk membantu Anda menentukan model mana yang akan digunakan:

Model Ukuran model Dimensi embedding Kasus penggunaan Deskripsi
NNLM <150MB 50 Frasa pendek, berita, tweet, ulasan Neural Network Language Model
SWIVEL <150MB 20 Frasa pendek, berita, tweet, ulasan Submatrix-wise Vector Embedding Learner
BERT ~200MB 768 Frasa pendek, berita, tweet, ulasan, paragraf pendek Bidirectional Encoder Representations from Transformers

Dalam tutorial ini, model NNLM dan SWIVEL adalah model TensorFlow yang diimpor, dan model BERT adalah model jarak jauh di Vertex AI.

Izin yang diperlukan

  • Untuk membuat set data, Anda memerlukan izin Identity and Access Management (IAM) bigquery.datasets.create.

  • Untuk membuat bucket, Anda memerlukan izin IAM storage.buckets.create.

  • Untuk mengupload model ke Cloud Storage, Anda memerlukan izin IAM storage.objects.create dan storage.objects.get.

  • Untuk membuat resource koneksi, Anda memerlukan izin IAM berikut:

    • bigquery.connections.create
    • bigquery.connections.get
  • Untuk memuat model ke BigQuery ML, Anda memerlukan izin IAM berikut:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Untuk menjalankan inferensi, Anda memerlukan izin IAM berikut:

    • bigquery.tables.getData pada tabel objek
    • bigquery.models.getData pada model
    • bigquery.jobs.create

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • 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.

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Untuk informasi selengkapnya, lihat referensi berikut:

Sebelum memulai

  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

Membuat set data

Untuk membuat set data bernama tf_models_tutorial guna menyimpan model yang Anda buat, pilih salah satu opsi berikut:

SQL

Gunakan pernyataan CREATE SCHEMA:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;

    Ganti PROJECT_ID dengan project ID Anda.

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Activate Cloud Shell

  2. Untuk membuat set data, jalankan perintah bq mk:

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

    Ganti PROJECT_ID dengan project ID Anda.

Membuat dan mengupload model ke Cloud Storage

Untuk petunjuk yang lebih detail tentang cara membuat embedding teks menggunakan model TensorFlow yang telah dilatih sebelumnya, lihat notebook Colab. Jika tidak, pilih salah satu model berikut:

NNLM

  1. Instal library bigquery-ml-utils menggunakan pip:

    pip install bigquery-ml-utils
    
  2. Buat model NNLM. Kode Python berikut memuat model NNLM dari TensorFlow Hub dan menyiapkannya untuk BigQuery:

    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)
    

    Ganti OUTPUT_MODEL_PATH dengan jalur ke folder lokal tempat Anda dapat menyimpan model untuk sementara.

  3. Opsional: Cetak tanda tangan model yang dihasilkan:

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. Untuk menyalin model yang dihasilkan dari folder lokal Anda ke bucket Cloud Storage, gunakan Google Cloud CLI:

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

    Ganti BUCKET_PATH dengan nama bucket Cloud Storage tempat Anda menyalin model.

SWIVEL

  1. Instal library bigquery-ml-utils menggunakan pip:

    pip install bigquery-ml-utils
    
  2. Buat model SWIVEL. Kode Python berikut memuat model SWIVEL dari TensorFlow Hub dan menyiapkannya untuk BigQuery:

    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)
    

    Ganti OUTPUT_MODEL_PATH dengan jalur ke folder lokal tempat Anda dapat menyimpan model untuk sementara.

  3. Opsional: Cetak tanda tangan model yang dihasilkan:

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. Untuk menyalin model yang dihasilkan dari folder lokal Anda ke bucket Cloud Storage, gunakan Google Cloud CLI:

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

    Ganti BUCKET_PATH dengan nama bucket Cloud Storage tempat Anda menyalin model.

BERT

  1. Instal library bigquery-ml-utils menggunakan pip:

    pip install bigquery-ml-utils
    
  2. Buat model BERT. Kode Python berikut memuat model BERT dari TensorFlow Hub dan menyiapkannya untuk BigQuery:

    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)
    

    Ganti OUTPUT_MODEL_PATH dengan jalur ke folder lokal tempat Anda dapat menyimpan model untuk sementara.

  3. Opsional: Cetak tanda tangan model yang dihasilkan:

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. Untuk menyalin model yang dihasilkan dari folder lokal Anda ke bucket Cloud Storage, gunakan Google Cloud CLI:

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

    Ganti BUCKET_PATH dengan nama bucket Cloud Storage tempat Anda menyalin model.

Memuat model ke BigQuery

Pilih salah satu model berikut:

NNLM

Gunakan pernyataan CREATE MODEL:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

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

    Ganti BUCKET_NAME dengan nama bucket yang Anda buat sebelumnya.

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

SWIVEL

Gunakan pernyataan CREATE MODEL:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

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

    Ganti BUCKET_NAME dengan nama bucket yang Anda buat sebelumnya.

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

BERT

Untuk memuat model BERT ke BigQuery, impor model BERT ke Vertex AI, deploy model ke endpoint Vertex AI, buat koneksi, lalu buat model jarak jauh di BigQuery.

Untuk mengimpor model BERT ke Vertex AI, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Model registry Vertex AI.

    Buka Model registry

  2. Klik Impor, lalu lakukan hal berikut:

    • Untuk Nama, masukkan BERT.
    • Untuk Region, pilih region yang cocok dengan region bucket Cloud Storage.
  3. Klik Lanjutkan, lalu lakukan tindakan berikut:

    • Untuk Versi framework model, pilih 2.8.
    • Untuk Lokasi artefak model, masukkan jalur ke bucket Cloud Storage tempat Anda menyimpan file model. Misalnya, gs://BUCKET_PATH/bert_model.
  4. Klik Import. Setelah impor selesai, model Anda akan muncul di halaman Model registry.

Untuk men-deploy model BERT ke endpoint Vertex AI dan menghubungkannya ke BigQuery, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Model registry Vertex AI.

    Buka Model registry

  2. Klik nama model Anda.

  3. Klik Deploy & uji.

  4. Klik Deploy ke endpoint.

  5. Untuk Nama endpoint, masukkan bert_model_endpoint.

  6. Klik Lanjutkan.

  7. Pilih resource komputasi Anda.

  8. Klik Deploy.

  9. Membuat koneksi resource Cloud BigQuery dan memberikan akses ke akun layanan koneksi tersebut.

Untuk membuat model jarak jauh berdasarkan endpoint Vertex AI, gunakan pernyataan CREATE MODEL:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    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");

    Ganti kode berikut:

    • PROJECT_ID: project ID
    • CONNECTION_LOCATION: lokasi koneksi BigQuery Anda
    • CONNECTION_ID: ID koneksi BigQuery Anda

      Saat Anda melihat detail koneksi di Konsol Google Cloud, ini adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnya projects/myproject/locations/connection_location/connections/myconnection

    • ENDPOINT_LOCATION: lokasi endpoint Vertex AI Anda. Misalnya: "us-central1".
    • ENDPOINT_ID: ID endpoint model Anda

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

Membuat embedding teks

Di bagian ini, Anda menggunakan fungsi inferensi ML.PREDICT() untuk menghasilkan embedding teks kolom review dari set data publik bigquery-public-data.imdb.reviews. Kueri membatasi jumlah baris pada tabel hingga 500 baris untuk mengurangi jumlah data yang diproses.

NNLM

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

Hasilnya serupa dengan berikut ini:

+-----------------------+----------------------------------------+
| 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)
  );

Hasilnya serupa dengan berikut ini:

+----------------------+----------------------------------------+
| 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)
  );

Hasilnya serupa dengan berikut ini:

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

Pembersihan

  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.