配置 Amazon SageMaker Clarify 处理作业以实现公平性和可解释性 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 Amazon SageMaker Clarify 处理作业以实现公平性和可解释性

本主题介绍如何配置能够计算偏差指标和特征属性以实现可解释性的 Amazon SageMaker Clarify 处理作业。它是使用专用SageMaker Clarify容器映像实现的。提供了有关如何查找和下载其中一个容器映像的说明。简要概述 SageMaker Clarify 的工作原理。描述配置处理作业和分析类型所需的参数。简要介绍了先决条件,并提供了有关SageMaker Clarify处理作业所用计算资源的一些建议。

Prerequisites

在开始之前,您需要满足以下先决条件:

  • 您需要以 CSV 或 JSONLines 格式的表格文件的形式提供输入数据集。输入数据集必须包含用于偏差分析的标签列。该数据集应做好机器学习的准备,并进行所需的任何预处理,例如数据清理或特征工程。

  • 您需要提供支持 CSV 或 JSONLines 文件格式的模型构件作为其内容类型输入之一。为了实现训练后偏差指标和可解释性,我们使用数据集来通过模型构件进行推理。每个行减去标签列都必须准备好用作推理的负载。

  • 使用SageMaker容器映像创建处理作业时,您需要以下内容:

    • 必须为处理作业禁用网络隔离。

    • 如果模型位于 VPC 中,则处理作业必须与模型位于同一 VPC 中。

    • 调用方的 IAM 用户/角色必须具有 API 的权限SageMakerAPIs。我们建议您使用 “arn:aws:iam::aws:policy/AmazonSageMakerFullAccess” 托管策略。

SageMaker Clarify 容器入门

Amazon SageMaker 提供预构建的SageMaker Clarify容器映像,其中包括计算偏差指标和特征属性所需的库和其他依赖项,以便于解释。此映像已启用,可在您的账户SageMaker处理数据中运行。

容器的映像 URIs 采用以下形式:

<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-clarify-processing:1.0

例如:

205585389593.dkr.ecr.us-east-1.amazonaws.com/sagemaker-clarify-processing:1.0

下表按AWS区域列出了地址。

用于预训练偏差检测的 Docker 映像
区域 映像地址
us-east-1 205585389593.dkr.ecr.us-east-1.amazonaws.com/sagemaker-clarify-processing:1.0
us-east-2 211330385671.dkr.ecr.us-east-2.amazonaws.com/sagemaker-clarify-processing:1.0
us-west-1 740489534195.dkr.ecr.us-west-1.amazonaws.com/sagemaker-clarify-processing:1.0
us-west-2 306415355426.dkr.ecr.us-west-2.amazonaws.com/sagemaker-clarify-processing:1.0
ap-east-1 098760798382.dkr.ecr.ap-east-1.amazonaws.com/sagemaker-clarify-processing:1.0
ap-south-1 452307495513.dkr.ecr.ap-south-1.amazonaws.com/sagemaker-clarify-processing:1.0
ap-northeast-2 263625296855.dkr.ecr.ap-northeast-2.amazonaws.com/sagemaker-clarify-processing:1.0
ap-southeast-1 834264404009.dkr.ecr.ap-southeast-1.amazonaws.com/sagemaker-clarify-processing:1.0
ap-southeast-2 007051062584.dkr.ecr.ap-southeast-2.amazonaws.com/sagemaker-clarify-processing:1.0
ap-northeast-1 377024640650.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-clarify-processing:1.0
ca-central-1 675030665977.dkr.ecr.ca-central-1.amazonaws.com/sagemaker-clarify-processing:1.0
eu-central-1 017069133835.dkr.ecr.eu-central-1.amazonaws.com/sagemaker-clarify-processing:1.0
eu-west-1 131013547314.dkr.ecr.eu-west-1.amazonaws.com/sagemaker-clarify-processing:1.0
eu-west-2 440796970383.dkr.ecr.eu-west-2.amazonaws.com/sagemaker-clarify-processing:1.0
eu-west-3 341593696636.dkr.ecr.eu-west-3.amazonaws.com/sagemaker-clarify-processing:1.0
eu-north-1 763603941244.dkr.ecr.eu-north-1.amazonaws.com/sagemaker-clarify-processing:1.0
me-south-1 835444307964.dkr.ecr.me-south-1.amazonaws.com/sagemaker-clarify-processing:1.0
sa-east-1 520018980103.dkr.ecr.sa-east-1.amazonaws.com/sagemaker-clarify-processing:1.0
af-south-1 811711786498.dkr.ecr.af-south-1.amazonaws.com/sagemaker-clarify-processing:1.0
eu-south-1 638885417683.dkr.ecr.eu-south-1.amazonaws.com/sagemaker-clarify-processing:1.0

如何使用

SageMaker 处理作业在机器学习工作流程的生命周期中的多个阶段使用SageMaker Clarify容器。您可以将 SageMaker Clarify 容器与数据集和模型一起使用,以计算以下类型的分析:

  • 预训练偏差指标

  • 训练后偏差指标

  • 用于说明的 SAP 值

您可以在配置处理作业时控制计算哪些分析。对于预训练偏差指标,您需要提供数据集。您可以通过提供数据集和模型名称,在训练模型后计算训练后偏差指标和可解释性。您必须以 JSON 配置文件的形式配置必要的参数,并将此参数作为输入提供给处理作业。

处理作业完成后,分析结果保存在处理作业ProcessingOutput的参数中指定的输出位置。然后,您可以从该处下载它并查看输出,如果您已在 Studio 中运行笔记本,则可在该页面中查看结果。

为了计算训练后偏差指标和 SAP 值,计算需要获得提供的模型名称的推理。为此,处理作业创建具有模型名称的临时终端节点,称为影子终端节点。计算完成后,处理作业会删除影子终端节点。

概括来说,处理作业将完成以下步骤:

  1. 验证输入和参数。

  2. 创建影子终端节点。

  3. 计算预训练偏差指标。

  4. 计算训练后偏移指标。

  5. 计算本地和全局特征属性。

  6. 删除影子终端节点。

  7. 生成输出文件。

配置处理作业容器的输入和输出参数

处理作业要求您指定以下输入参数:输入名称为 "dataset" S3 对象或前缀的数据集文件,以及输入名称为 S3 "analysis_config" 对象的分析配置文件。作业还需要输出参数:输出位置作为 S3 前缀。

您可以使用 AWS 开发工具包、CLI 或 SageMaker Python 开发工具包CreateProcessingJob通过 SageMaker API 创建并运行处理作业。

使用 SageMaker Python 开发工具包Processor,通过SageMaker Clarify容器映像 URI 创建 :

from sagemaker import clarify clarify_processor = clarify.SageMakerClarifyProcessor(role=role, instance_count=1, instance_type='ml.c5.xlarge', max_runtime_in_seconds=1200, volume_size_in_gb=100)

然后,您还必须为 提供输入和输出参数SageMakerClarifyProcessor。如果您提供 "dataset_uri",则数据集输入是可选的。

dataset_path = "s3://my_bucket/my_folder/train.csv" analysis_config_path = "s3://my_bucket/my_folder/analysis_config.json" analysis_result_path = "s3://my_bucket/my_folder/output" analysis_config_input = ProcessingInput( input_name="analysis_config", source=analysis_config_path, destination="/opt/ml/processing/input/config", s3_data_type="S3Prefix", s3_input_mode="File", s3_compression_type="None") dataset_input = ProcessingInput( input_name="dataset", source=dataset_path, destination="/opt/ml/processing/input/data", s3_data_type="S3Prefix", s3_input_mode="File", s3_compression_type="None") analysis_result_output = ProcessingOutput( source="/opt/ml/processing/output", destination=analysis_result_path, output_name="analysis_result", s3_upload_mode="EndOfJob")

配置分析

分析配置的参数必须在名为“analysis_config.json”的 JSON 文件中提供。该路径必须在名为ProcessingInput“analysis_config”的 参数中提供。下面提供了分析配置文件的示例。在此 JSON 配置文件中,您可以指定以下参数:

  • "version" – (可选)配置文件的架构版本。如果未提供,则使用支持的最新版本。

  • "dataset_type" – 数据集的格式。有效值为 "text/csv" (对于 CSV)和 "application/jsonlines" (对于 JSON 行)。

  • "dataset_uri" – (可选)数据集 S3 前缀/对象 URI(如果未提供为 ProcessingInput)。如果它是前缀,则处理作业以递归方式收集前缀下的所有 S3 文件。

  • "headers" – (可选) 数据集中的列名称的列表。如果dataset_type指定了 "application/jsonlines" "label" 和 ,则最后一个标头应为标签列的标头。

  • "label" – (可选)如果数据集格式为 CSV,则为指定为列名称或索引;如果数据集格式为 JSONLines则为指定为 JSONPath则为指定为列名称或索引的模型的目标属性。

  • "probability_threshold" – (可选) 一个浮点值,用于指示在进行二进制分类时选择二进制标签的阈值。默认值是 0.5。

  • "features" – (可选JSONPath用于在数据集格式为 JSONLines 时查找偏移指标的特征列。

  • "label_values_or_threshold" – (可选)用于指示用于偏差指标的正面结果的标签值或阈值的列表。

  • "facet" – (可选)要用于成对形式的偏差指标的敏感属性(称为分面)的列表,这些特征包括以下内容:

    • "name_or_index" – 分面列名称或索引。

    • "value_or_threshold" – (可选) 分面列可以采用的值或阈值的列表,这些值或阈值指示敏感组,即用于测量偏差的组。如果未提供,则对于每个唯一值,偏差指标将计算为一个组与所有组。如果分面列为数字,则应用此阈值作为下限以选择敏感组。

  • "group_variable" – (可选) 指示要用于偏差指标 Conditional Demographical Disparity 的组变量的列名称或索引。

  • "methods" – 分析和报告的方法及其参数的列表。如果省略任何部分,则不会计算该部分。

    • "pre_training_bias" – (可选)关于预训练偏差指标的部分。

      • "methods" – 要计算的预训练指标的列表。

    • "post_training_bias" – (可选)关于训练后偏差指标的部分。

      • "methods" – 要计算的训练后指标的列表。

    • "shap" – (可选)有关 SAP 值计算的部分。

      • "baseline" – 在内核 SAP 算法中用作基准数据集(也称为后台数据集)的行(至少一行)或 S3 对象 URI 的列表。格式应与数据集格式相同。每行应仅包含特征列/值并忽略标签列/值

      • "num_samples" – 内核 SAP 算法中要使用的样本数。此数字确定生成的合成数据集的大小,以计算SHAP 值。

      • "agg_method" – 全局 SAP 值的聚合方法。有效值如下所示:

        • "mean_abs" – 所有实例的绝对 SAP 值的平均值。

        • "median" – 所有实例的 SAP 值中值。

        • "mean_sq" – 所有实例的 SAP 值平方的平均值。

      • "use_logit" – (可选) 布尔值,指示是否将 logit 函数应用于模型预测。默认值为“false”。如果“use_logit”为 "true" ,则 SAP 值具有 log-ods 单位。

      • "save_local_shap_values" – (可选) 布尔值,用于指示是否将本地 SAP 值保存在输出位置。默认值为 "true"

  • "predictor" – (可选)关于模型参数的部分,如果存在 "shap""post_training_bias" 部分,则是必需的。

    • "model_name" – 模型名称(由 CreateModel API 创建,容器模式为 SingleModel

    • "instance_type" – 影子终端节点的实例类型。

    • "initial_instance_count" – 影子终端节点的实例计数。

    • "content_type" – (可选) 用于通过影子终端节点获取推理的模型输入格式。有效值为 "text/csv" (对于 CSV 和 "application/jsonlines")。默认值与数据集格式相同。

    • "accept_type" – (可选) 用于通过影子终端节点获取推理的模型输出格式。有效值为 "text/csv" (对于 CSV 和 "application/jsonlines")。默认值与 相同content_type

    • "label" – (可选)要使用偏移指标的目标属性的模型输出中的索引或 JSONPath 位置。在 CSV accept_type 情况下,如果未提供它,则假定模型输出是与分数或概率对应的单个数值。

    • "probability" – (可选) 模型输出中用于概率或分数的索引或 JSONPath 位置,以用于可解释性。例如,如果模型输出是具有标签和概率列表的 JSONLines则对于偏差方法,将选择对应于最大概率的标签进行偏差计算。对于可解释性方法,当前将解释所有概率。

    • "label_headers" – (可选) 在数据集中"label"获取的值列表,这些值描述模型终端节点返回的每个分数对应的标签值。它用于提取具有最高分数的标签值作为偏差计算的预测标签。

    • "content_template" – (可选) 用于从数据集实例构造模型输入的模板字符串。它仅在 "content_type" 为 时使用"application/jsonlines"。模板应具有且仅具有一个占位符 $features,它由运行时的功能列表替换。例如,给定 "content_template":"{\"myfeatures\":$features}",如果实例 (无标签) 为 1,2,3,则模型输入将成为 JSONline '{"myfeatures":[1,2,3]}'

  • "report" – (可选)关于报告参数的 部分。如果此部分存在,则会生成报告。

    • "name" – (可选)报告笔记本和 PDF 文件的文件名前缀。默认名称为 "report"

    • "title" – (可选)报告笔记本和 PDF 文件的标题字符串。默认标题为 "SageMaker Analysis Report"

CSV 数据集的示例分析配置 JSON 文件

{ "dataset_type": "text/csv", "headers": [ "feature_0", "feature_1", "feature_2", "feature_3", "target" ], "label": "target", "label_values_or_threshold": [1], "probability_threshold" : 0.7, "facet": [ { "name_or_index" : "feature_1", "value_or_threshold": [1] }, { "name_or_index" : "feature_2", "value_or_threshold": [0.7] } ], "group_variable": "feature_3", "methods": { "shap": { "baseline": [ [ "yes", 3, 0.9, 1 ] ], "num_samples": 1000, "agg_method": "mean", "use_logit": true, "save_local_shap_values": true }, "pre_training_bias": { "methods": "all" }, "post_training_bias": { "methods": "all" }, "report": { "name": "report", "title": "Analysis Report" } }, "predictor": { "model_name": "my_model", "instance_type": "ml.m5.xlarge", "initial_instance_count": 1, "content_type": "text/csv", "accept_type": "text/csv", "label": 0, "probability": 1 } }

CSV 格式的模型输出如下所示:

Current,"[0.028986845165491104, 0.8253824710845947, 0.028993206098675728, 0.02898673340678215, 0.029557107016444206, 0.0290389321744442, 0.02905467338860035]"

对应的预测器配置如下所示:

"predictor": { ..., "accept_type": "text/csv", "label": 0, "probability": 1, ... }

JSONLines 数据集的示例分析配置 JSON 文件

{ "dataset_type": "application/jsonlines", "dataset_uri": "s3://my_bucket/my_folder/dataset.jsonl", "headers": ["Label", "Feature1", "Feature2"], "label": "data.label", "features": "data.features.values", "facet":[ { "name_or_index": "Feature1", "value_or_threshold": [1,5] }, { "name_or_index": "Feature2", "value_or_threshold": [2,6] } ], "methods": { "shap": { "baseline": [ {"data":{"features":{"values":[9,10]},"label":0}}, {"data":{"features":{"values":[11,12]},"label":1}} ] } }, "predictor": { "model_name": "my_jsonl_model", "instance_type": "ml.m5.xlarge", "initial_instance_count": 1 } }

数据集为 S3 前缀如下所示:

"dataset_uri": "s3://my_bucket/my_folder"

Dataset as S3 object (数据集为 S3 对象) 如下所示:

"dataset_uri": "s3://my_bucket/my_folder/train.csv"

基准为 S3 对象,如下所示:

"baseline": "s3://my_bucket/my_folder/baseline.csv"

JSONLines 形式的模型输出如下所示:

{"predicted_label": "Current", "score": "[0.028986845165491104, 0.8253824710845947, 0.028993206098675728, 0.02898673340678215, 0.029557107016444206, 0.0290389321744442, 0.02905467338860035]"}

对应的预测器配置如下所示:

"predictor": { ..., "accept_type": "application/jsonlines", "label": "predicted_label", "probability": "score", ... }