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 singkat, berita, tweet, ulasan Neural Network Language Model
SWIVEL <150MB 20 Frasa singkat, 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 menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • BigQuery: Anda akan dikenai biaya untuk kueri yang dijalankan di BigQuery.
  • BigQuery ML: Anda akan dikenai biaya untuk model yang Anda buat dan inferensi yang dilakukan di BigQuery ML.
  • Cloud Storage: Anda akan dikenai biaya untuk objek yang Anda simpan di Cloud Storage.
  • Vertex AI: Jika mengikuti petunjuk pembuatan model BERT, Anda akan dikenai biaya untuk men-deploy model ke 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. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  4. Aktifkan API BigQuery, BigQuery Connection, and Vertex AI.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  7. Aktifkan API BigQuery, BigQuery Connection, and Vertex AI.

    Mengaktifkan API

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.

    Aktifkan 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: Mencetak tanda tangan model yang dibuat:

    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 alat gsutil:

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

    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: Mencetak tanda tangan model yang dibuat:

    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 alat gsutil:

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

    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: Mencetak tanda tangan model yang dibuat:

    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 alat gsutil:

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

    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 dari ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan dalam Connection ID, 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. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.