Pembuatan embedding mandiri

Dokumen ini menjelaskan cara menggunakan pembuatan sematan otonom untuk data Anda, yang memungkinkan BigQuery mempertahankan kolom sematan pada tabel berdasarkan kolom sumber. Saat Anda menambahkan atau mengubah data di kolom sumber, BigQuery akan otomatis membuat atau memperbarui kolom embedding untuk data tersebut menggunakan model embedding Vertex AI. Hal ini berguna jika Anda ingin BigQuery mempertahankan sematan saat data sumber Anda diperbarui secara rutin.

Embedding berguna untuk aplikasi AI generatif modern seperti Retrieval Augmented Generation (RAG), tetapi embedding bisa rumit untuk dibuat, dikelola, dan dikueri. Anda dapat menggunakan pembuatan embedding otonom untuk menyederhanakan proses pembuatan, pemeliharaan, dan kueri embedding untuk digunakan dalam penelusuran kemiripan dan aplikasi AI generatif lainnya.

Misalnya, Anda dapat menggunakan kueri yang mirip dengan berikut untuk membuat tabel dengan pengaktifan pembuatan embedding otonom, memasukkan data, lalu melakukan penelusuran semantik:

CREATE TABLE mydataset.products (
  name STRING,
  description STRING,
  description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
    GENERATED ALWAYS AS (
      AI.EMBED(description, connection_id => 'us.example_connection',
        endpoint => 'text-embedding-005'))
    STORED OPTIONS( asynchronous = TRUE ));

# Values in the description_embedding column are automatically generated.
INSERT INTO mydataset.products (name, description) VALUES
  ("Super slingers"), ("An exciting board game for the whole family"), ...;

SELECT * FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");

Sebelum memulai

Untuk mengaktifkan pembuatan sematan otonom pada tabel, Anda harus memiliki izin dan koneksi yang diperlukan.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengaktifkan pembuatan sematan mandiri, minta administrator untuk memberi Anda peran IAM berikut:

  • Untuk menggunakan resource koneksi: BigQuery Connections User (roles/bigquery.connectionUser) pada koneksi
  • Untuk membuat tabel: BigQuery Data Editor (roles/bigquery.dataEditor) pada tabel
  • Berikan peran berikut kepada akun layanan koneksi agar dapat mengakses model yang dihosting di endpoint Vertex AI: Vertex AI User (roles/aiplatform.user) di project yang memiliki koneksi

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat koneksi dan memberikan izin ke akun layanan

Untuk mengaktifkan pembuatan sematan mandiri pada tabel, Anda harus membuat koneksi resource Cloud. Kemudian, berikan peran Vertex AI User (roles/aiplatform.user) ke akun layanan yang dibuat saat Anda membuat koneksi.

Membuat tabel dengan pembuatan sematan mandiri

Anda dapat menggunakan pembuatan embedding otonom untuk membuat embedding menggunakan fungsi AI.EMBED dalam pernyataan CREATE TABLE.

CREATE TABLE DATASET_ID.TABLE (
  [COLUMN, ...]
  STRING_COL STRING,
  EMBEDDING_COL_NAME STRUCT<result ARRAY<FLOAT64>, status STRING>
    GENERATED ALWAYS AS (
      AI.EMBED(
        STRING_COL,
        connection_id => CONNECTION_ID,
        endpoint => ENDPOINT)
    )
    STORED OPTIONS (asynchronous = TRUE)
);

Ganti kode berikut:

  • DATASET_ID: Nama set data tempat Anda ingin membuat tabel.
  • TABLE: Nama tabel tempat pembuatan embedding otonom akan dilakukan.
  • COLUMN, ...: Kolom apa pun yang harus ada dalam tabel Anda selain kolom yang ingin Anda sematkan secara otomatis.
  • STRING_COL: Nama kolom STRING yang ingin Anda sematkan secara otomatis.
  • EMBEDDING_COL_NAME: Nama kolom embedding yang dibuat secara otomatis.
  • CONNECTION_ID: Nilai STRING yang berisi nama koneksi yang akan digunakan, seperti my_project.us.example_connection. Anda harus memberikan peran Vertex AI User ke akun layanan koneksi dalam project tempat Anda membuat tabel.
  • ENDPOINT: nilai STRING yang menentukan endpoint model penyematan teks Vertex AI yang didukung untuk digunakan bagi model penyematan teks. Nilai endpoint yang Anda tentukan harus menyertakan versi model, misalnya text-embedding-005. Jika Anda menentukan nama model, bukan URL, BigQuery ML akan otomatis mengidentifikasi model dan menggunakan endpoint lengkap model.

Tugas pembuatan sematan latar belakang dimulai segera setelah tabel Anda dibuat, atau setelah Anda memperbarui data di kolom sumber.

Untuk melacak progres pembuatan sematan, Anda dapat menggunakan kueri yang mirip dengan berikut ini:

SELECT
  COUNT(*) AS total_num_rows,
  COUNTIF(description_embedding IS NOT NULL
          AND description_embedding.status = '') AS total_num_generated_embeddings
FROM
  PROJECT_ID.DATASET_ID.TABLE;

Setelah membuat tabel dengan penyematan, Anda dapat membuat indeks vektor pada kolom STRUCT yang berisi penyematan yang dibuat secara otomatis.

Contoh

Misalnya, Anda adalah retailer besar yang menjual banyak produk berbeda. Anda memiliki tabel nama dan deskripsi produk dan ingin membantu pelanggan menemukan produk yang mereka cari. Kueri berikut menunjukkan cara menyiapkan pembuatan sematan otonom untuk membantu penelusuran semantik deskripsi produk Anda.

Pertama, buat set data:

CREATE SCHEMA mydataset;

Selanjutnya, buat tabel dengan pembuatan embedding otonom diaktifkan untuk menyimpan informasi produk Anda. Kolom yang dibuat secara otomatis disebut description_embedding dan didasarkan pada kolom description.

# Create a table of products and descriptions with a generated embedding column.
CREATE TABLE mydataset.products (
  name STRING,
  description STRING,
  description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
    GENERATED ALWAYS AS (AI.EMBED(
      description,
      connection_id => 'us.example_connection',
      endpoint => 'text-embedding-005'
    ))
    STORED OPTIONS( asynchronous = TRUE )
);

Kueri berikut menyisipkan beberapa nama dan deskripsi produk ke dalam tabel. Anda tidak menentukan nilai untuk description_embedding karena nilai tersebut dibuat secara otomatis.

# Insert product descriptions into the table.
# The description_embedding column is automatically updated.
INSERT INTO mydataset.products (name, description) VALUES
  ("Lounger chair", "A comfortable chair for relaxing in."),
  ("Super slingers", "An exciting board game for the whole family."),
  ("Encyclopedia set", "A collection of informational books.");

Anda dapat secara opsional membuat indeks vektor pada tabel untuk mempercepat penelusuran. Indeks vektor memerlukan lebih dari tiga baris, sehingga kueri berikut mengasumsikan bahwa Anda telah memasukkan data tambahan. Setiap kali Anda menyisipkan data, kolom description_embedding akan otomatis diperbarui.

CREATE VECTOR INDEX my_index
ON mydataset.products(description_embedding)
OPTIONS(index_type = 'IVF');

Terakhir, Anda dapat menggunakan fungsi AI.SEARCH untuk melakukan penelusuran semantik pada produk Anda untuk menemukan mainan yang menyenangkan:

# Search for products that are fun to play with.
SELECT base.name, base.description, distance
FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");

/*------------------+----------------------------------------------+----------------------+
 | name             | description                                  | distance             |
 +------------------+----------------------------------------------+----------------------+
 | Super slingers   | An exciting board game for the whole family. | 0.80954913893618929  |
 | Lounger chair    | A comfortable chair for relaxing in.         | 0.938933930620146    |
 | Encyclopedia set | A collection of informational books.         | 1.1119297739353384   |
 +------------------+----------------------------------------------+----------------------*/

Mendapatkan informasi tentang kolom penyematan yang dibuat secara otomatis

Untuk memverifikasi bahwa kolom adalah kolom penyematan yang dibuat secara otomatis, kueri tampilan INFORMATION_SCHEMA.COLUMNS.

Kueri berikut menunjukkan informasi tentang semua kolom sematan yang dibuat secara otomatis:

SELECT *
FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.COLUMNS
WHERE is_generated = 'ALWAYS';

Kolom generation_expression menunjukkan panggilan ke fungsi AI.EMBED yang digunakan untuk membuat embedding di kolom.

Menggunakan pemesanan Anda sendiri

Secara default, BigQuery menggunakan slot on-demand untuk menangani pemrosesan yang diperlukan untuk mempertahankan kolom embedding yang dihasilkan. Untuk memastikan performa yang dapat diprediksi dan konsisten, Anda dapat secara opsional membuat reservasi dan menetapkan job_type ke BACKGROUND. Jika ada reservasi latar belakang, BigQuery akan menggunakannya untuk mempertahankan kolom sematan yang dihasilkan.

Pemecahan masalah

Kolom penyematan yang dihasilkan berisi dua kolom: result dan status. Jika terjadi error saat BigQuery mencoba membuat sematan untuk baris tertentu dalam tabel Anda, kolom result akan menjadi NULL dan kolom status akan menjelaskan error tersebut. Misalnya, jika kolom sumber adalah NULL, maka sematan result juga NULL dan statusnya adalah NULL value is not supported for embedding generation.

Error yang lebih parah dapat menghentikan pembuatan sematan. Dalam hal ini, Anda dapat membuat kueri tampilan INFORMATION_SCHEMA.JOBS untuk tugas latar belakang dan melihat informasi di kolom error_result. ID tugas dari tugas penyematan latar belakang diawali dengan gc_. Misalnya, kueri berikut mengekstrak semua tugas latar belakang yang hasil errornya bukan NULL:

SELECT * FROM `region-REGION.INFORMATION_SCHEMA.JOBS` j
WHERE EXISTS (
  SELECT 1
  FROM unnest(j.referenced_tables) t
  WHERE
    j.project_id = 'PROJECT_ID'
    AND t.dataset_id = 'DATASET_ID'
    AND t.table_id = 'TABLE'
)
AND starts_with(job_id, 'gc')
AND error_result IS NOT NULL
ORDER BY j.creation_time DESC;

Melacak biaya

Pembuatan embedding secara mandiri mengirim permintaan ke Vertex AI, yang dapat menimbulkan biaya. Untuk melacak biaya Vertex AI yang dikeluarkan oleh tugas penyematan latar belakang, ikuti langkah-langkah berikut:

  1. Melihat laporan penagihan di Penagihan Cloud.
  2. Gunakan filter untuk menyaring hasil.

    Untuk layanan, pilih Vertex AI.

  3. Untuk melihat biaya tugas tertentu, filter menurut label.

    Tetapkan kunci ke bigquery_ml_job dan nilai ke ID tugas tugas penyematan. Semua tugas penyematan latar belakang memiliki awalan gc_.

Diperlukan waktu hingga 24 jam agar beberapa tagihan muncul di Cloud Billing.

Batasan

  • Setiap tabel mendukung paling banyak satu kolom sematan yang dibuat secara otomatis.
  • Tidak ada indikasi bahwa kolom dibuat secara otomatis saat Anda melihat skema tabel menggunakan konsol Google Cloud , perintah bq show, atau kolom ddl tampilan INFORMATION_SCHEMA.TABLES.
  • Anda tidak dapat menambahkan kolom sematan yang dihasilkan ke tabel yang ada menggunakan ALTER TABLE ADD COLUMN.
  • Jika Anda membuat salinan, clone, atau snapshot tabel yang memiliki kolom sematan yang dibuat, hanya data yang disalin. Konfigurasi pembuatan tidak berlaku untuk tabel baru, dan pembaruan pada kolom sumber tabel baru tidak akan menghasilkan sematan baru.
  • Jika Anda memulihkan tabel yang mengaktifkan pembuatan sematan otonom dari snapshot, konfigurasi pembuatan sematan tidak akan dipulihkan.
  • Anda hanya dapat membuat kolom sematan yang dihasilkan menggunakan SQL. Anda tidak dapat menggunakan perintah bq mk atau bq update untuk membuat kolom sematan yang dihasilkan.
  • Kolom sumber dari kolom yang dihasilkan harus berupa kolom STRING.
  • Setelah Anda membuat kolom embedding yang dihasilkan, batasan berikut berlaku:

    • Anda tidak dapat menghapus atau mengganti nama kolom sumber, tetapi Anda tetap dapat menghapus atau mengganti nama kolom sematan yang dihasilkan. Jika Anda melepaskan kolom embedding, Anda dapat melepaskan atau mengganti nama kolom sumber.
    • Anda tidak dapat mengubah jenis data kolom sumber atau kolom sematan yang dihasilkan.
  • Anda tidak dapat menentukan nilai default untuk kolom penyematan yang dibuat secara otomatis.

  • Anda tidak dapat menulis langsung ke kolom embedding yang dihasilkan menggunakan metode berikut:

    • DML
    • Penulisan streaming
    • bq insert
    • bq copy -a
  • Tabel dengan kolom sematan yang dibuat tidak mendukung kebijakan keamanan tingkat kolom apa pun, seperti tag kebijakan.

  • Saat Anda memanggil fungsi penelusuran, seperti VECTOR_SEARCH atau AI.SEARCH, baris dengan embedding yang tidak ada dalam tabel dasar akan dilewati selama penelusuran.

  • Anda tidak dapat membuat indeks vektor berpartisi pada tabel yang mengaktifkan pembuatan sematan otonom.

  • Jika Anda membuat indeks vektor pada kolom penyematan yang dibuat secara otomatis, pelatihan indeks akan dimulai setelah setidaknya 80% baris membuat penyematan. Anda dapat menggunakan kueri berikut untuk memeriksa persentase embedding di tabel Anda yang telah dibuat:

    SELECT
      COUNTIF(description_embedding IS NOT NULL
      AND description_embedding.status = '') * 100.0 / COUNT(*) AS percent
    FROM PROJECT_ID.DATASET_ID.TABLE;
    

Langkah berikutnya