本頁面說明如何使用 Vertex AI 文字嵌入 API,針對儲存在 Spanner for GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫中的資料,產生、儲存及更新文字嵌入。
文字嵌入是文字資料的向量表示法,可用於多種方式找出相似項目。每次完成 Google 搜尋或在線上購物時看到推薦內容,都會與這些內容互動。建立文字嵌入項目時,您會以浮點數陣列的形式,取得自然文字的向量表示法。也就是說,系統會為您輸入的所有文字指派數值表示法。應用程式可以比較兩段文字向量表示法之間的數字距離,藉此判斷文字之間的相似度,或文字所代表的物件。
您可以使用 Vertex AI 文字嵌入 API 搭配生成式 AI 建立文字嵌入。您可以透過本教學課程,為儲存在 Spanner 和 Vertex AI 嵌入模型 (例如 textembedding-gecko
模型) 中的資料產生文字嵌入資料。
如要進一步瞭解嵌入,請參閱「取得文字嵌入」。
目標
在本教學課程中,您將瞭解以下內容:
- 使用 DDL 陳述式,在 Spanner 結構定義中註冊 Vertex AI
textembedding-gecko
模型。 - 使用 SQL 查詢參照已註冊的模型,從 Spanner 中儲存的資料產生嵌入資料。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- Spanner
- Vertex AI
如要進一步瞭解 Spanner 費用,請參閱 Spanner 定價頁面。
如要進一步瞭解 Vertex AI 費用,請參閱 Vertex AI 定價頁面。
產生並儲存文字嵌入
產生嵌入資料可能需要一段時間,具體時間長短取決於您使用的模型。對於效能較敏感的工作負載,最佳做法是避免在讀寫交易中產生嵌入物。請改為使用下列 SQL 範例,在唯讀交易中產生嵌入資料。
GoogleSQL
在 Spanner 中註冊文字嵌入模型
在 GoogleSQL 中,您必須先註冊模型,才能搭配 ML.PREDICT
函式使用。如要在 Spanner 資料庫中註冊 textembedding-gecko
模型,請執行下列 DDL 陳述式:
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$MODEL_VERSION'
);
取代下列內容:
MODEL_NAME
:嵌入模型名稱PROJECT
:代管 Vertex AI 端點的專案LOCATION
:Vertex AI 端點的位置MODEL_VERSION
:textembedding-gecko
嵌入模型的版本
Spanner 會自動授予適當的權限。如果不是,請檢查模型端點存取權控制。
結構定義探索和驗證功能不適用於生成式 AI 模型。您必須提供與模型結構定義相符的 INPUT
和 OUTPUT
子句。如需 Gecko 模型的完整結構定義,請參閱「取得文字嵌入資料」。
產生文字嵌入
如要產生嵌入,請使用下列 SQL 將文字直接傳遞至 ML.PREDICT
函式:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
如要為儲存在資料表中的資料產生嵌入項目,請使用下列 SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
儲存文字嵌入
在唯讀交易中產生嵌入資料後,請將這些資料儲存在 Spanner 中,以便透過作業資料進行管理。如要儲存嵌入資料,請使用讀取/寫入交易。
對於不太在意效能的工作負載,您可以在讀寫交易中使用下列 SQL 產生並插入嵌入項目:
CREATE TABLE Products(
id INT64 NOT NULL,
description STRING(MAX),
embeddings ARRAY<FLOAT32>,
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @Description as content)
);
PostgreSQL
產生文字嵌入
如要產生嵌入,請使用下列 SQL 將文字直接傳遞至 spanner.ML_PREDICT_ROW
函式:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
取代下列內容:
PROJECT
:代管 Vertex AI 端點的專案LOCATION
:Vertex AI 端點的位置MODEL_VERSION
:textembedding-gecko
嵌入模型的版本
如要為儲存在資料表中的資料產生嵌入項目,請使用下列 SQL:
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> `predictions`->0->`embeddings`->`values``
FROM Products;
取代下列內容:
PROJECT
:代管 Vertex AI 端點的專案LOCATION
:Vertex AI 端點的位置MODEL_VERSION
:textembedding-gecko
嵌入模型的版本
儲存文字嵌入
在唯讀交易中產生嵌入資料後,請將這些資料儲存在 Spanner 中,以便透過作業資料進行管理。如要儲存嵌入資料,請使用讀取/寫入交易。
對於不太在意效能的工作負載,您可以在讀寫交易中使用下列 SQL 產生並插入嵌入項目:
CREATE TABLE Products (
id INT8 NOT NULL,
description TEXT,
embeddings REAL[],
PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
取代下列內容:
PROJECT
:代管 Vertex AI 端點的專案LOCATION
:Vertex AI 端點的位置MODEL_VERSION
:textembedding-gecko
嵌入模型的版本
更新文字嵌入
如要更新嵌入資料或即時擷取資料,請使用 UPDATE
(GoogleSQL 和 PostgreSQL) 陳述式。
如要更新上述範例中的 Products
資料表,請使用下列 SQL:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
更改下列內容:
MODEL_NAME
:嵌入模型名稱
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = spanner.FLOAT32_ARRAY(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/textembedding-gecko$MODEL_VERSION',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
) -> 'predictions'->0->'embeddings'->'values')
WHERE
id = $2;
取代下列內容:
PROJECT
:代管 Vertex AI 端點的專案LOCATION
:Vertex AI 端點的位置MODEL_VERSION
:textembedding-gecko
嵌入模型的版本
後續步驟
- 瞭解如何使用 Vertex AI Vector Search 搜尋語意相似的項目。
- 如要進一步瞭解機器學習和嵌入,請參閱嵌入速成課程。