Penyematan teks adalah representasi vektor dari data teks dan digunakan dalam banyak cara untuk menemukan item serupa. Anda berinteraksi dengan mereka setiap kali menyelesaikan Google Penelusuran atau melihat rekomendasi saat berbelanja {i>online<i}. Saat membuat embedding teks, Anda akan mendapatkan representasi vektor teks alami sebagai array bilangan floating point. Ini berarti semua teks input diberikan sebagai representasi numerik. Dengan membandingkan jarak numerik antara representasi vektor dua bagian teks, aplikasi dapat menentukan kesamaan antara teks atau objek yang diwakili oleh teks.
Dengan Vertex AI text-embeddings API, Anda dapat membuat
penyematan teks dengan AI Generatif. Dengan
tutorial ini, Anda dapat membuat penyematan teks untuk data yang disimpan dalam
model penyematan Spanner dan Vertex AI seperti
model textembedding-gecko
.
Untuk mempelajari embedding lebih lanjut, baca artikel Mendapatkan embeddings teks.
Tujuan
Dalam tutorial ini, Anda akan mempelajari cara:
- Daftarkan model
textembedding-gecko
Vertex AI dalam skema Spanner menggunakan pernyataan DDL. - Referensikan model terdaftar menggunakan kueri SQL untuk menghasilkan embedding dari data yang disimpan di Spanner.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:
- Spanner
- Vertex AI
Untuk informasi selengkapnya tentang biaya Spanner, lihat halaman Harga Spanner.
Untuk mengetahui informasi selengkapnya tentang biaya Vertex AI, lihat halaman harga Vertex AI.
Membuat dan menyimpan embedding teks
Bergantung pada model yang Anda gunakan, menghasilkan embeddings mungkin memerlukan waktu beberapa saat. Untuk beban kerja yang lebih sensitif terhadap performa, praktik terbaiknya adalah menghindari pembuatan embedding dalam transaksi baca-tulis. Sebagai gantinya, buat embeddings dalam transaksi hanya baca menggunakan contoh SQL berikut.
GoogleSQL
Mendaftarkan model embedding teks di Spanner
Di GoogleSQL, Anda harus mendaftarkan model sebelum menggunakannya dengan fungsi ML.PREDICT
. Untuk mendaftarkan model textembedding-gecko
dalam
database Spanner, execute pernyataan DDL berikut:
CREATE MODEL MODEL_NAME
INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko@002'
);
Ganti kode berikut:
MODEL_NAME
: nama model embeddingPROJECT
: project yang menghosting endpoint Vertex AILOCATION
: lokasi endpoint Vertex AI
Spanner memberikan izin yang sesuai secara otomatis. Jika tidak, tinjau kontrol akses endpoint model.
Penemuan dan validasi skema tidak tersedia untuk model AI Generatif. Anda harus menyediakan klausa INPUT
dan OUTPUT
yang cocok
dengan skema model. Untuk skema lengkap model Gecko, lihat
Mendapatkan embedding teks.
Membuat embedding teks
Untuk menghasilkan embedding, teruskan potongan teks langsung ke fungsi ML.PREDICT
menggunakan SQL berikut:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Untuk menghasilkan embeddings untuk data yang disimpan dalam tabel, gunakan SQL berikut:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Menyimpan embedding teks
Setelah membuat embeddings dalam transaksi hanya baca, simpan embedding dalam Spanner sehingga dapat dikelola dengan data operasional Anda. Untuk menyimpan embeddings, gunakan transaksi baca-tulis.
Untuk beban kerja yang tidak terlalu sensitif terhadap performa, Anda dapat membuat dan menyisipkan embeddings dengan SQL berikut dalam transaksi baca-tulis:
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @Description as content)
);
PostgreSQL
Membuat embedding teks
Untuk menghasilkan embedding, teruskan potongan teks langsung ke fungsi spanner.ML_PREDICT_ROW
menggunakan SQL berikut:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko@002'::text,
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
Ganti kode berikut:
PROJECT
: the project IDLOCATION
: wilayah tempat Anda menggunakan Vertex AI
Untuk menghasilkan embeddings untuk data yang disimpan dalam tabel, gunakan SQL berikut:
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko@002'::text, JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> `predictions`->0->`embeddings`->`values``
FROM Products;
Ganti kode berikut:
PROJECT
: the project IDLOCATION
: wilayah tempat Anda menggunakan Vertex AI
Menyimpan embedding teks
Setelah membuat embeddings dalam transaksi hanya baca, simpan embedding dalam Spanner sehingga dapat dikelola dengan data operasional Anda. Untuk menyimpan embeddings, gunakan transaksi baca-tulis.
Untuk beban kerja yang tidak terlalu sensitif terhadap performa, Anda dapat membuat dan menyisipkan embeddings dengan SQL berikut dalam transaksi baca-tulis:
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko@002'::text,
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))) -> 'predictions'->0->'embeddings'->'values'
)
Ganti kode berikut:
PROJECT
: the project IDLOCATION
: wilayah tempat Anda menggunakan Vertex AI
Memperbarui embedding teks
Untuk memperbarui embedding Anda atau menyerap data secara real time, gunakan pernyataan UPDATE
(GoogleSQL dan PostgreSQL).
Untuk mengupdate tabel Products
di contoh sebelumnya, gunakan SQL berikut:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Ganti kode berikut:
MODEL_NAME
: nama model embedding
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = ARRAY(
SELECT
UNNEST::real
FROM
UNNEST((
SELECT
spanner.JSONB_QUERY_ARRAY(spanner.ML_PREDICT_ROW('projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko',
JSONB_BUILD_OBJECT('instances',
JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content',
$1)))) -> 'predictions'->0->'embeddings'->'values'))))
WHERE
id = $2;
Ganti kode berikut:
PROJECT
: the project IDLOCATION
: wilayah tempat Anda menggunakan Vertex AI
Langkah selanjutnya
- Pelajari cara menggunakan Vertex AI Vector Search untuk menelusuri item yang mirip secara semantik.
- Pelajari lebih lanjut machine learning dan embedding di kursus singkat tentang embedding.