יצירת הטמעה אוטונומית
במאמר הזה מוסבר איך להשתמש ביצירה אוטונומית של הטמעות לנתונים שלכם, שמאפשרת ל-BigQuery לתחזק עמודה של הטמעות בטבלה על סמך עמודת מקור. כשמוסיפים נתונים לעמודת המקור או משנים אותם, BigQuery יוצר או מעדכן באופן אוטומטי את עמודת ההטמעה של הנתונים האלה באמצעות מודל הטמעה של Vertex AI. האפשרות הזו שימושית אם רוצים לאפשר ל-BigQuery לתחזק את ההטמעות כשנתוני המקור מתעדכנים באופן קבוע.
הטמעות שימושיות באפליקציות מודרניות של AI גנרטיבי, כמו Retrieval Augmented Generation (RAG), אבל יכול להיות שיהיה מורכב ליצור, לנהל ולשאול אותן. אתם יכולים להשתמש ביצירה אוטונומית של הטמעה כדי לפשט את התהליך של יצירה, תחזוקה ושאילתות של הטמעות לשימוש בחיפושים של דמיון ובאפליקציות אחרות של AI גנרטיבי.
לדוגמה, אפשר להשתמש בשאילתות דומות לאלה כדי ליצור טבלה עם הטמעה אוטונומית של יצירת וקטורים, להוסיף נתונים ואז לבצע חיפוש סמנטי:
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');
לפני שמתחילים
כדי להפעיל יצירה אוטונומית של הטמעה בטבלה, צריכות להיות לכם ההרשאות והחיבור הדרושים, ועליכם להפעיל את Vertex AI API בפרויקט.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות בשביל להפעיל יצירה אוטונומית של הטמעה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
כדי להשתמש במשאב חיבור:
BigQuery Connections User (
roles/bigquery.connectionUser) on the connection -
כדי ליצור טבלה:
BigQuery Data Editor (
roles/bigquery.dataEditor) on the table -
צריך להעניק לחשבון השירות של החיבור את התפקיד הבא כדי שתהיה לו גישה למודלים שמארחים בנקודות קצה של Vertex AI:
משתמש Vertex AI (
roles/aiplatform.user) בפרויקט שבו מוגדר החיבור
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
יצירת חיבור והענקת הרשאה לחשבון שירות
כדי להפעיל יצירה אוטונומית של הטמעה בטבלה, צריך ליצור חיבור למשאב Cloud.
לאחר מכן, מקצים את התפקיד Vertex AI User (roles/aiplatform.user) לחשבון השירות שנוצר כשיוצרים את החיבור.
יצירת טבלה עם הטמעה אוטונומית
אפשר להשתמש ביצירת הטמעה אוטונומית כדי ליצור הטמעות באמצעות הפונקציה AI.EMBED בהצהרת 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)
);
מחליפים את מה שכתוב בשדות הבאים:
-
DATASET_ID: השם של מערך הנתונים שבו רוצים ליצור את הטבלה. -
TABLE: שם הטבלה שעליה רוצים ליצור הטמעה אוטונומית. -
COLUMN, ...: כל העמודות שהטבלה צריכה להכיל, בנוסף לעמודה שרוצים להטמיע באופן אוטומטי. -
STRING_COL: השם של העמודהSTRINGשרוצים להטמיע באופן אוטומטי. -
EMBEDDING_COL_NAME: השם של עמודת ההטמעה שנוצרה באופן אוטומטי. -
CONNECTION_ID: ערךSTRINGשמכיל את השם של חיבור לשימוש, כמוmy_project.us.example_connection. צריך להעניק לחשבון השירות של החיבור את התפקיד Vertex AI User בפרויקט שבו יוצרים את הטבלה. -
ENDPOINT: ערךSTRINGשמציין נקודת קצה של מודל הטמעת טקסט נתמך ב-Vertex AI, שמשמשת ליצירת הטמעת הטקסט. ערך נקודת הקצה שאתם מציינים צריך לכלול את גרסת המודל, לדוגמהtext-embedding-005. אם מציינים את שם המודל במקום כתובת URL, מערכת BigQuery ML מזהה את המודל באופן אוטומטי ומשתמשת בנקודת הקצה המלאה של המודל.
תהליך יצירת ההטמעה ברקע מתחיל זמן קצר אחרי שיוצרים את הטבלה או אחרי שמעדכנים את הנתונים בעמודת המקור.
כדי לעקוב אחרי התקדמות היצירה של ההטמעה, אפשר להשתמש בשאילתה דומה לזו:
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;
אחרי שיוצרים את הטבלה עם ההטמעות, אפשר ליצור אינדקס וקטורי בעמודה STRUCT שמכילה את ההטמעה שנוצרה באופן אוטומטי.
דוגמה
נניח שאתם קמעונאים גדולים שמוכרים הרבה מוצרים שונים. יש לכם טבלה עם שמות ותיאורים של מוצרים, ואתם רוצים לעזור ללקוחות למצוא את המוצרים שהם מחפשים. השאילתות הבאות מראות איך להגדיר יצירה אוטונומית של הטמעות כדי לעזור בחיפוש סמנטי של תיאורי המוצרים.
קודם כל יוצרים מערך נתונים:
CREATE SCHEMA mydataset;
לאחר מכן, יוצרים טבלה עם הפעלת יצירת הטמעה אוטונומית כדי להכיל את פרטי המוצרים. העמודה שנוצרת באופן אוטומטי נקראת description_embedding והיא מבוססת על העמודה 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 )
);
השאילתה הבאה מוסיפה לטבלה שמות ותיאורים של מוצרים.
לא מציינים ערך לdescription_embedding כי הוא נוצר באופן אוטומטי.
# 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.");
אפשר גם ליצור אינדקס וקטורי בטבלה כדי להאיץ את החיפוש.
אינדקס וקטורי דורש יותר משלוש שורות, ולכן השאילתה הבאה מניחה שהוספתם נתונים נוספים. בכל פעם שמוסיפים נתונים, העמודה description_embedding מתעדכנת אוטומטית.
CREATE VECTOR INDEX my_index
ON mydataset.products(description_embedding)
OPTIONS(index_type = 'IVF');
לבסוף, אפשר להשתמש בפונקציה AI.SEARCH כדי לבצע חיפוש סמנטי של המוצרים שלכם ולמצוא צעצוע כיפי:
# 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 |
+------------------+----------------------------------------------+----------------------*/
קבלת מידע על עמודות של הטמעה שנוצרו באופן אוטומטי
כדי לוודא שעמודה היא עמודת הטמעה שנוצרה באופן אוטומטי, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.COLUMNS.
השאילתה הבאה מציגה מידע על כל עמודות ההטמעה שנוצרו באופן אוטומטי:
SELECT *
FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.COLUMNS
WHERE is_generated = 'ALWAYS';
בשדה generation_expression מוצגת הקריאה לפונקציה AI.EMBED שמשמשת ליצירת ההטמעות בעמודה.
שימוש בהזמנה שלכם
כברירת מחדל, BigQuery משתמש במשבצות זמן על פי דרישה כדי לטפל בעיבוד שנדרש לתחזוקת עמודת ההטמעה שנוצרה. כדי להבטיח ביצועים צפויים ועקביים, אפשר ליצור הזמנה ולהגדיר את job_type לערך BACKGROUND. אם יש הזמנה ברקע, BigQuery משתמש בה כדי לשמור על עמודת ההטמעה שנוצרה.
פתרון בעיות
עמודת ההטמעה שנוצרת מכילה שני שדות: result ו-status.
אם מתרחשת שגיאה כש-BigQuery מנסה ליצור הטמעה לשורה מסוימת בטבלה, השדה result הוא NULL והשדה status מתאר את השגיאה. לדוגמה, אם עמודת המקור היא NULL, ההטמעה של result היא גם NULL והסטטוס הוא NULL value is not supported for embedding generation.
שגיאה חמורה יותר עלולה לעצור את יצירת ההטמעה. במקרה כזה, אפשר לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.JOBS כדי למצוא את עבודת הרקע ולבדוק את המידע בשדה error_result.
מזהה המשימה של משימת הטמעה ברקע מתחיל בקידומת gc_. לדוגמה, השאילתה הבאה מחלצת את כל המשימות ברקע שהתוצאה שלהן לא כוללת את השגיאה 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;
מעקב אחרי עלויות
יצירת הטמעה אוטונומית שולחת בקשות ל-Vertex AI, ועלולות להיות לכך עלויות. כדי לעקוב אחרי העלויות ב-Vertex AI שנובעות מעבודות הטמעה ברקע, צריך לבצע את השלבים הבאים:
- הצגת דוחות החיוב בחיוב ב-Cloud.
להשתמש במסננים כדי לצמצם את התוצאות.
בשדה 'שירותים', בוחרים באפשרות Vertex AI.
כדי לראות את החיובים על עבודה ספציפית, מסננים לפי תווית.
מגדירים את המפתח ל-
bigquery_ml_jobואת הערך למזהה המשרה של משימת ההטמעה. לכל משימות ההטמעה ברקע יש קידומת שלgc_.
יכול להיות שיחלפו עד 24 שעות עד שחלק מהחיובים יופיעו בחיוב ב-Cloud.
מגבלות
- כל טבלה תומכת בעמודת הטמעה אחת לכל היותר שנוצרת באופן אוטומטי.
- פעולות DML בו-זמניות עלולות לגרום לעיכובים ולכשלים זמניים ביצירת ההטמעה. כדי לשפר את הביצועים ולהפחית את העלויות, מומלץ להחדיר נתונים באצוות ולהימנע מעדכוני DML תכופים.
- אם אתם משתמשים ב-BigQuery Storage Write API כדי להטמיע נתונים, יכול להיות שיהיו עיכובים מסוימים לפני שתתחיל יצירת ההטמעה.
- כשמציגים את הסכימה של טבלה באמצעות Google Cloud המסוף, הפקודה
bq showאו השדהddlבתצוגהINFORMATION_SCHEMA.TABLES, לא מצוין אם עמודה נוצרה באופן אוטומטי. - אי אפשר להוסיף עמודות של הטמעה שנוצרו לטבלה קיימת באמצעות
ALTER TABLE ADD COLUMN. - אם יוצרים עותק, שיבוט או תמונת מצב של טבלה שיש בה עמודה של הטמעה שנוצרה, רק הנתונים מועתקים. הגדרת היצירה לא חלה על הטבלה החדשה, ועדכונים בעמודת המקור של הטבלה החדשה לא יובילו להטמעות חדשות.
- אם משחזרים מטבלה שהופעלה בה יצירה אוטונומית של הטמעה מתמונת מצב, הגדרת יצירת ההטמעה לא משוחזרת.
- אפשר ליצור עמודות של הטמעות גנרטיביות רק באמצעות SQL. אי אפשר להשתמש בפקודות
bq mkאוbq updateכדי ליצור עמודות של הטמעות שנוצרו. - עמודת המקור של העמודה שנוצרה חייבת להיות עמודה מסוג
STRING. אחרי שיוצרים את עמודת ההטמעה שנוצרה, חלות המגבלות הבאות:
- אי אפשר להשמיט או לשנות את השם של עמודת המקור, אבל אפשר להשמיט או לשנות את השם של עמודת ההטמעה שנוצרה. אם משמיטים את עמודת ההטמעה, אפשר להשמיט או לשנות את השם של עמודת המקור.
- אי אפשר לשנות את סוג הנתונים של עמודת המקור או של עמודת ההטמעה שנוצרה.
אי אפשר לציין ערכי ברירת מחדל לעמודות של הטמעה שנוצרות באופן אוטומטי.
אי אפשר לכתוב ישירות לעמודות של הטמעות שנוצרו באמצעות השיטות הבאות:
- DML
- כתיבה בסטרימינג
bq insertbq copy -a
טבלאות עם עמודות של הטמעה שנוצרו לא תומכות בכללי מדיניות אבטחה ברמת העמודה, כמו תגי מדיניות.
כשמפעילים פונקציית חיפוש, כמו
VECTOR_SEARCHאוAI.SEARCH, החיפוש מדלג על שורות עם הטמעות חסרות בטבלת הבסיס.אי אפשר ליצור אינדקס וקטורי מחולק בטבלה שמופעל בה יצירה אוטונומית של הטמעה.
אם יוצרים אינדקס וקטורי בעמודת ההטמעה שנוצרה באופן אוטומטי, האימון של האינדקס מתחיל אחרי שלפחות 80% מהשורות יצרו הטמעות. אפשר להשתמש בשאילתה הבאה כדי לבדוק איזה אחוז מההטמעות בטבלה נוצר:
SELECT COUNTIF(description_embedding IS NOT NULL AND description_embedding.status = '') * 100.0 / COUNT(*) AS percent FROM PROJECT_ID.DATASET_ID.TABLE;