בדף הזה מוסבר איך להשתמש ב-API של Vertex AI text embedding כדי ליצור, לאחסן ולעדכן הטמעות טקסט לנתונים שמאוחסנים במסדי נתונים של Spanner עם ניב GoogleSQL ובמסדי נתונים עם ניב PostgreSQL.
הטמעת טקסט היא ייצוג וקטורי של נתוני טקסט, והיא משמשת בדרכים רבות למציאת פריטים דומים. אתם נתקלים בהם בכל פעם שאתם מבצעים חיפוש ב-Google או רואים המלצות כשאתם קונים באינטרנט. כשיוצרים הטמעות של טקסט, מקבלים ייצוגים וקטוריים של טקסט טבעי כמערכים של מספרים ממשיים. המשמעות היא שלכל טקסט קלט מוקצה ייצוג מספרי. על ידי השוואה של המרחק המספרי בין ייצוגי הווקטור של שני קטעי טקסט, אפליקציה יכולה לקבוע את הדמיון בין הטקסט או האובייקטים שמיוצגים על ידי הטקסט.
באמצעות Vertex AI text embeddings API, אפשר ליצור הטבעת טקסט באמצעות AI גנרטיבי. במדריך הזה, תשתמשו במודל הטמעת הטקסט של Vertex AI כדי ליצור הטמעות טקסט לנתונים שמאוחסנים ב-Spanner.
מידע נוסף על הטמעות טקסט ומודלים נתמכים זמין במאמר בנושא קבלת הטמעות טקסט.
מטרה
במדריך הזה תלמדו איך:
- רישום של מודל הטמעת טקסט של Vertex AI בסכימת Spanner באמצעות הצהרות DDL.
- אפשר להפנות למודל הרשום באמצעות שאילתות SQL כדי ליצור הטמעות מנתונים שמאוחסנים ב-Spanner.
תמחור
במדריך הזה נעשה שימוש ברכיבים של Google Cloudשחלים עליהם חיובים, כולל:
- Spanner
- Vertex AI
מידע נוסף על העלויות של Spanner מופיע בדף תמחור של Spanner.
מידע נוסף על העלויות של Vertex AI מופיע בדף התמחור של Vertex AI.
יצירה ושמירה של הטמעות טקסט
יצירת ההטמעות עשויה להימשך זמן מה, בהתאם למודל שבו אתם משתמשים. בעומסי עבודה שרגישים יותר לביצועים, מומלץ להימנע מיצירת הטמעות בעסקאות של קריאה וכתיבה. במקום זאת, אפשר ליצור את ההטמעות בטרנזקציה לקריאה בלבד באמצעות דוגמאות ה-SQL הבאות.
GoogleSQL
רישום של מודל הטמעות טקסט ב-Spanner
ב-GoogleSQL, צריך לרשום מודל לפני שמשתמשים בו עם הפונקציה ML.PREDICT. כדי לרשום את מודל הטמעת הטקסט של Vertex AI במסד נתונים של Spanner, מריצים את ההצהרה הבאה של DDL:
CREATE MODEL MODEL_NAME
INPUT(
content STRING(MAX),
-- Optional: For models that support specifying task type.
task_type 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/$MODEL_NAME'
);
מחליפים את מה שכתוב בשדות הבאים:
-
MODEL_NAME: השם של מודל הטמעת הטקסט של Vertex AI -
PROJECT: הפרויקט שמארח את נקודת הקצה של Vertex AI -
LOCATION: המיקום של נקודת הקצה של Vertex AI
מערכת Spanner מעניקה את ההרשאות המתאימות באופן אוטומטי. אם לא, כדאי לעיין במאמר בנושא בקרת גישה לנקודות קצה של מודלים.
אי אפשר לגלות ולבדוק סכימות במודלים של AI גנרטיבי. עליך לספק סעיפים של INPUT ושל OUTPUT שתואמים לסכימת המודלים. כאן אפשר לראות את הסכימה המלאה של מודל הטמעת הטקסט.
יצירת הטמעות טקסט
כדי ליצור הטמעות, מעבירים קטע טקסט ישירות לפונקציה ML.PREDICT באמצעות ה-SQL הבא:
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)
);
כדי לציין סוג משימה ומאפייני פלט:
UPDATE Products p
SET description_embedding = (
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT p.description as content, "RETRIEVAL_DOCUMENT" as task_type),
STRUCT(768 AS outputDimensionality)
));
SELECT p.product_id, p.name, p.description, COSINE_DISTANCE(
p.description_embedding,
(
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @user_query as content, "RETRIEVAL_QUERY" as task_type),
STRUCT(768 AS outputDimensionality)
)
)
) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;
אחסון הטמעות טקסט
אחרי יצירת ההטמעות בעסקה לקריאה בלבד, מאחסנים אותן ב-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
יצירת הטמעות טקסט
כדי ליצור הטמעות, מעבירים קטע טקסט ישירות לפונקציה spanner.ML_PREDICT_ROW באמצעות ה-SQL הבא:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Vertex AI -
LOCATION: המיקום של נקודת הקצה של Vertex AI -
MODEL_NAME: השם של מודל הטמעת הטקסט של Vertex AI
כדי ליצור הטמעות לנתונים שמאוחסנים בטבלה, משתמשים ב-SQL הבא:
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
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_NAME: השם של מודל הטמעת הטקסט של Vertex AI
כדי לציין סוג משימה ומאפייני פלט:
UPDATE Products p
SET description_embedding = spanner.float64_array(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT(
'instances', JSONB_BUILD_ARRAY(
JSONB_BUILD_OBJECT(
'content', p.description,
'task_type', 'RETRIEVAL_DOCUMENT'
)
),
'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
)
)->'predictions'->0->'embeddings'->'values'
);
SELECT p.product_id, p.name, p.description, spanner.COSINE_DISTANCE(
p.description_embedding,
spanner.float64_array(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT(
'instances', JSONB_BUILD_ARRAY(
JSONB_BUILD_OBJECT(
'content', $1,
'task_type', 'RETRIEVAL_QUERY'
)
),
'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
)
)->'predictions'->0->'embeddings'->'values'
)
) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Vertex AI -
LOCATION: המיקום של נקודת הקצה של Vertex AI -
MODEL_NAME: השם של מודל הטמעת הטקסט של Vertex AI
אחסון הטמעות טקסט
אחרי יצירת ההטמעות בעסקה לקריאה בלבד, מאחסנים אותן ב-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/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT: הפרויקט שמארח את נקודת הקצה של Vertex AI -
LOCATION: המיקום של נקודת הקצה של Vertex AI -
MODEL_NAME: השם של מודל הטמעת הטקסט של Vertex AI
עדכון הטמעות טקסט
כדי לעדכן את ההטמעות או להטמיע נתונים בזמן אמת, משתמשים בהצהרת 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: השם של מודל הטמעת הטקסט של Vertex AI
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = spanner.FLOAT32_ARRAY(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
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_NAME: השם של מודל הטמעת הטקסט של Vertex AI
המאמרים הבאים
- איך משתמשים בחיפוש וקטורי ב-Vertex AI כדי לחפש פריטים דומים מבחינה סמנטית.
- בקורס המהיר שלנו בנושא הטמעות אפשר לקרוא מידע נוסף על למידת מכונה והטמעות.
- מידע נוסף על מודלים להטמעת טקסט ב-Vertex AI