Membuat embedding teks menggunakan fungsi ML.GENERATE_EMBEDDING
Dokumen ini menunjukkan cara membuat model jarak jauh BigQuery ML yang merujuk pada model penyematan. Kemudian, Anda menggunakan model tersebut dengan
fungsi ML.GENERATE_EMBEDDING
untuk membuat penyematan teks dengan menggunakan data dari
tabel standar BigQuery.
Jenis model jarak jauh berikut didukung:
- Model jarak jauh dibandingkan model sematan Vertex AI.
- Model jarak jauh melalui model terbuka yang didukung (Pratinjau).
Peran yang diperlukan
Untuk membuat model jarak jauh dan menggunakan fungsi ML.GENERATE_EMBEDDING
, Anda memerlukan peran Identity and Access Management (IAM) berikut:
- Buat dan gunakan set data, tabel, dan model BigQuery:
Editor Data BigQuery (
roles/bigquery.dataEditor
) di project Anda. Membuat, mendelegasikan, dan menggunakan koneksi BigQuery: BigQuery Connections Admin (
roles/bigquery.connectionsAdmin
) di project Anda.Jika Anda belum mengonfigurasi koneksi default, Anda dapat membuat dan menyetelnya sebagai bagian dari menjalankan pernyataan
CREATE MODEL
. Untuk melakukannya, Anda harus memiliki peran Admin BigQuery (roles/bigquery.admin
) di project Anda. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi koneksi default.Memberikan izin ke akun layanan koneksi: Admin IAM Project (
roles/resourcemanager.projectIamAdmin
) di project yang berisi endpoint Vertex AI. Ini adalah project saat ini untuk model jarak jauh yang Anda buat dengan menentukan nama model sebagai endpoint. Ini adalah project yang diidentifikasi dalam URL untuk model jarak jauh yang Anda buat dengan menentukan URL sebagai endpoint.Membuat tugas BigQuery: Pengguna Tugas BigQuery (
roles/bigquery.jobUser
) di project Anda.
Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk melakukan tugas dalam dokumen ini. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
- Buat set data:
bigquery.datasets.create
- Membuat, mendelegasikan, dan menggunakan koneksi:
bigquery.connections.*
- Tetapkan izin akun layanan:
resourcemanager.projects.getIamPolicy
danresourcemanager.projects.setIamPolicy
- Buat model dan jalankan inferensi:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
- Membuat kueri data tabel:
bigquery.tables.getData
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Sebelum memulai
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Membuat set data
Buat set data BigQuery untuk memuat resource Anda:
Konsol
Di konsol Google Cloud , buka halaman BigQuery.
Di panel Explorer, klik nama project Anda.
Klik
View actions > Create dataset.Di halaman Create dataset, lakukan hal berikut:
Untuk ID Set Data, ketik nama untuk set data.
Untuk Location type, pilih lokasi untuk set data.
Klik Create dataset.
bq
Membuat koneksi
Anda dapat melewati langkah ini jika telah mengonfigurasi koneksi default, atau memiliki peran Admin BigQuery.
Buat koneksi resource Cloud untuk digunakan model jarak jauh, lalu dapatkan akun layanan koneksi. Buat koneksi di lokasi yang sama dengan set data yang Anda buat di langkah sebelumnya.
Pilih salah satu opsi berikut:
Konsol
Buka halaman BigQuery.
Di panel Penjelajah, klik
Tambahkan data:Dialog Tambahkan data akan terbuka.
Di panel Filter Menurut, di bagian Jenis Sumber Data, pilih Aplikasi Bisnis.
Atau, di kolom Telusuri sumber data, Anda dapat memasukkan
Vertex AI
.Di bagian Sumber data unggulan, klik Vertex AI.
Klik kartu solusi Vertex AI Models: BigQuery Federation.
Dalam daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).
Di kolom Connection ID, masukkan nama untuk koneksi Anda.
Klik Create connection.
Klik Go to connection.
Di panel Connection info, salin ID akun layanan untuk digunakan di langkah berikutnya.
bq
Di lingkungan command line, buat koneksi:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
Parameter
--project_id
akan mengganti project default.Ganti kode berikut:
REGION
: region koneksi AndaPROJECT_ID
: Google Cloud project ID AndaCONNECTION_ID
: ID untuk koneksi Anda
Saat Anda membuat resource koneksi, BigQuery akan membuat akun layanan sistem unik dan mengaitkannya dengan koneksi.
Pemecahan masalah: Jika Anda mendapatkan error koneksi berikut, update Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Ambil dan salin ID akun layanan untuk digunakan pada langkah berikutnya:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
Outputnya mirip dengan hal berikut ini:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel."}
Terraform
Gunakan resource google_bigquery_connection
.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Contoh berikut membuat koneksi resource Cloud bernama
my_cloud_resource_connection
di region US
:
Untuk menerapkan konfigurasi Terraform di project Google Cloud , selesaikan langkah-langkah di bagian berikut.
Menyiapkan Cloud Shell
- Luncurkan Cloud Shell.
-
Tetapkan project default Google Cloud tempat Anda ingin menerapkan konfigurasi Terraform.
Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.
Menyiapkan direktori
Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.
Salin kode contoh ke dalam
main.tf
yang baru dibuat.Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
terraform init
Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi
-upgrade
:terraform init -upgrade
Menerapkan perubahan
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- Buka Google Cloud project Anda untuk melihat hasilnya. Di konsol Google Cloud , buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.
Memberikan akses pada akun layanan
Berikan peran Vertex AI User ke akun layanan koneksi.
Jika Anda berencana menentukan endpoint sebagai URL saat membuat model jarak jauh, misalnya
endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/text-embedding-005'
,
berikan peran ini di project yang sama dengan yang Anda tentukan di URL.
Jika Anda berencana menentukan endpoint menggunakan nama model saat membuat model jarak jauh, misalnya endpoint = 'text-embedding-005'
, berikan peran ini di project yang sama tempat Anda berencana membuat model jarak jauh.
Pemberian peran dalam project lain akan menyebabkan error
bqcx-1234567890-wxyz@gcp-sa-bigquery-condel. does not have the permission to access resource
.
Untuk memberikan peran, ikuti langkah-langkah berikut:
Konsol
Buka halaman IAM & Admin.
Klik
Grant access.Dialog Add principals akan terbuka.
Di kolom Akun utama baru, masukkan ID akun layanan yang Anda salin sebelumnya.
Di kolom Pilih peran, pilih Vertex AI, lalu pilih Pengguna Vertex AI.
Klik Simpan.
gcloud
Gunakan
perintah gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None
Ganti kode berikut:
PROJECT_NUMBER
: nomor project AndaMEMBER
: ID akun layanan yang Anda salin sebelumnya
Men-deploy model terbuka
Jika ingin menggunakan model terbuka yang didukung, Anda harus men-deploy model tersebut ke Vertex AI terlebih dahulu. Untuk mengetahui informasi selengkapnya tentang cara melakukannya, lihat Men-deploy model terbuka.
Membuat model
Di konsol Google Cloud , buka halaman BigQuery.
Dengan menggunakan editor SQL, buat model jarak jauh:
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`} OPTIONS (ENDPOINT = 'ENDPOINT');
Ganti kode berikut:
PROJECT_ID
: project ID AndaDATASET_ID
: ID set data untuk menampung modelMODEL_NAME
: nama modelREGION
: region yang digunakan oleh koneksi.CONNECTION_ID
: ID koneksi BigQuery AndaSaat 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
: nama model embedding yang akan digunakan. Untuk mengetahui informasi selengkapnya tentang versi dan alias model Vertex AI, lihatENDPOINT
. Untuk mengetahui informasi selengkapnya tentang model terbuka, lihat model terbuka yang didukung.Model Vertex AI yang Anda tentukan harus tersedia di lokasi tempat Anda membuat model jarak jauh. Untuk mengetahui informasi selengkapnya, lihat Lokasi.
Membuat embedding teks
Buat embedding teks dengan
fungsi ML.GENERATE_EMBEDDING
menggunakan data teks dari kolom tabel atau kueri.
Biasanya, Anda akan menggunakan model embedding teks untuk kasus penggunaan khusus teks, dan model embedding multimodal untuk kasus penggunaan penelusuran lintas modalitas, dengan embedding untuk konten teks dan visual dibuat dalam ruang semantik yang sama.
Teks Vertex AI
Membuat embedding teks dengan menggunakan model jarak jauh melalui model embedding teks Vertex AI:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)}, STRUCT(FLATTEN_JSON AS flatten_json_output, TASK_TYPE AS task_type, OUTPUT_DIMENSIONALITY AS output_dimensionality) );
Ganti kode berikut:
PROJECT_ID
: project ID Anda.DATASET_ID
: ID set data yang berisi model.MODEL_NAME
: nama model jarak jauh di atas model penyematan.TABLE_NAME
: nama tabel yang berisi teks yang akan disematkan. Tabel ini harus memiliki kolom yang bernamacontent
, atau Anda dapat menggunakan alias untuk menggunakan kolom dengan nama yang berbeda.CONTENT_QUERY
: kueri yang hasilnya berisi kolomSTRING
yang disebutcontent
.FLATTEN_JSON
: nilaiBOOL
yang menunjukkan apakah akan mengurai penyematan ke kolom terpisah atau tidak. Nilai default-nya adalahTRUE
.TASK_TYPE
: literalSTRING
yang menentukan aplikasi downstream yang dimaksudkan untuk membantu model menghasilkan embedding dengan kualitas yang lebih baik.TASK_TYPE
menerima nilai berikut:RETRIEVAL_QUERY
: menentukan bahwa teks yang diberikan adalah kueri dalam setelan penelusuran atau pengambilan.RETRIEVAL_DOCUMENT
: menentukan bahwa teks yang diberikan adalah dokumen dalam setelan penelusuran atau pengambilan.Saat menggunakan jenis tugas ini, sebaiknya sertakan judul dokumen dalam pernyataan kueri untuk meningkatkan kualitas penyematan. Judul dokumen harus berada di kolom yang bernama
title
atau diberi alias sebagaititle
, misalnya:SELECT * FROM ML.GENERATE_EMBEDDING( MODEL
mydataset.embedding_model
, (SELECT abstract as content, header as title, publication_number FROMmydataset.publications
), STRUCT(TRUE AS flatten_json_output, 'RETRIEVAL_DOCUMENT' as task_type) );Menentukan kolom judul dalam kueri input akan mengisi kolom
title
isi permintaan yang dikirim ke model. Jika Anda menentukan nilaititle
saat menggunakan jenis tugas lain, input tersebut akan diabaikan dan tidak berpengaruh pada hasil penyematan.SEMANTIC_SIMILARITY
: menentukan bahwa teks yang diberikan akan digunakan untuk Kemiripan Teks Semantik (STS).CLASSIFICATION
: menentukan bahwa embedding akan digunakan untuk klasifikasi.CLUSTERING
: menentukan bahwa embedding akan digunakan untuk pengelompokan.QUESTION_ANSWERING
: menentukan bahwa embedding akan digunakan untuk menjawab pertanyaan.FACT_VERIFICATION
: menentukan bahwa embedding akan digunakan untuk verifikasi fakta.CODE_RETRIEVAL_QUERY
: menentukan bahwa embedding akan digunakan untuk pengambilan kode.
OUTPUT_DIMENSIONALITY
: nilaiINT64
yang menentukan jumlah dimensi yang akan digunakan saat membuat embedding. Misalnya, jika Anda menentukan256 AS output_dimensionality
, maka kolom outputml_generate_embedding_result
berisi 256 sematan untuk setiap nilai input.Untuk model jarak jauh melalui model
gemini-embedding-001
, nilaiOUTPUT_DIMENSIONALITY
harus berada dalam rentang[1, 3072]
. Nilai defaultnya adalah3072
. Untuk model jarak jauh di atas modeltext-embedding
atautext-multilingual-embedding
, nilaiOUTPUT_DIMENSIONALITY
harus berada dalam rentang[1, 768]
. Nilai defaultnya adalah768
.Jika Anda menggunakan model jarak jauh melalui model
text-embedding
, versi modeltext-embedding
harustext-embedding-004
atau yang lebih baru. Jika Anda menggunakan model jarak jauh melalui modeltext-multilingual-embedding
, versi modeltext-multilingual-embedding
harustext-multilingual-embedding-002
atau yang lebih baru.
Contoh: menyematkan teks dalam tabel
Contoh berikut menunjukkan permintaan untuk menyematkan kolom content
dari tabel text_data
:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `mydataset.embedding_model`, TABLE mydataset.text_data, STRUCT(TRUE AS flatten_json_output, 'CLASSIFICATION' AS task_type) );
Teks bebas
Membuat embedding teks dengan menggunakan model jarak jauh melalui model embedding terbuka:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)}, STRUCT(FLATTEN_JSON AS flatten_json_output) );
Ganti kode berikut:
PROJECT_ID
: project ID Anda.DATASET_ID
: ID set data yang berisi model.MODEL_NAME
: nama model jarak jauh di atas model penyematan.TABLE_NAME
: nama tabel yang berisi teks yang akan disematkan. Tabel ini harus memiliki kolom yang bernamacontent
, atau Anda dapat menggunakan alias untuk menggunakan kolom dengan nama yang berbeda.CONTENT_QUERY
: kueri yang hasilnya berisi kolomSTRING
yang disebutcontent
.FLATTEN_JSON
: nilaiBOOL
yang menunjukkan apakah akan mengurai penyematan ke kolom terpisah atau tidak. Nilai defaultnya adalahTRUE
.
Multimodal Vertex AI
Membuat embedding teks dengan menggunakan model jarak jauh melalui model embedding multimodal Vertex AI:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (CONTENT_QUERY)}, STRUCT(FLATTEN_JSON AS flatten_json_output, OUTPUT_DIMENSIONALITY AS output_dimensionality) );
Ganti kode berikut:
PROJECT_ID
: project ID Anda.DATASET_ID
: ID set data yang berisi model.MODEL_NAME
: nama model jarak jauh di atas modelmultimodalembedding@001
.TABLE_NAME
: nama tabel yang berisi teks yang akan disematkan. Tabel ini harus memiliki kolom yang bernamacontent
, atau Anda dapat menggunakan alias untuk menggunakan kolom dengan nama yang berbeda.CONTENT_QUERY
: kueri yang hasilnya berisi kolomSTRING
yang disebutcontent
.FLATTEN_JSON
:BOOL
yang menunjukkan apakah akan mengurai penyematan ke kolom terpisah atau tidak. Nilai defaultnya adalahTRUE
.OUTPUT_DIMENSIONALITY
: nilaiINT64
yang menentukan jumlah dimensi yang akan digunakan saat membuat embedding. Nilai yang valid adalah128
,256
,512
, dan1408
. Nilai defaultnya adalah1408
. Misalnya, jika Anda menentukan256 AS output_dimensionality
, makaml_generate_embedding_result
kolom output berisi 256 sematan untuk setiap nilai input.
Contoh: menggunakan embedding untuk mengurutkan kesamaan semantik
Contoh berikut menyematkan kumpulan ulasan film dan mengurutkannya berdasarkan jarak kosinus ke ulasan "This movie was average" menggunakan fungsi VECTOR_SEARCH
.
Jarak yang lebih kecil menunjukkan adanya lebih banyak kesamaan semantik.
Untuk mengetahui informasi selengkapnya tentang penelusuran vektor dan indeks vektor, lihat Pengantar penelusuran vektor.
CREATE TEMPORARY TABLE movie_review_embeddings AS ( SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, ( SELECT "This movie was fantastic" AS content UNION ALL SELECT "This was the best movie I've ever seen!!" AS content UNION ALL SELECT "This movie was just okay..." AS content UNION ALL SELECT "This movie was terrible." AS content ), STRUCT(TRUE AS flatten_json_output) ) ); WITH average_review_embedding AS ( SELECT ml_generate_embedding_result FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, (SELECT "This movie was average" AS content), STRUCT(TRUE AS flatten_json_output) ) ) SELECT base.content AS content, distance AS distance_to_average_review FROM VECTOR_SEARCH( TABLE movie_review_embeddings, "ml_generate_embedding_result", (SELECT ml_generate_embedding_result FROM average_review_embedding), distance_type=>"COSINE", top_k=>-1 ) ORDER BY distance_to_average_review;
Hasilnya adalah sebagai berikut:
+------------------------------------------+----------------------------+ | content | distance_to_average_review | +------------------------------------------+----------------------------+ | This movie was just okay... | 0.062789813467745592 | | This movie was fantastic | 0.18579561313064263 | | This movie was terrible. | 0.35707466240930985 | | This was the best movie I've ever seen!! | 0.41844932504542975 | +------------------------------------------+----------------------------+
Langkah berikutnya
- Pelajari cara menggunakan embedding teks dan gambar untuk melakukan penelusuran semantik teks ke gambar.
- Pelajari cara menggunakan embedding teks untuk penelusuran semantik dan retrieval-augmented generation (RAG).