הטמעת טקסט באמצעות מודלים של 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.create
    • bigquery.connections.get
  • כדי לטעון את המודל ל-BigQuery ML, אתם צריכים את הרשאות ה-IAM הבאות:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.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 ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

מידע נוסף זמין במקורות המידע הבאים:

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

יצירת מערך נתונים

כדי ליצור מערך נתונים בשם tf_models_tutorial לאחסון המודלים שאתם יוצרים, בוחרים באחת מהאפשרויות הבאות:

SQL

משתמשים בהצהרה CREATE SCHEMA:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    CREATE SCHEMA `PROJECT_ID.tf_models_tutorial`;

    מחליפים את PROJECT_ID במזהה הפרויקט.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

  2. כדי ליצור את מערך הנתונים, מריצים את הפקודה bq mk:

    bq mk --dataset --location=us PROJECT_ID:tf_models_tutorial

    מחליפים את PROJECT_ID במזהה הפרויקט.

יצירה והעלאה של מודל ל-Cloud Storage

הוראות מפורטות יותר ליצירת הטמעות טקסט באמצעות מודלים של TensorFlow שאומנו מראש זמינות ב-נוטבוק של Colab. אחרת, בוחרים באחד מהמודלים הבאים:

NNLM

  1. באמצעות pip מתקינים את ספריית bigquery-ml-utils:

    pip install bigquery-ml-utils
    
  2. יצירת מודל 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 בנתיב לתיקייה מקומית שבה אפשר לאחסן את המודל באופן זמני.

  3. אופציונלי: מדפיסים את החתימה של המודל שנוצר:

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. כדי להעתיק את המודל שנוצר מהתיקייה המקומית לקטגוריה של Cloud Storage, משתמשים ב-Google Cloud CLI:

    gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/nnlm_model --recursive
    

    מחליפים את BUCKET_PATH בשם של קטגוריה של Cloud Storage שאליה מעתיקים את המודל.

SWIVEL

  1. באמצעות pip מתקינים את ספריית bigquery-ml-utils:

    pip install bigquery-ml-utils
    
  2. יצירת מודל 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 בנתיב לתיקייה מקומית שבה אפשר לאחסן את המודל באופן זמני.

  3. אופציונלי: מדפיסים את החתימה של המודל שנוצר:

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. כדי להעתיק את המודל שנוצר מהתיקייה המקומית לקטגוריה של Cloud Storage, משתמשים ב-Google Cloud CLI:

    gcloud storage cp OUTPUT_MODEL_PATH gs://BUCKET_PATH/swivel_model --recursive
    

    מחליפים את BUCKET_PATH בשם של קטגוריה של Cloud Storage שאליה מעתיקים את המודל.

BERT

  1. באמצעות pip מתקינים את ספריית bigquery-ml-utils:

    pip install bigquery-ml-utils
    
  2. יצירת מודל 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 בנתיב לתיקייה מקומית שבה אפשר לאחסן את המודל באופן זמני.

  3. אופציונלי: מדפיסים את החתימה של המודל שנוצר:

    import tensorflow as tf
    
    reload_embedding_model = tf.saved_model.load(OUTPUT_MODEL_PATH)
    print(reload_embedding_model.signatures["serving_default"])
    
  4. כדי להעתיק את המודל שנוצר מהתיקייה המקומית לקטגוריה של 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:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    CREATE OR REPLACE MODEL tf_models_tutorial.nnlm_model
    OPTIONS (
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/nnlm_model/*');

    מחליפים את BUCKET_NAME בשם הקטגוריה שיצרתם קודם.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

SWIVEL

משתמשים בהצהרה CREATE MODEL:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    CREATE OR REPLACE MODEL tf_models_tutorial.swivel_model
    OPTIONS (
      model_type = 'TENSORFLOW',
      model_path = 'gs://BUCKET_NAME/swivel_model/*');

    מחליפים את BUCKET_NAME בשם הקטגוריה שיצרתם קודם.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BERT

כדי לטעון את מודל BERT ל-BigQuery, צריך לייבא את מודל BERT ל-Agent Platform, לפרוס את המודל לנקודת קצה של Agent Platform, ליצור חיבור ואז ליצור מודל מרוחק ב-BigQuery.

כדי לייבא את מודל BERT ל-Agent Platform, פועלים לפי השלבים הבאים:

  1. במסוף Google Cloud , עוברים לדף Agent Platform (פלטפורמת הסוכנים) Model registry (מאגר מודלים).

    כניסה למרשם המודלים

  2. לוחצים על ייבוא ומבצעים את הפעולות הבאות:

    • בשדה Name (שם), מזינים BERT.
    • בשדה Region, בוחרים אזור שתואם לאזור של קטגוריית Cloud Storage.
  3. לוחצים על המשך, ואז מבצעים את הפעולות הבאות:

    • בשדה Model framework version (גרסת מסגרת המודל), בוחרים באפשרות 2.8.
    • בשדה Model artifact location (מיקום ארטיפקט המודל), מזינים את הנתיב לקטגוריה של Cloud Storage שבה שמרתם את קובץ המודל. לדוגמה, gs://BUCKET_PATH/bert_model.
  4. לוחצים על Import. אחרי שהייבוא יסתיים, המודל יופיע בדף Model registry.

כדי לפרוס את מודל BERT לנקודת קצה של Gemini Enterprise Agent Platform ולחבר אותו ל-BigQuery, פועלים לפי השלבים הבאים:

  1. במסוף Google Cloud , עוברים לדף Agent Platform (פלטפורמת הסוכנים) Model registry (מאגר מודלים).

    כניסה למרשם המודלים

  2. לוחצים על שם המודל.

  3. לוחצים על פריסה ובדיקה.

  4. לוחצים על Deploy to endpoint.

  5. בשדה Endpoint name (שם נקודת הקצה), מזינים bert_model_endpoint.

  6. לוחצים על Continue.

  7. בוחרים את משאבי המחשוב.

  8. לוחצים על פריסה.

  9. יוצרים קישור למשאבים ב-Cloud של BigQuery ומעניקים גישה לחשבון השירות של הקישור.

כדי ליצור מודל מרוחק על סמך נקודת הקצה של Agent Platform, משתמשים בהצהרה CREATE MODEL:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    CREATE OR REPLACE MODEL tf_models_tutorial.bert_model
    INPUT(content STRING)
    OUTPUT(embedding ARRAY<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: המזהה של נקודת הקצה של המודל

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

יצירת הטבעות טקסט

בקטע הזה, תשתמשו בפונקציית ההסקה 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 |                     |                                        |
| ...          |                     |                                        |
+--------------+---------------------+----------------------------------------+

הסרת המשאבים

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.