模型评估组件接受标准答案和批量预测结果作为输入并生成评估指标。标准答案数据是由人工确定的“正确标记”的数据,通常作为您用于训练模型的测试数据集中的目标字段提供。如需了解详情,请参阅 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 |
“狗”“猫”“兔子” |
这种精细的分析有助于确定模型最容易出错的位置,或确保模型在关键数据子集上表现良好。
配置切片
如需配置切片,请创建一个包含以下配置的 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:浮点数
下面是一个包含 sale_dollars 作为目标列的 CSV 文件示例:
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:与模型训练数据集列的顺序相同的输入数据数组。
以下是一个包含 species 作为目标列的 CSV 数据集示例:
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 流水线组件 SDK 的版本历史记录和更改,请参阅Google Cloud 流水线组件 SDK 版本说明。