模型評估元件會將基準真相和批次預測結果做為輸入內容,並產生評估指標。實際資料是經過人工判定的「正確標籤」資料,通常會以您用來訓練模型的測試資料集中的目標欄位形式提供。詳情請參閱「Vertex AI 的模型評估」。
Vertex AI 提供下列模型評估元件:
支援的模型類型
下表列出各模型評估元件支援的模型類型:
| 模型評估元件 | 支援的模型類型 |
|---|---|
ModelEvaluationClassificationOp |
|
ModelEvaluationRegressionOp |
|
ModelEvaluationForecastingOp |
|
移除目標欄位
對於部分模型類型,BatchPredictionJob 元件會要求您從資料集中排除目標資料欄 (基準真相)。
設定表格資料集的切片格式
配量是具有指定特徵的表格資料子集。切片指標可為 AutoML 表格和自訂訓練分類模型提供更精細的評估指標。
舉例來說,假設有一個寵物領養資料集,模型會經過訓練,預測寵物是否會在一個星期內被領養。雖然查看整個資料集的指標很有用,但您可能對寵物的品種和年齡相關指標感興趣。換句話說,您感興趣的是資料集的下列子集:
| 功能 | 值 |
|---|---|
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 是下列其中一項:
valuevalue會針對特徵的單一值建立單一切片。將 CONFIG 指定為鍵/值組合,其中鍵為float_value或string_value。例如:"float_value": 1.0。以下範例設定會建立單一資料切片,其中包含
age為1的資料:{ "age": { "value": { "float_value": 1.0 } } }rangerange會建立單一切片,其中包含指定範圍內的資料。 將 CONFIG 指定為兩個鍵/值組合,其中鍵為low和high。以下範例設定會建立單一切片,其中包含
age介於1和3之間的資料:{ "age": { "range": { "low": 1, "high": 3 } } }all_valuesall_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 元件設定切片格式,請按照下列步驟操作:
建立
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') ) })建立清單以儲存切片設定。例如:
slicing_specs = []
將每個
slicing_spec格式設為 JSON 或字典。例如:slicing_spec_json = json_format.MessageToJson(slicing_spec) slicing_spec_dict = json_format.MessageToDict(slicing_spec)
將每個
slicing_spec合併成清單。例如:slicing_specs.append(slicing_spec_json)
將
slicing_specs做為參數傳遞至ModelEvaluationClassificationOp元件。例如:ModelEvaluationClassificationOp(slicing_specs=slicing_specs)
格式化公平性指標設定切片
如要評估模型的公平性,請使用下列元件:
DetectDataBiasOp:傳回您傳遞至元件的切片資料偏差指標。DetectModelBiasOp:傳回您傳遞至元件的切片模型偏差指標。
如要設定 DetectDataBiasOp 和 DetectModelBiasOp 元件的切片格式,請按照下列步驟操作:
建立
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') ) }))建立清單來儲存偏誤設定。例如:
bias_configs = []
將每個
bias_config格式設為 JSON 或字典。例如:bias_config_json = json_format.MessageToJson(bias_config) bias_config_dict = json_format.MessageToDict(bias_config)
將每個
bias_config合併成清單。例如:bias_configs.append(bias_config_json)
將
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:陣列classes:陣列
以下是批次預測輸出檔案的範例,其中包含 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:浮點數lower_bound:浮點數upper_bound:浮點數
以下是批次預測輸出檔案的範例,其中包含 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:列舉timeSegmentStart:字串timeSegmentEnd:字串confidence:浮點數
以下是 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 產生的批次預測結果進行模型評估
您可以搭配使用模型評估管道元件和批次預測,但批次預測並非在 Vertex AI 中產生。但請注意,模型評估管道元件的輸入內容必須是批次預測目錄,其中包含符合下列前置字元的檔案:
prediction.results-explanation.results-predictions_
API 參考資料
如需元件參考資料,請參閱Google Cloud 模型評估元件的 SDK 參考頁面。
如需如何使用模型評估元件的範例,請參閱「建立評估」一節列出的筆記本。
版本記錄和版本資訊
如要進一步瞭解 Google Cloud Pipeline Components SDK 的版本記錄和變更,請參閱 Google Cloud Pipeline Components SDK 版本資訊。