模型评估组件

模型评估组件接受标准答案和批量预测结果作为输入并生成评估指标。标准答案数据是由人工确定的“正确标记”的数据,通常作为您用于训练模型的测试数据集中的目标字段提供。如需了解详情,请参阅 Vertex AI 中的模型评估

Vertex AI 提供以下模型评估组件:

模型类型支持

下表展示了每个模型评估组件支持的模型类型:

模型评估组件 支持的模型类型
ModelEvaluationClassificationOp
  • AutoML 表格、图片、文本、视频
  • 自定义表格
  • ModelEvaluationRegressionOp
  • AutoML 表格
  • 自定义表格
  • ModelEvaluationForecastingOp
  • AutoML 表格
  • 移除目标字段

    对于某些模型类型,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 是以下值之一:

      • value

        value 会针对特征的单个值创建单个切片。将 CONFIG 指定为一个键值对,其中键为 float_valuestring_value。例如 "float_value": 1.0

        以下示例配置会创建一个包含 age1 的数据的切片:

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

        range 会创建一个包含指定范围内的数据的切片。将 CONFIG 指定为两个键值对,其中键为 lowhigh

        以下示例配置会创建一个包含 age13 之间的任何值的数据的切片:

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

        all_values 会为特征的每个可能标签创建单独的切片。将 CONFIG 指定为 "value": true

        以下示例配置会创建三个切片,"dog""cat""rabbit" 各对应一个:

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

    您还可以使用多个特征来创建一个或多个切片。

    以下配置会创建一个切片,其中包含 age 介于 13 之间且 species"dog" 的数据:

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

    以下配置会创建多个切片,数据集中的每个唯一品种对应一个,其中 age1

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

    生成的切片包含示例数据集中的以下数据:

    • 切片 1age:1species:"dog"

    • 切片 2age:1species:"cat"

    • 切片 3age:1species:"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)

    设置公平性指标配置切片的格式

    如需评估模型的公平性,请使用以下组件:

    如需为 DetectDataBiasOpDetectModelBiasOp 组件设置切片的格式,请执行以下操作:

    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 作为参数传递给 DetectDataBiasOpDetectModelBiasOp 组件。例如:

      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 组件要求您从数据集中排除目标列(标准答案)。您可以使用 TargetFieldDataRemoverOp 组件来实现更高效的工作流。

    默认架构包括以下字段:

    • 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 组件来实现更高效的工作流。

    默认架构包括以下字段:

    • ids:字符串数组
    • displayName:字符串数组
    • confidence:浮点数数组

    以下是一个包含 label 作为目标列的数据集示例:

    {
      "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt",
      "mimeType": "text/plain",
      "label": "affection"
    }
              

    TargetFieldDataRemoverOp 组件会先移除目标列,然后再将该文件发送到 BatchPredictionJob 组件:

    {
      "content": "gs://kbn-us-central1-test/datasets/text/happy_0.txt",
      "mimeType": "text/plain"
    }
              

    下面是一个不包含目标列 label 的批量预测输出文件示例:

    {
      "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]
      }
    }
              

    下表介绍了使用文本模型的 ModelEvaluationClassificationOp 组件的必需参数:

    评估组件参数 需要
    target_field_name
    prediction_label_column 对于默认架构不是必需的。
    对于非默认架构,请使用 "prediction.displayNames"
    prediction_score_column 对于默认架构不是必需的。
    对于非默认架构,请使用 "prediction.confidences"
    evaluation_class_labels 对于默认架构或提供 prediction_label_column 时不是必需的。
    ground_truth_gcs_source 是:指向包含目标列的原始数据集的 Cloud Storage 链接。
    ground_truth_format 是:原始数据集的格式。例如 "jsonl""csv""bigquery"

    视频

    分类

    对于视频分类模型,BatchPredictionJob 组件要求您从数据集中排除目标列(标准答案)。您可以使用 TargetFieldDataRemoverOp 组件来实现更高效的工作流。

    默认架构包括以下字段:

    • id:字符串
    • displayName:字符串
    • type:枚举
    • timeSegmentStart:字符串
    • timeSegmentEnd:字符串
    • confidence:浮点数

    以下是一个包含 ground_truth 作为目标列的数据集示例:

    {
      "content": "gs://automl-video-demo-data/hmdb51/Aerial_Cartwheel_Tutorial_By_Jujimufu_cartwheel_f_nm_np1_ri_med_0.avi",
      "ground_truth": "cartwheel",
      "timeSegmentStart": "0.0",
      "timeSegmentEnd": "inf"
    }
              

    TargetFieldDataRemoverOp 组件会先移除目标列,然后再将该文件发送到 BatchPredictionJob 组件:

    {
      "content": "gs://automl-video-demo-data/hmdb51/Aerial_Cartwheel_Tutorial_By_Jujimufu_cartwheel_f_nm_np1_ri_med_0.avi",
      "timeSegmentStart": "0.0",
      "timeSegmentEnd": "inf"
    }
              

    下面是一个不包含目标列 label 的批量预测输出文件示例:

    {
      "instance": {
        "content": "gs://automl-video-demo-data/hmdb51/20_Marine_Corps_Pull_Ups___JimmyDShea_pullup_f_cm_np1_ba_bad_3.avi"
        "mimeType": "video/avi",
        "timeSegmentStart": "0.0",
        "timeSegmentEnd": "inf"
      },
      "prediction": [
        {
          "id":"5015420640832782336",
          "displayName":"pullup",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.98152995
        },
        {
          "id":"2709577631619088384",
          "displayName":"cartwheel",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.0047166348
        },
        {
          "id":"403734622405394432",
          "displayName":"golf",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.0046260506
        },
        {
          "id":"1556656127012241408",
          "displayName":"ride_horse",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.004590442
        },
        {
          "id":"7321263650046476288",
          "displayName":"kick_ball",
          "type":"segment-classification",
          "timeSegmentStart":"0s",
          "timeSegmentEnd":"2.600s",
          "confidence":0.004536863
        }
      ]
    }
              

    下表介绍了使用视频模型的 ModelEvaluationClassificationOp 组件的必需参数:

    评估组件参数 需要
    target_field_name
    prediction_label_column 对于默认架构不是必需的。
    对于非默认架构,请使用 "prediction.displayName"
    prediction_score_column 对于默认架构不是必需的。
    对于非默认架构,请使用 "prediction.confidence"
    evaluation_class_labels 使用默认架构或提供 prediction_label_column 时不是必需的。
    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 对于默认架构不是必需的;对于 JSONLCSVBIGQUERY 格式是自动设置的。
    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_pipeline_components SDK 参考

    如需查看如何使用模型评估组件的示例,请参阅创建评估中列出的笔记本。

    版本历史记录和版本说明

    如需详细了解 Google Cloud 流水线组件 SDK 的版本历史记录和更改,请参阅 Google Cloud 流水线组件 SDK 版本说明