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

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

配置亚 Amazon SageMaker 澄清处理作业的公平性和解释性

本主题介绍如何配置能够计算偏差指标和功能属性以进行解释的 Amazon SageMaker 澄清处理任务。它是使用专门的 SageMaker 澄清容器图像来实现的。提供了有关如何查找和下载这些容器映像之一的说明。简要概述了 SageMaker 澄清工作原理。介绍了配置处理作业所需的参数和分析类型。概述了先决条件,并提供了有关 SageMaker 澄清处理作业使用的计算资源的一些建议。

Prerequisites

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

  • 您需要以 CSV 或 JSONLINE 格式提供输入数据集作为表格文件。输入数据集必须包含用于偏差分析的标签列。数据集应为机器学习做好准备,并且所需的任何预处理(例如数据清理或特征工程)已经完成。

  • 您需要提供一个支持 CSV 或 JSONLINE 文件格式的模型工件作为其内容类型输入之一。对于训练后偏差指标和解释,我们使用数据集对模型工件进行推断。减去标签列的每一行必须准备好用作推理的有效载荷。

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

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

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

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

SageMaker 澄清容器入门

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

容器的图像 URI 采用以下形式:

<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

下表列出了Amazon区域。

Docker 图像澄清处理作业
区域 映像地址
us-east-1 205585389593. 欧洲-东部-1 亚马逊物流/制造商-澄清处理:1.0
us-east-2 211330385671 克鲁兹-东部-2 亚马逊/制造商-澄清-处理:1.0
us-west-1 740489534195.k.........................................................../
us-west-2 306415355426 克鲁兹-西部-2 亚马逊/制造商-澄清处理:1.0
ap-east-1 098760798382.k.................................................................
ap-south-1 452307495513.K 制造商-加工-加工:1.0
ap-northeast-2 263625296855.kr-东北-2 日亚马逊网络/制造商-澄清加工:1.0
ap-southeast-1 834264409 克鲁兹-东南-1. 亚马逊网络/制造商-澄清加工:1.0
ap-southeast-2 007051062584 克朗-东南-2. 亚马逊网络/制造商-澄清加工:1.0
ap-northeast-1 377024640650.克朗-东北-1 日上网/制造商-澄清加工:1.0
ca-central-1 675030665977.ckr.cn 中部-亚马逊物流/制造商-澄清处理:1.0
eu-central-1 017069133835.kr.欧盟中部-1.亚马逊/造/加工加工:1.0
eu-west-1 131013547314.K 欧洲-西部-1.amazonaw.com/ 制造商-澄清处理:1.0
eu-west-2 440796970383. 欧洲-西部-2. 亚马逊/制造商-澄清-加工:1.0
eu-west-3 341593696636.欧洲-西部-3. 亚马逊/制造商-澄清处理:1.0
eu-north-1 763603941244.kr 欧盟-北方 1. 亚马逊/制造商-澄清-加工:1.0
me-south-1 835444307964 克鲁姆-南-亚马逊/制造商-澄清-加工:1.0
sa-east-1 520018980103.dkr............................................................./
af-south-1 811711786498 克朗加工-南部 1. 亚马逊/制造商-澄清-加工:1.0
eu-south-1 638885417683. 欧洲-南部 1. 亚马逊/制造商-澄清-加工:1.0
cn-north-1 122526803553 克鲁兹-北方 1 天亚马逊/制造商-澄清-加工:1.0
cn-northwest-1 122578899357.kr.cn-西北-1 天亚马逊/制造商-澄清-加工:1.0

如何使用

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

  • 训练前偏差

  • 训练后偏差

  • 用于解释的 SHAP 值

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

处理作业完成后,分析结果将保存在ProcessingOutput处理作业的参数。然后,您可以从那里下载并查看输出,或者如果您在 Studio 中运行了笔记本电脑,则可以在 Studio 中查看结果。

为了计算训练后偏差度量和 SHAP 值,计算需要获得所提供的模型名称的推断。为此,处理作业将创建一个具有模型名称的临时端点,称为影子端点. 处理作业会在计算完成后删除影子端点。

在高层次上,处理作业完成以下步骤:

  1. 验证输入和参数。

  2. 创建阴影端点。

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

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

  5. 计算本地和全局要素属性。

  6. 删除阴影终端节点。

  7. 生成输出文件。

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

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

您可以使用 SageMaker 创建和运行处理作业CreateProcessingJob使用Amazon软件开发工具包或 CLI 或SageMaker Python 开发工具包.

使用 SageMaker Python 软件开发工具包,创建Processor使用 SageMaker 澄清容器图像 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")

配置分析

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

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

  • "dataset_type"— 数据集的格式。有效值为"text/csv"CSV 和"application/jsonlines"JSON 行。

  • "dataset_uri"—(可选)数据集 S3 前缀 /对象URI(如果没有给出ProcessingInput)。如果它是前缀,则处理作业会递归地收集前缀下的所有 S3 文件。

  • "headers"—(可选)数据集中的列名列表。如果dataset_type"application/jsonlines""label",那么最后一个标题应该是标签列的标题。

  • "label"—(可选)要用于的模型的目标属性偏差指标如果数据集格式为 CSV,则指定为列名或索引;如果数据集格式为 JSONLINE,则指定为 JSONPath。

  • "probability_threshold"—(可选)一个浮点值,用于指示在二进制分类的情况下选择二进制标签的阈值。默认值为 0.5。

  • "features"—(可选)JSONPath 用于在数据集格式为 JSONLINE 时定位偏差量度的要素列。

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

  • "facet"—(可选)敏感属性(称为小面)的要素列表,以对形式用于偏差量度,其中包括以下内容:

    • "name_or_index"— 小平面列名称或索引。

    • "value_or_threshold"—(可选)多面列可采用的值或阈值列表,表示敏感组,即用于测量偏差的组。如果未提供,偏差量度将作为一个组计算,而不是每个唯一值的所有偏差量度。如果小平面列为数字,则此阈值将作为下限应用以选择敏感组。

  • "group_variable"—(可选)列名或索引,用于指示要用于偏差度量 有条件的人口差异。

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

    • "pre_training_bias"—(可选)关于训练前偏差度量的部分。

      • "methods"— 要计算的预训练量度的列表。

    • "post_training_bias"—(可选)关于训练后偏差度量的部分。

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

    • "shap"—(可选)关于 SHAP 值计算的部分。

      • "baseline"— 用作内核 SHAP 算法中基线数据集(也称为背景数据集)的行(至少一个)或 S3 对象 URI 的列表。格式应与数据集格式相同。每行应只包含要素列/值,并忽略标签列/值

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

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

        • "mean_abs"— 所有实例的绝对 SHAP 值的平均值。

        • "median"— 所有实例的 SHAP 值的中位数。

        • "mean_sq"— 所有实例的平方 SHAP 值的平均值。

      • "use_logit"—(可选)指示 logit 函数是否应用于模型预测的布尔值。默认值为 "false"。如果 “使用日志” 是"true"那么 SHAP 值具有对数赔率单位。

      • "save_local_shap_values"—(可选)指示本地 SHAP 值是否保存在输出位置的布尔值。默认为 false

  • "predictor"—(可选)关于模型参数的部分,如果"shap""post_training_bias"部分。

    • "model_name"— 模型名称(由CreateModelAPI,容器模式为SingleModel.

    • "instance_type"— 阴影终端节点的实例类型。

    • "initial_instance_count"— 阴影终端节点的实例计数。

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

    • "accept_type"—(可选)模型output格式用于获取阴影端点的推理。有效值为"text/csv"CSV 和"application/jsonlines". 默认值与content_type.

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

    • "probability"—(可选)模型输出中用于解释的概率或分数的索引或 JSONPath 位置。例如,如果模型输出是带有标签和概率列表的 JSOnLine,则对于偏置方法,将为偏置计算选择与最大概率相对应的标签。对于解释方法,目前对所有概率进行了解释。

    • "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, ... }

JSONLINE 数据集的分析配置 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"

作为 S3 对象的数据集如下所示:

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

作为 S3 对象的基线如下所示:

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

JSON线的模型输出如下所示:

{"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", ... }