שימוש בכוונון ובהערכה כדי לשפר את ביצועי המודל

במאמר הזה נסביר איך ליצור מודל מרוחק של BigQuery ML שמפנה אל מודל של Gemini Enterprise Agent Platform ‏gemini-2.0-flash-001. לאחר מכן משתמשים בכוונון מפוקח כדי לכוונן את המודל באמצעות נתוני אימון חדשים, ואז מעריכים את המודל באמצעות הפונקציה ML.EVALUATE.

כוונון יכול לעזור לכם לטפל בתרחישים שבהם אתם צריכים להתאים אישית את המודל של Agent Platform המתארח, למשל כשקשה להגדיר בצורה תמציתית בפרומפט את ההתנהגות הצפויה של המודל, או כשהפרומפטים לא מניבים תוצאות צפויות באופן עקבי מספיק. כוונון מונחה משפיע על המודל גם בדרכים הבאות:

  • הנחיית המודל להחזרת סגנונות תשובה ספציפיים – למשל, תשובה תמציתית יותר או מפורטת יותר.
  • ללמד את המודל התנהגויות חדשות – למשל, להגיב להנחיות בתור פרסונה ספציפית.
  • גורם למודל לעדכן את עצמו במידע חדש.

במדריך הזה, המטרה היא שהמודל ייצור טקסט שהסגנון והתוכן שלו יהיו דומים ככל האפשר לתוכן האמת שסופק.

התפקידים הנדרשים

כדי להפעיל את המדריך הזה, אתם צריכים את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM):

  • יצירה ושימוש במערכי נתונים, בחיבורים ובמודלים של BigQuery: ניהול BigQuery‏ (roles/bigquery.admin).
  • נותנים הרשאות לחשבון השירות של החיבור: אדמין IAM של פרויקט (roles/resourcemanager.projectIamAdmin).

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

ההרשאות הנדרשות

  • יצירת מערך נתונים: bigquery.datasets.create
  • יצירת טבלה: bigquery.tables.create
  • יצירה, הקצאה ושימוש בחיבור: bigquery.connections.*
  • הגדרת החיבור המוגדר כברירת מחדל: bigquery.config.*
  • מגדירים את ההרשאות לחשבון השירות: resourcemanager.projects.getIamPolicy ו- resourcemanager.projects.setIamPolicy
  • יצירת מודל והרצת הסקה:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

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

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

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project (בחירת פרויקט): כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שהוקצה לכם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  3. מפעילים את ממשקי ה-API של BigQuery,‏ BigQuery Connection,‏ Agent Platform ו-Compute Engine.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    הפעלת ממשקי ה-API

עלויות

במסמך הזה משתמשים ברכיבים הבאים של 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 processing that you perform in BigQuery ML.
  • Gemini Enterprise Agent Platform: You incur costs for calls to and supervised tuning of the gemini-2.0-flash-001 model.

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

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

המסוף

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

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בסייר, מרחיבים את הפרויקט ואז לוחצים על מערכי נתונים.

  4. בדף Datasets (מערכי נתונים), לוחצים על Create dataset (יצירת מערך נתונים).

  5. בחלונית Create dataset:

    • בשדה Dataset ID (מזהה קבוצת נתונים), מזינים bqml_tutorial.

    • בקטע Data location, בוחרים באפשרות US.

    משאירים את שאר הגדרות ברירת המחדל כמו שהן.

  6. לוחצים על יצירת מערך נתונים.

BQ

כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.

  1. יוצרים מערך נתונים בשם bqml_tutorial עם מיקום הנתונים שמוגדר ל-US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. בודקים שמערך הנתונים נוצר:

    bq ls

API

מפעילים את השיטה datasets.insert עם משאב מוגדר של מערך נתונים:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

יצירת טבלאות בדיקה

ליצור טבלאות של נתוני אימון והערכה על סמך מערך הנתונים הציבורי task955_wiki_auto_style_transfer מ-Hugging Face.

  1. פותחים את Cloud Shell.

  2. ב-Cloud Shell, מריצים את הפקודות הבאות כדי ליצור טבלאות של נתוני בדיקה והערכה:

    python3 -m pip install pandas pyarrow fsspec huggingface_hub
    
    python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);"
    
    python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);"
    
    bq rm -t bqml_tutorial.wiki_auto_style_transfer_train
    
    bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid
    
    bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING
    
    bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
    

יצירת מודל בסיסי

יוצרים מודל מרוחק על בסיס מודל Gemini Enterprise Agent Platform gemini-2.0-flash-001.

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה כדי ליצור מודל מרוחק:

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline`
    REMOTE WITH CONNECTION DEFAULT
    OPTIONS (ENDPOINT ='gemini-2.0-flash-001');

    השלמת השאילתה אורכת כמה שניות, ואז מודל  מופיע במערך הנתונים  בחלונית Explorer.gemini_baselinebqml_tutorial מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

בדיקת הביצועים של מודל הבסיס

מריצים את הפונקציה AI.GENERATE_TEXT עם המודל המרוחק כדי לראות את הביצועים שלו בנתוני ההערכה בלי לבצע התאמות.

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

    כניסה ל-BigQuery

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

    SELECT result, ground_truth
    FROM
      AI.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_baseline`,
        (
          SELECT
            input AS prompt, output AS ground_truth
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
          LIMIT 10
        ));

    אם בוחנים את נתוני הפלט ומשווים בין הערכים של result ו-ground_truth, אפשר לראות שבעוד שמודל הבסיס יוצר טקסט שמשקף בצורה מדויקת את העובדות שמופיעות בתוכן האמת, הסגנון של הטקסט שונה למדי.

הערכת מודל הבסיס

כדי לבצע הערכה מפורטת יותר של ביצועי המודל, אפשר להשתמש בפונקציה ML.EVALUATE. הפונקציה הזו מחשבת מדדים של המודל שמודדים את הדיוק והאיכות של הטקסט שנוצר, כדי להשוות בין התשובות של המודל לבין תשובות אידיאליות.

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

    כניסה ל-BigQuery

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

    SELECT *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.gemini_baseline`,
        (
          SELECT
            input AS input_text, output AS output_text
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
        ),
        STRUCT('text_generation' AS task_type));

הפלט אמור להיראות כך:

   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.23317359667074181 | 0.37809145226740043 | 0.45902937167791508 | 0.40956844061733139 | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   

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

יצירת מודל שעבר כוונון

יוצרים מודל מרוחק שדומה מאוד לזה שיצרתם במאמר יצירת מודל, אבל הפעם מציינים את הפסקה AS SELECT כדי לספק את נתוני האימון לצורך כוונון המודל.

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה כדי ליצור מודל מרוחק:

    CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned`
      REMOTE
        WITH CONNECTION DEFAULT
      OPTIONS (
        endpoint = 'gemini-2.0-flash-001',
        max_iterations = 500,
        data_split_method = 'no_split')
    AS
    SELECT
      input AS prompt, output AS label
    FROM `bqml_tutorial.wiki_auto_style_transfer_train`;

    השאילתה תימשך כמה דקות, ולאחר מכן מודל gemini_tuned יופיע במערך הנתונים bqml_tutorial בחלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרה CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

בדיקת הביצועים של מודל שעבר התאמה

מריצים את הפונקציה AI.GENERATE_TEXT כדי לראות את הביצועים של המודל המותאם בנתוני ההערכה.

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

    כניסה ל-BigQuery

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

    SELECT result, ground_truth
    FROM
      AI.GENERATE_TEXT(
        MODEL `bqml_tutorial.gemini_tuned`,
        (
          SELECT
            input AS prompt, output AS ground_truth
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
          LIMIT 10
        ));

    אם בודקים את נתוני הפלט, אפשר לראות שהמודל שעבר התאמה מייצר טקסט בסגנון שדומה הרבה יותר לתוכן האמת.

הערכת המודל שעבר התאמה

אפשר להשתמש בפונקציה ML.EVALUATE כדי להשוות בין התשובות של המודל המכוונן לבין תשובות אידיאליות.

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

    כניסה ל-BigQuery

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

    SELECT *
    FROM
      ML.EVALUATE(
        MODEL `bqml_tutorial.gemini_tuned`,
        (
          SELECT
            input AS prompt, output AS label
          FROM `bqml_tutorial.wiki_auto_style_transfer_valid`
        ),
        STRUCT('text_generation' AS task_type));

הפלט אמור להיראות כך:

   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.416868792119966   | 0.642001000843349   | 0.55910008048151372 | 0.5907226262084847  | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   

אפשר לראות שלמרות שמערך נתוני האימון כלל רק 1,408 דוגמאות, יש שיפור ניכר בביצועים, כפי שמצוין במדדי ההערכה הגבוהים יותר.

הסרת המשאבים

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

    כניסה לדף Manage resources

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