רכיבים של הערכת מודל

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

‫Vertex AI מספק את רכיבי הערכת המודלים הבאים:

תמיכה בסוגי מודלים

בטבלה הבאה מוצגים סוגי המודלים הנתמכים לכל רכיב של הערכת המודל:

רכיב הערכת המודל סוגי מודלים נתמכים
ModelEvaluationClassificationOp
  • טבלה או תמונה של AutoML
  • טבלה בהתאמה אישית
  • ModelEvaluationRegressionOp
  • טבלאות AutoML
  • טבלה בהתאמה אישית
  • ModelEvaluationForecastingOp
  • טבלאות AutoML
  • הסרת שדה היעד

    בסוגים מסוימים של מודלים, רכיב BatchPredictionJob מחייב להחריג את עמודת היעד (האמת הבסיסית) ממערך הנתונים.

    הגדרה ועיצוב של פרוסות לערכת נתונים טבלאית

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

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

    תכונה ערכים
    age (in years) ‫1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
    species ‫"dog",‏ "cat",‏ "rabbit"

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

    הגדרת פלחים

    כדי להגדיר פרוסה, יוצרים קובץ JSON עם ההגדרה הבאה:

    {
      "FEATURE": {
        "KIND": {
          CONFIG
        }
      }
    }
    

    כאשר:

    • FEATURE היא תכונה שרוצים ליצור לה פלח. לדוגמה, age.

    • KIND הוא אחד מהבאים:

      • value

        value יוצרת פלח יחיד על ערך יחיד של תכונה. מציינים את CONFIG כצמד מפתח/ערך, כאשר המפתח הוא float_value או string_value. לדוגמה, "float_value": 1.0.

        ההגדרה לדוגמה הבאה יוצרת פרוסה אחת שמכילה נתונים עם age של 1:

        {
          "age": {
            "value": {
              "float_value": 1.0
            }
          }
        }
      • range

        range יוצרת פרוסה אחת שכוללת נתונים בטווח שצוין. מציינים את CONFIG כשני צמדי מפתח/ערך, כאשר המפתחות הם low ו-high.

        הגדרת הדוגמה הבאה יוצרת פלח יחיד שמכיל נתונים שבהם age הוא כל ערך בין 1 ל-3:

        {
          "age": {
            "range": {
              "low": 1,
              "high": 3
            }
          }
        }
      • all_values

        all_values יוצרת פרוסה נפרדת לכל תווית אפשרית של התכונה. מציינים את CONFIG בתור "value": true.

        הגדרת התצורה הבאה יוצרת שלוש פרוסות – אחת לכל אחת מההגדרות "dog", "cat" ו-"rabbit":

        {
          "species": {
            "all_values": {
              "value": true
            }
          }
        }

    אפשר גם להשתמש בכמה תכונות כדי ליצור פרוסות.

    ההגדרה הבאה יוצרת פרוסה אחת שמכילה נתונים שבהם הערך של age הוא בין 1 לבין 3 והערך של species הוא "dog":

    {
      "age": {
        "range": {
          "low": 1,
          "high": 3
        }
      },
      "species": {
        "value": {
          "string_value": "dog"
        }
      }
    }
    

    ההגדרה הבאה יוצרת כמה פלחים – אחד לכל מין ייחודי בקבוצת הנתונים, כאשר age הוא 1.

    {
      "species": {
        "all_values": {
          "value": true
        }
      },
      "age": {
        "value": {
          "float_value": 1.0
        }
      }
    }
    

    הפלחי הנתונים שיתקבלו יכללו את הנתונים הבאים ממערך הנתונים לדוגמה:

    • פרוסה 1: age:1 ו-species:"dog"

    • פרוסה 2: age:1 ו-species:"cat"

    • פרוסה 3: age:1 ו-species:"rabbit"

    עיצוב רצועות

    כדי לעצב את הפרוסות לרכיב ModelEvaluationClassificationOp, מבצעים את הפעולות הבאות:

    1. יצירת slicing_spec. לדוגמה:

      from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice import SliceSpec
      from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice.SliceSpec import SliceConfig
      
      slicing_spec = SliceSpec(configs={ 'feature_a': SliceConfig(SliceSpec.Value(string_value='label_a') ) })
    2. יוצרים רשימה לאחסון הגדרות הפלח. לדוגמה:

      slicing_specs = []
    3. כל slicing_spec צריך להיות בפורמט JSON או מילון. לדוגמה:

      slicing_spec_json = json_format.MessageToJson(slicing_spec)
      
      slicing_spec_dict = json_format.MessageToDict(slicing_spec)
    4. שילוב כל slicing_spec לרשימה. לדוגמה:

      slicing_specs.append(slicing_spec_json)
    5. מעבירים את slicing_specs כפרמטר לרכיב ModelEvaluationClassificationOp. לדוגמה:

      ModelEvaluationClassificationOp(slicing_specs=slicing_specs)

    פורמט של פרוסות להגדרת מדדי הוגנות

    כדי להעריך את ההוגנות של המודל, משתמשים ברכיבים הבאים:

    כדי לעצב את הפרוסות לרכיבים DetectDataBiasOp ו-DetectModelBiasOp:

    1. יצירת BiasConfig. לדוגמה:

      from google.cloud.aiplatform_v1.types.ModelEvaluation import BiasConfig
      from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice import SliceSpec
      from google.cloud.aiplatform_v1.types.ModelEvaluationSlice.Slice.SliceSpec import SliceConfig
      
      bias_config = BiasConfig(bias_slices=SliceSpec(configs={ 'feature_a': SliceConfig(SliceSpec.Value(string_value='label_a') ) }))
    2. יוצרים רשימה לאחסון הגדרות ההטיה. לדוגמה:

      bias_configs = []
    3. כל bias_config צריך להיות בפורמט JSON או מילון. לדוגמה:

      bias_config_json = json_format.MessageToJson(bias_config)
      
      bias_config_dict = json_format.MessageToDict(bias_config)
    4. שילוב כל bias_config לרשימה. לדוגמה:

      bias_configs.append(bias_config_json)
    5. מעבירים את bias_configs כפרמטר לרכיב DetectDataBiasOp או DetectModelBiasOp. לדוגמה:

      DetectDataBiasOp(bias_configs=bias_configs)
      
      DetectModelBiasOp(bias_configs=bias_configs)

    פרמטרים נדרשים של קלט

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

    מודלים של AutoML

    כשמאמנים מודלים של AutoML, ‏ Vertex AI משתמשת בסכימות ברירת מחדל. חלק מפרמטרי הקלט של רכיבי הערכת המודל נדרשים רק אם השתמשתם בסכימה שאינה ברירת מחדל כדי לאמן את המודל.

    אפשר להציג ולהוריד קובצי סכימה ממיקום Cloud Storage הבא:
    gs://google-cloud-aiplatform/schema/modelevaluation/

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

    סיווג

    סכימת ברירת המחדל כוללת את השדות הבאים:

    • scores: array
    • classes: array

    הדוגמה הבאה היא של קובץ פלט של חיזוי באצווה עם עמודת היעד male:

    {
      "instance": {
        "male": "1",
        "age": "49",
        "heartRate": "67",
        "education": "medium_high",
        "totChol": "282",
        "diaBP": "79",
        "BPMeds": "0",
        "currentSmoker": "current_high",
        "cigsPerDay": "25",
        "prevalentStroke": "stroke_0",
        "prevalentHyp": "hyp_0",
        "TenYearCHD": "FALSE",
        "diabetes": "0",
        "sysBP": "134",
        "BMI": "26.87",
        "glucose": "78"
        },
      "prediction": {
          "scores": [0.3666940927505493, 0.6333059072494507],
          "classes": ["0", "1"]
        }
    }
              

    בטבלה הזו מפורטים הפרמטרים הנדרשים לרכיב ModelEvaluationClassificationOp עם מודל טבלאי:

    פרמטר של רכיב הערכה חובה
    target_field_name כן
    prediction_label_column לא נדרש לסכימה שמוגדרת כברירת מחדל.
    משתמשים ב-prediction.classes לסכימות שאינן ברירת מחדל.
    prediction_score_column לא נדרש לסכימה שמוגדרת כברירת מחדל.
    משתמשים ב-prediction.scores לסכימות שאינן ברירת מחדל.
    evaluation_class_labels לא נדרש לסכימה שמוגדרת כברירת מחדל.
    משתמשים ב-["0","1"] לסכימות שאינן ברירת מחדל.

    רגרסיה

    סכימת ברירת המחדל כוללת את השדות הבאים:

    • value: float
    • lower_bound: float
    • upper_bound: float

    הדוגמה הבאה היא של קובץ פלט של חיזוי באצווה עם עמודת היעד age:

    {
      "instance": {
        "BPMeds": "0",
        "diabetes": "0",
        "diaBP": "65",
        "cigsPerDay": "45",
        "prevalentHyp": "hyp_0",
        "age": "46",
        "male": "1",
        "sysBP": "112.5",
        "glucose": "78",
        "BMI": "27.48",
        "TenYearCHD": "FALSE",
        "totChol": "209",
        "education": "high",
        "prevalentStroke": "stroke_0",
        "heartRate": "75",
        "currentSmoker": "current_high"
      },
      "prediction": {
        "value": 44.96103286743164,
        "lower_bound": 44.61349868774414,
        "upper_bound": 44.590206146240234
      }
    }
              

    בטבלה הזו מפורטים הפרמטרים הנדרשים לרכיב ModelEvaluationRegressionOp עם מודל טבלאי:

    פרמטר של רכיב הערכה חובה
    target_field_name כן
    prediction_label_column לא נדרש למודלים של רגרסיה.
    prediction_score_column לא נדרש לסכימה שמוגדרת כברירת מחדל.
    משתמשים ב-prediction.value לסכימות שאינן ברירת מחדל.
    evaluation_class_labels לא נדרש למודלים של רגרסיה.

    תחזיות

    במודלים של תחזיות טבלאיות, הרכיב BatchPredictionJob מחייב להחריג את עמודת היעד (האמת הבסיסית) ממערך הנתונים.

    סכימת ברירת המחדל כוללת את השדות הבאים:

    • id: מחרוזת
    • displayNames: מחרוזת
    • type: enum
    • timeSegmentStart: מחרוזת
    • timeSegmentEnd: מחרוזת
    • confidence: float

    קובץ CSV לדוגמה עם sale_dollars כעמודת היעד:

    date,store_name,city,zip_code,county,sale_dollars
    2020-03-17,Thriftway,,,,774.08999999999992
    2020-03-10,Thriftway,,,,1160.67
    2020-03-03,Thriftway,,,,2247.24
    2020-06-08,New Star / Fort Dodge,,,,753.98
    2020-06-01,New Star / Fort Dodge,,,,967.73
    2020-01-10,Casey's General Store #1280 / Fort Dodge,,,,1040.92
    2020-10-30,KUM & GO #76 / ADAIR,Adair,50002,ADAIR,1387.02
              

    רכיב TargetFieldDataRemoverOp מסיר את עמודת היעד לפני שליחת הקובץ לרכיב BatchPredictionJob:

    date,store_name,city,zip_code,county
    2020-03-17,Thriftway,nan,nan,nan
    2020-03-10,Thriftway,nan,nan,nan
    2020-03-03,Thriftway,nan,nan,nan
    2020-06-08,New Star / Fort Dodge,nan,nan,nan
    2020-06-01,New Star / Fort Dodge,nan,nan,nan
    2020-01-10,Casey's General Store #1280 / Fort Dodge,nan,nan,nan
    2020-10-30,KUM & GO #76 / ADAIR,Adair,50002.0,ADAIR
              

    הדוגמה הבאה היא של קובץ פלט של חיזוי אצווה ללא עמודת היעד sale_dollars:

    {
      "instance": {
        "content": "gs://kbn-us-central1-test/datasets/text/happy_11556.txt",
        "mimeType":"text/plain"
      },
      "prediction": {
        "ids":    ["7903916851837534208","3292230833410146304","986387824196452352","2139309328803299328","5598073842623840256","6750995347230687232","4559431178561519616"],
        "displayNames": ["affection","bonding","achievement","exercise","nature","enjoy_the_moment","leisure"],
        "confidences": [0.99483216,0.005162797,4.1117933E-6,3.9997E-7,2.4624453E-7,1.9969502E-7,1.16997434E-7]
      }
    }
              

    בטבלה הזו מפורטים הפרמטרים הנדרשים לרכיב ModelEvaluationForecastingOp עם מודל טבלאי:

    פרמטר של רכיב הערכה חובה
    target_field_name כן
    prediction_label_column לא נדרש למודלים של חיזוי.
    prediction_score_column לא נדרש לסכימה שמוגדרת כברירת מחדל.
    משתמשים ב-"prediction.value" לסכימות שאינן ברירת מחדל.
    evaluation_class_labels לא נדרש למודלים של חיזוי.
    ground_truth_gcs_source כן: הקישור ל-Cloud Storage של מערך הנתונים המקורי עם עמודת היעד.
    ground_truth_format כן: הפורמט של מערך הנתונים המקורי. לדוגמה, "jsonl",‏ "csv" או "bigquery".

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

    במודלים שאומנו בהתאמה אישית, רכיב BatchPredictionJob מחייב אתכם להחריג את עמודת היעד (נתוני האמת) ממערך הנתונים. אפשר להשתמש ברכיב TargetFieldDataRemoverOp כדי ליצור תהליך עבודה יעיל יותר.

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

    סיווג

    סכימה טיפוסית כוללת את השדות הבאים:

    • instance: מערך של נתוני קלט באותו סדר כמו העמודות של מערך הנתונים לאימון המודל.
    • prediction: מערך של נתוני קלט באותו סדר כמו העמודות של מערך הנתונים לאימון המודל.

    הדוגמה הבאה היא של מערך נתונים בפורמט CSV עם species כעמודת היעד:

    petal_length,petal_width,sepal_length,sepal_width,species
    6.4,2.8,5.6,2.2,2
    5.0,2.3,3.3,1.0,1
    4.9,2.5,4.5,1.7,2
    4.9,3.1,1.5,0.1,0
              

    רכיב TargetFieldDataRemoverOp מסיר את עמודת היעד לפני שליחת הקובץ לרכיב של חיזוי אצווה:

    petal_length,petal_width,sepal_length,sepal_width
    6.4,2.8,5.6,2.2
    5.0,2.3,3.3,1.0
    4.9,2.5,4.5,1.7
    4.9,3.1,1.5,0.1
              

    הדוגמה הבאה היא של קובץ פלט של חיזוי אצווה ללא עמודת היעד species:

    {
      "instance": [5.6, 2.5, 3.9, 1.1],
      "prediction": [0.0005816521588712931, 0.9989032745361328, 0.0005150380893610418]
    }
    {
      "instance": [5.0, 3.6, 1.4, 0.2],
      "prediction": [0.999255359172821, 0.000527293945197016, 0.00021737271163146943]
    }
    {
      "instance": [6.0, 2.9, 4.5, 1.5],
      "prediction": [0.00025063654175028205, 0.9994204044342041, 0.00032893591560423374]
    }
              

    בטבלה הזו מפורטים הפרמטרים הנדרשים לרכיב ModelEvaluationClassificationOp עם מודל שאומן בהתאמה אישית:

    פרמטר של רכיב הערכה חובה
    target_field_name כן
    prediction_label_column העמודה הזו צריכה להיות ריקה. היא לא קיימת במודלים שעברו אימון בהתאמה אישית.
    prediction_score_column לא נדרש בסכימת ברירת המחדל. מוגדר אוטומטית בפורמטים JSONL,‏ CSV או BIGQUERY.
    evaluation_class_labels כן. האורך של המערך הזה חייב להיות זהה לאורך של מערך התחזיות של הפלט.
    ground_truth_gcs_source כן: הקישור ל-Cloud Storage של מערך הנתונים המקורי עם עמודת היעד.
    ground_truth_format כן: הפורמט של מערך הנתונים המקורי. לדוגמה, "jsonl",‏ "csv" או "bigquery".

    הערכות מודל ללא חיזויים של Vertex AI Batch

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

    • prediction.results-

    • explanation.results-

    • predictions_

    הפניית API

    היסטוריית גרסאות ונתוני גרסה

    מידע נוסף על היסטוריית הגרסאות והשינויים ב- Google Cloud Pipeline Components SDK זמין בהערות לגבי הגרסה של Pipeline Components SDK.Google Cloud