הטמעת טקסט באמצעות מודלים של TensorFlow שעברו אימון מראש
במדריך הזה תלמדו איך ליצור הטמעות טקסט של NNLM, SWIVEL ו-BERT ב-BigQuery באמצעות מודלים של TensorFlow שאומנו מראש. הטמעה של טקסט היא ייצוג וקטורי צפוף של קטע טקסט, כך שאם שני קטעי טקסט דומים מבחינה סמנטית, ההטמעות שלהם קרובות זו לזו במרחב הווקטורי של ההטמעה.
מודלים של NNLM, SWIVEL ו-BERT
המודלים NNLM, SWIVEL ו-BERT שונים בגודל, בדיוק, בסקיילביליות ובעלות. כדי להחליט באיזה מודל להשתמש, אפשר להיעזר בטבלה הבאה:
| דגם | גודל המודל | מאפיין הטמעה | תרחיש שימוש | תיאור |
|---|---|---|---|---|
| NNLM | <150MB | 50 | ביטויים קצרים, חדשות, ציוצים, ביקורות | מודל שפה של רשת נוירונים |
| SWIVEL | <150MB | 20 | ביטויים קצרים, חדשות, ציוצים, ביקורות | Submatrix-wise Vector Embedding Learner |
| BERT | ~200MB | 768 | ביטויים קצרים, חדשות, ציוצים, ביקורות, פסקאות קצרות | ייצוגים דו-כיווניים של מקודד מטרנספורמרים |
במדריך הזה, מודלי NNLM ו-SWIVEL הם מודלים של TensorFlow שיובאו, ומודל BERT הוא מודל מרוחק ב-Gemini Enterprise Agent Platform.
ההרשאות הנדרשות
כדי ליצור את מערך הנתונים, צריך את ההרשאה
bigquery.datasets.createבממשק של ניהול הזהויות והרשאות הגישה (IAM).כדי ליצור את הקטגוריה, צריך הרשאת
storage.buckets.createIAM.כדי להעלות את המודל ל-Cloud Storage, אתם צריכים את הרשאות ה-IAM
storage.objects.createו-storage.objects.get.כדי ליצור את משאב החיבור, צריך את הרשאות ה-IAM הבאות:
bigquery.connections.createbigquery.connections.get
כדי לטעון את המודל ל-BigQuery ML, אתם צריכים את הרשאות ה-IAM הבאות:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
כדי להריץ הסקה, אתם צריכים את הרשאות ה-IAM הבאות:
bigquery.tables.getDataבטבלת האובייקטיםbigquery.models.getDataבמודלbigquery.jobs.create
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
- BigQuery: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the inference that you perform in BigQuery ML.
- Cloud Storage: You incur costs for the objects that you store in Cloud Storage.
- Gemini Enterprise Agent Platform: If you follow the instructions for generating the BERT model, then you incur costs for deploying the model to an endpoint.
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
מידע נוסף זמין במקורות המידע הבאים:
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery, BigQuery Connection, and Agent Platform API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery, BigQuery Connection, and Agent Platform API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
יצירת מערך נתונים
כדי ליצור מערך נתונים בשם tf_models_tutorial לאחסון המודלים שאתם יוצרים, בוחרים באחת מהאפשרויות הבאות:
SQL
משתמשים בהצהרה CREATE SCHEMA:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;
מחליפים את
PROJECT_IDבמזהה הפרויקט.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
במסוף Google Cloud , מפעילים את Cloud Shell.
כדי ליצור את מערך הנתונים, מריצים את הפקודה
bq mk:bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial
מחליפים את
PROJECT_IDבמזהה הפרויקט.
יצירה והעלאה של מודל ל-Cloud Storage
הוראות מפורטות יותר ליצירת הטמעות טקסט באמצעות מודלים של TensorFlow שאומנו מראש זמינות ב-נוטבוק של Colab. אחרת, בוחרים באחד מהמודלים הבאים:
NNLM
באמצעות pip מתקינים את ספריית
bigquery-ml-utils:pip install bigquery-ml-utilsיצירת מודל NNLM. קוד ה-Python הבא טוען מודל NNLM מ-TensorFlow Hub ומכין אותו ל-BigQuery:
from bigquery_ml_utils import model_generator import tensorflow_text # Establish an instance of TextEmbeddingModelGenerator. text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator() # Generate an NNLM model. text_embedding_model_generator.generate_text_embedding_model('nnlm', OUTPUT_MODEL_PATH)מחליפים את
OUTPUT_MODEL_PATHבנתיב לתיקייה מקומית שבה אפשר לאחסן את המודל באופן זמני.אופציונלי: מדפיסים את החתימה של המודל שנוצר:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])כדי להעתיק את המודל שנוצר מהתיקייה המקומית לקטגוריה של Cloud Storage, משתמשים ב-Google Cloud CLI:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursiveמחליפים את
BUCKET_PATHבשם של קטגוריה של Cloud Storage שאליה מעתיקים את המודל.
SWIVEL
באמצעות pip מתקינים את ספריית
bigquery-ml-utils:pip install bigquery-ml-utilsיצירת מודל SWIVEL. הקוד הבא ב-Python טוען מודל SWIVEL מ-TensorFlow Hub ומכין אותו ל-BigQuery:
from bigquery_ml_utils import model_generator import tensorflow_text # Establish an instance of TextEmbeddingModelGenerator. text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator() # Generate a SWIVEL model. text_embedding_model_generator.generate_text_embedding_model('swivel', OUTPUT_MODEL_PATH)מחליפים את
OUTPUT_MODEL_PATHבנתיב לתיקייה מקומית שבה אפשר לאחסן את המודל באופן זמני.אופציונלי: מדפיסים את החתימה של המודל שנוצר:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])כדי להעתיק את המודל שנוצר מהתיקייה המקומית לקטגוריה של Cloud Storage, משתמשים ב-Google Cloud CLI:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursiveמחליפים את
BUCKET_PATHבשם של קטגוריה של Cloud Storage שאליה מעתיקים את המודל.
BERT
באמצעות pip מתקינים את ספריית
bigquery-ml-utils:pip install bigquery-ml-utilsיצירת מודל BERT. קוד ה-Python הבא טוען מודל BERT מ-TensorFlow Hub ומכין אותו ל-BigQuery:
from bigquery_ml_utils import model_generator import tensorflow_text # Establish an instance of TextEmbeddingModelGenerator. text_embedding_model_generator = model_generator.TextEmbeddingModelGenerator() # Generate a BERT model. text_embedding_model_generator.generate_text_embedding_model('bert', OUTPUT_MODEL_PATH)מחליפים את
OUTPUT_MODEL_PATHבנתיב לתיקייה מקומית שבה אפשר לאחסן את המודל באופן זמני.אופציונלי: מדפיסים את החתימה של המודל שנוצר:
import tensorflow as tf reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH) print(reload_embedding_model.signatures["serving_default"])כדי להעתיק את המודל שנוצר מהתיקייה המקומית לקטגוריה של Cloud Storage, משתמשים ב-Google Cloud CLI:
gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/bert_model --recursiveמחליפים את
BUCKET_PATHבשם של קטגוריה של Cloud Storage שאליה מעתיקים את המודל.
טעינת המודל ל-BigQuery
בוחרים באחד מהמודלים הבאים:
NNLM
משתמשים בהצהרה CREATE MODEL:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
CREATE OR REPLACE MODEL
tf_models_tutorial.nnlm_modelOPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/nnlm_model/*');מחליפים את
BUCKET_NAMEבשם הקטגוריה שיצרתם קודם.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
SWIVEL
משתמשים בהצהרה CREATE MODEL:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
CREATE OR REPLACE MODEL
tf_models_tutorial.swivel_modelOPTIONS ( model_type = 'TENSORFLOW', model_path = 'gs://BUCKET_NAME/swivel_model/*');מחליפים את
BUCKET_NAMEבשם הקטגוריה שיצרתם קודם.לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BERT
כדי לטעון את מודל BERT ל-BigQuery, צריך לייבא את מודל BERT ל-Agent Platform, לפרוס את המודל לנקודת קצה של Agent Platform, ליצור חיבור ואז ליצור מודל מרוחק ב-BigQuery.
כדי לייבא את מודל BERT ל-Agent Platform, פועלים לפי השלבים הבאים:
במסוף Google Cloud , עוברים לדף Agent Platform (פלטפורמת הסוכנים) Model registry (מאגר מודלים).
לוחצים על ייבוא ומבצעים את הפעולות הבאות:
- בשדה Name (שם), מזינים
BERT. - בשדה Region, בוחרים אזור שתואם לאזור של קטגוריית Cloud Storage.
- בשדה Name (שם), מזינים
לוחצים על המשך, ואז מבצעים את הפעולות הבאות:
- בשדה Model framework version (גרסת מסגרת המודל), בוחרים באפשרות
2.8. - בשדה Model artifact location (מיקום ארטיפקט המודל), מזינים את הנתיב לקטגוריה של Cloud Storage שבה שמרתם את קובץ המודל. לדוגמה,
gs://BUCKET_PATH/bert_model.
- בשדה Model framework version (גרסת מסגרת המודל), בוחרים באפשרות
לוחצים על Import. אחרי שהייבוא יסתיים, המודל יופיע בדף Model registry.
כדי לפרוס את מודל BERT לנקודת קצה של Gemini Enterprise Agent Platform ולחבר אותו ל-BigQuery, פועלים לפי השלבים הבאים:
במסוף Google Cloud , עוברים לדף Agent Platform (פלטפורמת הסוכנים) Model registry (מאגר מודלים).
לוחצים על שם המודל.
לוחצים על פריסה ובדיקה.
לוחצים על Deploy to endpoint.
בשדה Endpoint name (שם נקודת הקצה), מזינים
bert_model_endpoint.לוחצים על Continue.
בוחרים את משאבי המחשוב.
לוחצים על פריסה.
יוצרים קישור למשאבים ב-Cloud של BigQuery ומעניקים גישה לחשבון השירות של הקישור.
כדי ליצור מודל מרוחק על סמך נקודת הקצה של Agent Platform, משתמשים בהצהרה CREATE MODEL:
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את ההצהרה הבאה בעורך השאילתות:
CREATE OR REPLACE MODEL
tf_models_tutorial.bert_modelINPUT(contentSTRING) OUTPUT(embeddingARRAY<FLOAT64>) REMOTE WITH CONNECTION `PROJECT_ID.CONNECTION_LOCATION.CONNECTION_ID` OPTIONS ( ENDPOINT = "https://ENDPOINT_LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/ENDPOINT_LOCATION/endpoints/ENDPOINT_ID");מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
CONNECTION_LOCATION: המיקום של החיבור ל-BigQuery -
CONNECTION_ID: המזהה של החיבור ל-BigQueryכשמציגים את פרטי החיבור במסוף Google Cloud , זה הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור, לדוגמה
projects/myproject/locations/connection_location/connections/myconnection -
ENDPOINT_LOCATION: המיקום של נקודת הקצה של Agent Platform. לדוגמה: us-central1. -
ENDPOINT_ID: המזהה של נקודת הקצה של המודל
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
יצירת הטבעות טקסט
בקטע הזה, תשתמשו בפונקציית ההסקה ML.PREDICT() כדי ליצור הטמעות טקסט של העמודה review ממערך הנתונים הציבורי bigquery-public-data.imdb.reviews. השאילתה מגבילה את הטבלה ל-500 שורות כדי לצמצם את כמות הנתונים שמעובדים.
NNLM
SELECT * FROM ML.PREDICT( MODEL `tf_models_tutorial.nnlm_model`, ( SELECT review AS content FROM `bigquery-public-data.imdb.reviews` LIMIT 500) );
התוצאה אמורה להיראות כך:
+-----------------------+----------------------------------------+ | embedding | content | +-----------------------+----------------------------------------+ | 0.08599445223808289 | Isabelle Huppert must be one of the... | | -0.04862852394580841 | | | -0.017750458791851997 | | | 0.8658871650695801 | | | ... | | +-----------------------+----------------------------------------+
SWIVEL
SELECT * FROM ML.PREDICT( MODEL `tf_models_tutorial.swivel_model`, ( SELECT review AS content FROM `bigquery-public-data.imdb.reviews` LIMIT 500) );
התוצאה אמורה להיראות כך:
+----------------------+----------------------------------------+ | embedding | content | +----------------------+----------------------------------------+ | 2.5952553749084473 | Isabelle Huppert must be one of the... | | -4.015787601470947 | | | 3.6275434494018555 | | | -6.045154333114624 | | | ... | | +----------------------+----------------------------------------+
BERT
SELECT * FROM ML.PREDICT( MODEL `tf_models_tutorial.bert_model`, ( SELECT review AS content FROM `bigquery-public-data.imdb.reviews` LIMIT 500) );
התוצאה אמורה להיראות כך:
+--------------+---------------------+----------------------------------------+ | embedding | remote_model_status | content | +--------------+---------------------+----------------------------------------+ | -0.694072425 | null | Isabelle Huppert must be one of the... | | 0.439208865 | | | | 0.99988997 | | | | -0.993487895 | | | | ... | | | +--------------+---------------------+----------------------------------------+
הסרת המשאבים
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.