バイアス分析と説明可能性のために SageMaker Clarify 処理ジョブを実行する - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

バイアス分析と説明可能性のために SageMaker Clarify 処理ジョブを実行する

SageMaker Clarify を使用してデータとモデルにバイアスや説明可能性がないかを分析するには、 SageMaker Clarify 処理ジョブを設定する必要があります。このガイドでは、 SageMaker Python SDK API を使用してジョブの入力、出力、リソース、分析設定を構成する方法を示しますSageMakerClarifyProcessor

API は API の高レベルのラッパーとして機能します SageMaker CreateProcessingJob。これにより、 SageMaker Clarify 処理ジョブの設定に関連する多くの詳細が非表示になります。ジョブをセットアップする詳細には、 SageMaker Clarify コンテナイメージ URI の取得と分析設定ファイルの生成が含まれます。以下の手順は、 SageMaker Clarify 処理ジョブを設定、初期化、起動する方法を示しています。

API を使用して SageMaker Clarify 処理ジョブを設定する
  1. ジョブ設定の各部分の設定オブジェクトを定義します。これらの部分には、以下が含まれます。

    • 入力データセットと出力場所: DataConfig

    • 分析するモデルまたはエンドポイント: ModelConfig

    • バイアス分析パラメータ: BiasConfig

    • SHapley Additive exPlanations (SHAP) 分析パラメーター: SHAPConfig

    SageMaker Clarify 処理ジョブの設定オブジェクトは、データ形式やユースケースによって異なります。CSV 形式と JSON Lines 形式の表形式データ、自然言語処理 (NLP)、computer vision の問題の設定例については、次のセクションで説明します。

  2. SageMakerClarifyProcessor オブジェクトを作成し、ジョブリソースを指定するパラメータで初期化します。これらのリソースには、使用するコンピューティングインスタンスの数などのパラメータが含まれます。

    以下のコード例は、SageMakerClarifyProcessor オブジェクトを作成し、1 つの ml.c4.xlarge コンピューティングインスタンスを使用して分析を行うように指示する方法を示しています。

    from sagemaker import clarify clarify_processor = clarify.SageMakerClarifyProcessor( role=role, instance_count=1, instance_type='ml.c4.xlarge', sagemaker_session=session, )
  3. ジョブを起動するためのユースケースの設定オブジェクトを使用して、 SageMakerClarifyProcessor オブジェクトの特定の実行メソッドを呼び出します。これらの実行メソッドには、次のものがあります。

    • run_pre_training_bias

    • run_post_training_bias

    • run_bias

    • run_explainability

    • run_bias_and_explainability

    この SageMakerClarifyProcessor がバックグラウンドでいくつかのタスクを処理します。これらのタスクには、 SageMaker Clarify コンテナイメージユニバーサルリソース識別子 (URI) の取得、提供された設定オブジェクトに基づく分析設定ファイルの作成、Amazon S3 バケットへのファイルのアップロード、 SageMaker Clarify 処理ジョブ の設定が含まれます

    以下の展開可能なセクションでは、トレーニング前トレーニング後のバイアスメトリクスSHAP 値部分依存プロット (PDPs) を計算する方法を示しています。各セクションでは、以下のデータ型における特徴量重要度を示しています。

    • CSV 形式または JSON Lines 形式の表形式データセット

    • 自然言語処理 (NLP) データセット

    • コンピュータービジョンデータセット

Spark を使用して分散トレーニングで並列 SageMaker Clarify 処理ジョブを実行するためのガイドは、「拡張可能な」セクションに従います。

次の例は、CSV 形式の表形式データセットのバイアス分析と説明可能性分析を設定する方法を示しています。これらの例では、受信データセットには 4 つの特徴量列と 1 つの二項ラベル列、Target があります データセットの内容は以下のようになります。ラベル値 1 は 結果は肯定的な結果を示します。

Target,Age,Gender,Income,Occupation 0,25,0,2850,2 1,36,0,6585,0 1,22,1,1759,1 0,48,0,3446,1 ...

この DataConfig オブジェクトは、入力データセットと出力の保存場所を指定します。s3_data_input_path パラメータは、データセットファイルの URI または Amazon S3 URI プレフィックスのいずれかになります。S3 URI プレフィックスを指定すると、 SageMaker Clarify 処理ジョブはプレフィックスの下にあるすべての Amazon S3 ファイルを再帰的に収集します。の値は、分析結果を保持する S3 URI プレフィックスs3_output_pathである必要があります。 はコンパイルs3_output_path中に SageMaker を使用し、ランタイムに使用される SageMaker パイプラインパラメータ、プロパティExecutionVariable、式、または の値を取得することはできません。次のコード例は、前のサンプル入力データセットのデータ設定を指定する方法を示しています。

data_config = clarify.DataConfig( s3_data_input_path=dataset_s3_uri, dataset_type='text/csv', headers=['Target', 'Age', 'Gender', 'Income', 'Occupation'], label='Target', s3_output_path=clarify_job_output_s3_uri, )

CSV データセットのトレーニング前のバイアスメトリクスをすべて計算する方法

次のコードサンプルは、Gender 値が 0 のサンプルに対する前のサンプル入力のバイアスを測定するように BiasConfig オブジェクトを設定する方法を示しています。

bias_config = clarify.BiasConfig( label_values_or_threshold=[1], facet_name='Gender', facet_values_or_threshold=[0], )

次のコード例は、run ステートメントを使用して、入力データセットのトレーニング前のバイアスメトリクスをすべて計算する SageMaker Clarify 処理ジョブを起動する方法を示しています。

clarify_processor.run_pre_training_bias( data_config=data_config, data_bias_config=bias_config, methods="all", )

または、トレーニング前のバイアス指標のリストをメソッドパラメータに割り当てて、計算するメトリクスを選択することもできます。例えば、 を methods="all"に置き換えると、 SageMaker Clarify プロセッサはクラスの不均衡とラベル の比率の差のみを計算するようmethods=["CI", "DPL"]指示されます。 https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-data-bias-metric-true-label-imbalance.html

CSV データセットのトレーニング前バイアスメトリクスをすべて計算する方法

トレーニング前のバイアスメトリクスはトレーニング前に計算できます。ただし、トレーニング後のバイアスメトリクスを計算するには、トレーニング済みのモデルが必要です。次の出力例は、データを CSV 形式で出力する二項分類モデルからのものです。この出力例では、各行に 2 つの列が含まれています。1 列目には予測ラベルが含まれ、2 列目にはそのラベルの確率値が含まれます。

0,0.028986845165491 1,0.825382471084594 ...

次の設定例では、 ModelConfig オブジェクトは SageMaker モデルをエフェメラルエンドポイントにデプロイするようにジョブに指示します。エンドポイントは 1 つの ml.m4.xlarge 推論インスタンスを使用します。パラメータ content_typeaccept_type は設定されていないため、自動的にパラメータ dataset_type の値、つまり text/csv が使用されます。

model_config = clarify.ModelConfig( model_name=your_model, instance_type='ml.m4.xlarge', instance_count=1, )

次の設定例では、ラベルインデックスが ModelPredictedLabelConfig0 オブジェクトを使用しています。これにより、モデル出力の最初の列で予測ラベルを検索するように SageMaker Clarify 処理ジョブに指示します。この例では、処理ジョブは 0 から始まるインデックスを使用しています。

predicted_label_config = clarify.ModelPredictedLabelConfig( label=0, )

次のコード例では、前の設定例と組み合わせて SageMaker Clarify 処理ジョブを起動し、トレーニング後のバイアスメトリクスをすべて計算します。

clarify_processor.run_post_training_bias( data_config=data_config, data_bias_config=bias_config, model_config=model_config, model_predicted_label_config=predicted_label_config, methods="all", )

同様に、トレーニング後のバイアスメトリクスのリストを methods パラメータに割り当てて、計算するメトリクスを選択することもできます。例えば、methods=“all”methods=["DPPL", "DI"] に置き換えると、予測ラベルの正の割合の差異種の影響のみを計算します。

CSV データセットのバイアスメトリクスをすべて計算する方法

次の設定例は、トレーニング前とトレーニング後のバイアスメトリクスを 1 つの SageMaker Clarify 処理ジョブですべて実行する方法を示しています。

clarify_processor.run_bias( data_config=data_config, bias_config=bias_config, model_config=model_config, model_predicted_label_config=predicted_label_config, pre_training_methods="all", post_training_methods="all", )

SageMaker Studio Classic で SageMaker Clarify 処理ジョブを実行してバイアスを検出する方法を説明するノートブックの例については、「Fairness and Explainability with SageMaker Clarify」を参照してください。

CSV データセットの SHAP 値を計算する方法

SageMaker Clarify は、KernelSHAP アルゴリズム を使用して特徴量属性を提供します。 SHAP分析には予測ラベルではなく確率値またはスコアが必要であるため、このModelPredictedLabelConfigオブジェクトには確率インデックス があります1。これにより、 SageMaker Clarify 処理ジョブは、モデル出力の 2 列目から確率スコアを抽出するように指示されます (ゼロから始まるインデックス作成を使用)。

probability_config = clarify.ModelPredictedLabelConfig( probability=1, )

SHAPConfig オブジェクトは SHAP 分析パラメータを提供します。この例では、SHAP baseline パラメータは省略され、num_clusters パラメータの値は 1 です。これにより、入力データセットのクラスタリングに基づいて 1 つのSHAPベースラインサンプルを計算するように SageMaker Clarify プロセッサに指示します。ベースラインデータセットを選択する場合は、「SHAP Baselines for Explainability」を参照してください。

shap_config = clarify.SHAPConfig( num_clusters=1, )

次のコード例では、 SageMaker Clarify 処理ジョブを起動してSHAP値を計算します。

clarify_processor.run_explainability( data_config=data_config, model_config=model_config, model_scores=probability_config, explainability_config=shap_config, )

SageMaker Studio Classic で SageMaker Clarify 処理ジョブを実行してSHAP値を計算する方法を説明するノートブックの例については、 SageMaker 「Clarify による公平性と説明可能性」を参照してください。

CSV データセットの部分依存プロット (PDPs) を計算する方法

PDPs はその他すべての特徴量を一定に保ちながら、予測されるターゲットレスポンスが対象となる 1 つ以上の入力特徴量に依存することを示します。PDP における上向きの傾斜線または曲線は、ターゲット特徴量と入力特徴量の関係が正であることを示し、急勾配は関係の強さを示します。下向きの線または曲線は、入力特徴量が減少するとターゲット変数が増加することを示します。直感的に、部分依存を対象となる各入力特徴量に対するターゲット変数のレスポンスとして解釈できます。

次の設定例は、 PDPConfig オブジェクトを使用して、 SageMaker Clarify 処理ジョブにIncome特徴量の重要性を計算するように指示する場合です。

pdp_config = clarify.PDPConfig( features=["Income"], grid_resolution=10, )

前の例では、grid_resolution パラメータは Income 特徴量値の範囲を 10 バケットに分割しています。 SageMaker Clarify 処理ジョブは、X 軸上の10セグメントにIncome分割PDPsするために を生成します。Y 軸には、ターゲット変数に対する Income のわずかな影響が示されます。

次のコード例では、 SageMaker Clarify 処理ジョブを起動して を計算しますPDPs。

clarify_processor.run_explainability( data_config=data_config, model_config=model_config, model_scores=probability_config, explainability_config=pdp_config, )

SageMaker Studio Classic で SageMaker Clarify 処理ジョブを実行して を計算する方法を説明するノートブックの例についてはPDPs、「Explainability with SageMaker Clarify - Partial Dependence Plots (PDP)」を参照してください。

CSV データセットの SHAP 値と PDPs の両方を計算する方法

1 つの SageMaker Clarify 処理ジョブPDPsで と の両方SHAPの値を計算できます。以下の設定例では、新しい PDPConfig オブジェクトの top_k_features パラメータが 2 に設定されています。これにより、 SageMaker Clarify 処理ジョブは、グローバルSHAP値が最も大きい2機能PDPsに対して を計算するように指示されます。

shap_pdp_config = clarify.PDPConfig( top_k_features=2, grid_resolution=10, )

次のコード例では、 SageMaker Clarify 処理ジョブを起動して、 と の両方SHAPの値を計算しますPDPs。

clarify_processor.run_explainability( data_config=data_config, model_config=model_config, model_scores=probability_config, explainability_config=[shap_config, shap_pdp_config], )

次の例は、表形式データセットのバイアス分析と説明可能性分析を >SageMaker JSON Lines 高密度形式で設定する方法を示しています。詳細については、「JSONLINES リクエストの形式」を参照してください。これらの例では、受信データセットのデータは前のセクションと同じですが、JSON Lines 形式になっています。各行は有効な JSON オブジェクトです。Features キーは特徴量値の配列を指し、Label キーはグラウンドトゥルースラベルを指します。

{"Features":[25,0,2850,2],"Label":0} {"Features":[36,0,6585,0],"Label":1} {"Features":[22,1,1759,1],"Label":1} {"Features":[48,0,3446,1],"Label":0} ...

次の設定例では、DataConfig オブジェクトは入力データセットと出力を保存する場所を指定します。

data_config = clarify.DataConfig( s3_data_input_path=jsonl_dataset_s3_uri, dataset_type='application/jsonlines', headers=['Age', 'Gender', 'Income', 'Occupation', 'Target'], label='Label', features='Features', s3_output_path=clarify_job_output_s3_uri, )

前の設定例では、 SageMaker Clarify 処理ジョブが各レコードから特徴量の配列を抽出Featuresできるように、特徴量パラメータが JMESPath 式に設定されています。label パラメータは JMESPath 式に設定Labelされ、 SageMaker Clarify 処理ジョブが各レコードからグラウンドトゥルースラベルを抽出できるようにします。s3_data_input_path パラメータは、データセットファイルの URI または Amazon S3 URI プレフィックスのいずれかになります。S3 URI プレフィックスを指定すると、 SageMaker Clarify 処理ジョブはプレフィックスの下にあるすべての S3 ファイルを再帰的に収集します。の値は、分析結果を保持する S3 URI プレフィックスs3_output_pathである必要があります。 はコンパイルs3_output_path中に SageMaker を使用し、実行時に使用される SageMaker パイプラインパラメータ、プロパティExecutionVariable、式、または の値を取得することはできません。

トレーニング後のバイアスメトリクスまたは特徴量重要度を計算するには、トレーニング済みのモデルが必要です。次の例は、この例の形式で JSON Lines データを出力する二項分類モデルからのものです。モデル出力の各行は有効な JSON オブジェクトです。キー predicted_label は予測ラベルを指し、キー probability は確率値を指します。

{"predicted_label":0,"probability":0.028986845165491} {"predicted_label":1,"probability":0.825382471084594} ...

次の設定例では、 ModelConfig オブジェクトは SageMaker Clarify 処理ジョブに SageMaker モデルをエフェメラルエンドポイントにデプロイするように指示します。エンドポイントは 1 つの ml.m4.xlarge 推論インスタンスを使用します。

model_config = clarify.ModelConfig( model_name=your_model, instance_type='ml.m4.xlarge', instance_count=1, content_template='{"Features":$features}', )

前の設定例では、パラメータ content_typeaccept_type は設定されていません。そのため、DataConfig オブジェクトの dataset_type パラメータの値、つまり application/jsonlines が自動的に使用されます。 SageMaker Clarify 処理ジョブは、 content_templateパラメータを使用して$features、プレースホルダーを特徴量の配列に置き換えることでモデル入力を構成します。

以下の設定例は、ModelPredictedLabelConfig オブジェクトの label パラメータを JMESPath 式の predicted_label に設定する方法を示しています。これにより、モデルの出力から予測ラベルが抽出されます。

predicted_label_config = clarify.ModelPredictedLabelConfig( label='predicted_label', )

以下の設定例は、ModelPredictedLabelConfig オブジェクトの probability パラメータを JMESPath 式の probability に設定する方法を示しています。これにより、モデル出力からスコアが抽出されます。

probability_config = clarify.ModelPredictedLabelConfig( probability='probability', )

JSON Lines 形式のデータセットのバイアスメトリクスと特徴量重要度を計算するには、CSV データセットの前のセクションと同じ run ステートメントと設定オブジェクトを使用します。 SageMaker Studio Classic で SageMaker Clarify 処理ジョブを実行して、バイアスを検出し、特徴量の重要度を計算できます。手順とノートブックの例については、 SageMaker 「Clarify による公平性と説明可能性 (JSON Lines Format)」を参照してください。

SageMaker Clarify は、自然言語処理 (NLP) モデルの説明をサポートしています。これらの説明は、テキストのどのセクションがモデル予測にとって最も重要かを理解するのに役立ちます。入力データセットの単一インスタンスのモデル予測、またはベースラインデータセットからのモデル予測のいずれかを説明できます。モデルの動作を理解して視覚化するために、複数の粒度レベルを指定できます。そのためには、テキストセグメントの長さ (トークン、センテンス、パラグラフなど) を定義します。

SageMaker Clarify NLP の説明可能性は、分類モデルと回帰モデルの両方と互換性があります。 SageMaker Clarify を使用して、テキスト、カテゴリ、または数値特徴を含むマルチモーダルデータセットでのモデルの動作を説明することもできます。マルチモーダルデータセットの NLP 説明可能性は、各機能がモデルの出力にとってどの程度重要であるかを理解するのに役立ちます。 SageMaker Clarify は 62 の言語をサポートし、複数の言語を含むテキストを処理できます。

次の例は、NLP の特徴量重要度を計算する分析設定ファイルを示しています。この例では、受信データセットは CSV 形式の表形式データセットで、1 つの二項ラベル列と 2 つの特徴量列があります。

0,2,"Flavor needs work" 1,3,"They taste good" 1,5,"The best" 0,1,"Taste is awful" ...

次の設定例は、DataConfig オブジェクトを使用して CSV 形式の入力データセットと出力データパスを指定する方法を示しています。

nlp_data_config = clarify.DataConfig( s3_data_input_path=nlp_dataset_s3_uri, dataset_type='text/csv', headers=['Target', 'Rating', 'Comments'], label='Target', s3_output_path=clarify_job_output_s3_uri, )

前の設定例では、 s3_data_input_pathパラメータはデータセットファイルの URI または Amazon S3 URI プレフィックスのいずれかになります。S3 URI プレフィックスを指定すると、 SageMaker Clarify 処理ジョブはプレフィックスの下にあるすべての S3 ファイルを再帰的に収集します。の値は、分析結果を保持する S3 URI プレフィックスs3_output_pathである必要があります。 はコンパイルs3_output_path中に SageMaker を使用し、ランタイムに使用されるパイプラインパラメータ、プロパティExecutionVariable、式、または の値 SageMakerを取得することはできません。

次の出力例は、前の入力データセットでトレーニングされた二項分類モデルから作成されたものです。分類モデルは CSV データを受け入れ、01 の間の 1 つのスコアを出力します。

0.491656005382537 0.569582343101501 ...

次の例は、 SageMaker モデルをデプロイするように ModelConfig オブジェクトを設定する方法を示しています。この例では、エフェメラルエンドポイントがモデルをデプロイします。このエンドポイントは GPU を備えた ml.g4dn.xlarge 推論インスタンスを 1 つ使用して、推論を高速化します。

nlp_model_config = clarify.ModelConfig( model_name=your_nlp_model_name, instance_type='ml.g4dn.xlarge', instance_count=1, )

次の例は、インデックス 0 の最初の列に確率 (スコア) を配置するように ModelPredictedLabelConfig オブジェクトを設定する方法を示しています。

probability_config = clarify.ModelPredictedLabelConfig( probability=0, )

以下の SHAP 設定の例は、英語のモデルとデータセットを使用してトークンごとの説明可能性分析を実行する方法を示しています。

text_config = clarify.TextConfig( language='english', granularity='token', ) nlp_shap_config = clarify.SHAPConfig( baseline=[[4, '[MASK]']], num_samples=100, text_config=text_config, )

前の例では、TextConfig オブジェクトが NLP 説明可能性分析を有効にします。granularity パラメータは、分析がトークンを解析する必要があることを示します。英語では、各トークンは単語です。その他の言語については、 SageMaker Clarify が NLP 処理に使用するトークン分割 に関する spaCy ドキュメントを参照してください。前の例では平均 Rating 4 を使用してインプレースの SHAP ベースラインインスタンスを設定する方法も示しています。特別なマスクトークン [MASK] は、Comments 内のトークン (単語) を置き換えるために使用します。

前の例では、インスタンスが2,"Flavor needs work" の場合、次のベースラインを使用してベースラインを平均 Rating 4 に設定します。

4, '[MASK]'

前の例では、 SageMaker Clarify の説明子は次のように各トークンを繰り返し処理し、マスクに置き換えます。

2,"[MASK] needs work" 4,"Flavor [MASK] work" 4,"Flavor needs [MASK]"

その後、 SageMaker Clarify の説明子は各行を予測のためにモデルに送信します。これは、explainer がマスクされた単語の有無にかかわらず予測を学習できるようにするためです。次に、 SageMaker Clarify の説明者はこの情報を使用して各トークンの寄与度を計算します。

次のコード例では、 SageMaker Clarify 処理ジョブを起動してSHAP値を計算します。

clarify_processor.run_explainability( data_config=nlp_data_config, model_config=nlp_model_config, model_scores=probability_config, explainability_config=nlp_shap_config, )

NLP の説明可能性分析のために SageMaker Studio Classic で SageMaker Clarify 処理ジョブを実行する方法を説明するノートブックの例については、「Explaining Text Sentiment Analysis Using SageMaker Clarify」を参照してください。

SageMaker Clarify は、コンピュータビジョンモデルが画像内のオブジェクトをどのように分類して検出するかについてのインサイトを提供するヒートマップを生成します。

次の設定の例では、入力データセットは JPEG 画像で構成されています。

cv_data_config = clarify.DataConfig( s3_data_input_path=cv_dataset_s3_uri, dataset_type="application/x-image", s3_output_path=clarify_job_output_s3_uri, )

前の設定例では、 DataConfig オブジェクトには Amazon S3 URI プレフィックスへの s3_data_input_pathセットが含まれています。 SageMaker Clarify 処理ジョブは、 プレフィックスの下にあるすべてのイメージファイルを再帰的に収集します。s3_data_input_path パラメータは、データセットファイルの URI または Amazon S3 URI プレフィックスのいずれかになります。S3 URI プレフィックスを指定すると、 SageMaker Clarify 処理ジョブはプレフィックスの下にあるすべての S3 ファイルを再帰的に収集します。の値は、分析結果を保持する S3 URI プレフィックスs3_output_pathである必要があります。 はコンパイルs3_output_path中に SageMaker を使用し、実行時に使用される SageMaker パイプラインパラメータ、プロパティExecutionVariable、式、または の値を取得することはできません。

画像分類モデルの説明方法

SageMaker Clarify 処理ジョブは、イメージをスーパーピクセルのコレクションとして扱う KernelSHAP アルゴリズムを使用してイメージについて説明します。画像で構成されるデータセットを指定すると、処理ジョブは画像のデータセットを出力します。各画像には、関連するスーパーピクセルのヒートマップが表示されます。

次の設定例は、 SageMaker 画像分類モデルを使用して説明可能性分析を設定する方法を示しています。詳細については、「イメージ分類-MXNet」を参照してください。

ic_model_config = clarify.ModelConfig( model_name=your_cv_ic_model, instance_type="ml.p2.xlarge", instance_count=1, content_type="image/jpeg", accept_type="application/json", )

前の設定例では、your_cv_ic_model という名前のモデルが、入力 JPEG 画像上の動物を分類するようにトレーニングされています。前の例の ModelConfig オブジェクトは、 SageMaker モデルをエフェメラルエンドポイントにデプロイするように SageMaker Clarify 処理ジョブに指示します。エンドポイントは推論を高速化するために、GPU を備えた ml.p2.xlarge 推論インスタンスを 1 つ使用します。

JPEG 画像をエンドポイントに送信すると、エンドポイントはそれを分類してスコアのリストを返します。各スコアはカテゴリ用です。ModelPredictedLabelConfig オブジェクトは、次のように各カテゴリの名前を提供します。

ic_prediction_config = clarify.ModelPredictedLabelConfig( label_headers=['bird', 'cat', 'dog'], )

先ほど入力した ['トリ', 'ネコ', 'イヌ'] の出力例は 0.3,0.6,0.1 です。0.3 は画像をトリとして分類する際の信頼度スコアを表します。

次の SHAP 設定例は、画像分類問題の説明を生成する方法を示しています。この方法では ImageConfig オブジェクトを使用して分析を開始します。

ic_image_config = clarify.ImageConfig( model_type="IMAGE_CLASSIFICATION", num_segments=20, segment_compactness=5, ) ic_shap_config = clarify.SHAPConfig( num_samples=100, image_config=ic_image_config, )

SageMaker Clarify は、画像セグメンテーションのために scikit-learn ライブラリの Simple Linear Iterative Clustering (SLIC) メソッドを使用して特徴を抽出します。先ほどの設定例である model_type パラメータは、画像分類問題のタイプを示しています。パラメータ num_segments は、入力画像でラベル付けされるおおよそのセグメント数を推定します。次に、セグメント数が slic n_segments パラメータに渡されます。

画像の各セグメントはスーパーピクセルと見なされ、各セグメントのローカル SHAP 値が計算されます。パラメータ segment_compactness は scikit-image slic メソッドによって生成される画像セグメントの形状とサイズを決定します。次に、画像セグメントのサイズと形状が slic compactness パラメータに渡されます。

次のコード例では、 SageMaker Clarify 処理ジョブを起動してイメージのヒートマップを生成します。ヒート マップの値が正の場合は、その特徴量がオブジェクト検出の信頼度スコアを高めたことを示しています。負の値は、その特徴量によって信頼度スコアが低下したことを示します。

clarify_processor.run_explainability( data_config=cv_data_config, model_config=ic_model_config, model_scores=ic_prediction_config, explainability_config=ic_shap_config, )

SageMaker Clarify を使用して画像を分類し、その分類について説明するサンプルノートブックについては、 SageMaker 「Clarify による画像分類の説明」を参照してください。

オブジェクト検出モデルを説明する方法

SageMaker Clarify 処理ジョブは、イメージ内のオブジェクトを検出して分類し、検出されたオブジェクトの説明を提供できます。説明のプロセスは以下のとおりです。

  1. 画像オブジェクトはまず、指定されたコレクション内のクラスのいずれかに分類されます。例えば、オブジェクト検出モデルがネコ、イヌ、サカナを認識できる場合、これらの 3 つのクラスはコレクションに含まれます。このコレクションは、label_headers パラメータによって次のように指定されます。

    clarify.ModelPredictedLabelConfig( label_headers=object_categories, )
  2. SageMaker Clarify 処理ジョブは、各オブジェクトの信頼スコアを生成します。信頼度スコアが高い場合は、そのオブジェクトが指定されたコレクション内のいずれかのクラスに属していることを示します。 SageMaker Clarify 処理ジョブは、オブジェクトを区切る境界ボックスの座標も生成します。信頼スコアと境界ボックスの詳細については、「レスポンスの形式」を参照してください。

  3. SageMaker 次に、Clarify はイメージシーン内のオブジェクトの検出についての説明を提供します。「画像分類モデルの説明方法」セクションで説明されている方法が使われます。

次の設定例では、 SageMaker JPEG イメージのオブジェクト検出モデルyour_cv_od_modelをトレーニングして、イメージの欠陥を特定します。

od_model_config = clarify.ModelConfig( model_name=your_cv_ic_model, instance_type="ml.p2.xlarge", instance_count=1, content_type="image/jpeg", accept_type="application/json", )

前の設定例の ModelConfig オブジェクトは、 SageMaker モデルをエフェメラルエンドポイントにデプロイするように SageMaker Clarify 処理ジョブに指示します。このエンドポイントはイメージングを高速化するために、GPU を備えた ml.p2.xlarge 推論インスタンスを 1 つ使用します。

次の設定例では、ModelPredictedLabelConfig オブジェクトが分類用の各カテゴリの名前を提供します。

ic_prediction_config = clarify.ModelPredictedLabelConfig( label_headers=['bird', 'cat', 'dog'], )

次の SHAP 設定例は、オブジェクト検出の説明を生成する方法を示しています。

od_image_config = clarify.ImageConfig( model_type="OBJECT_DETECTION", num_segments=20, segment_compactness=5, max_objects=5, iou_threshold=0.5, context=1.0, ) od_shap_config = clarify.SHAPConfig( num_samples=100, image_config=image_config, )

前の設定例では、ImageConfig オブジェクトが分析を有効にします。model_type パラメータは、問題のタイプがオブジェクト検出であることを示しています。その他のパラメータの詳細については、「分析を設定する」を参照してください。

次のコード例では、 SageMaker Clarify 処理ジョブを起動してイメージのヒートマップを生成します。ヒート マップの値が正の場合は、その特徴量がオブジェクト検出の信頼度スコアを高めたことを示しています。負の値は、その特徴量によって信頼度スコアが低下したことを示します。

clarify_processor.run_explainability( data_config=cv_data_config, model_config=od_model_config, model_scores=od_prediction_config, explainability_config=od_shap_config, )

SageMaker Clarify を使用してイメージ内のオブジェクトを検出し、その予測を説明するサンプルノートブックについては、「Amazon SageMaker Clarify を使用したオブジェクト検出モデルの説明」を参照してください。

SageMaker Clarify 処理ジョブを並列実行する方法

大規模なデータセットを使用する場合は、Apache Spark を使用して SageMaker Clarify 処理ジョブの速度を上げることができます。Spark は、大規模データ処理のための統合分析エンジンです。 SageMaker Clarify プロセッサごとに複数のインスタンスをリクエストすると、 SageMaker Clarify は Spark の分散コンピューティング機能を使用します。

次の設定例は、 SageMakerClarifyProcessorを使用して5コンピューティングインスタンスで SageMaker Clarify プロセッサを作成する方法を示しています。に関連付けられたジョブを実行するにはSageMakerClarifyProcessor、Spark 分散処理を使用して SageMaker Clarify を実行します。

from sagemaker import clarify spark_clarify_processor = clarify.SageMakerClarifyProcessor( role=role, instance_count=5, instance_type='ml.c5.xlarge', )

SHAPConfigsave_local_shap_valuesパラメータを に設定するとTrue、 SageMaker Clarify 処理ジョブはローカルSHAP値をジョブ出力場所に複数のパートファイルとして保存します。

ローカル SHAP 値を入力データセットインスタンスに関連付けるには、DataConfigjoinsource パラメータを使用します。コンピューティングインスタンスを追加する場合は、エフェメラルエンドポイントinstance_countModelConfigの も増やすことをお勧めします。これにより、Spark ワーカーの同時推論リクエストがエンドポイントに過剰な負荷をかけることを防ぎます。具体的には、 endpoint-to-processing インスタンス one-to-one の比率を使用することをお勧めします。