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

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

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

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

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

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

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

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

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

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

    • 非対称シェープリー値分析パラメータ (時系列のみ): AsymmetricShapleyValueConfig

    SageMaker Clarify 処理ジョブの設定オブジェクトは、データ形式やユースケースによって異なります。CSV および JSON Lines 形式の表形式データ、自然言語処理 (NLP)、 computer vision (CV)、および時系列 (TS) の問題の設定例を以下のセクションに示します。

  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行形式の表形式データセット

    • 自然言語処理 (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"に置き換えmethods=["CI", "DPL"]ると、クラス不均衡とラベルの割合の差のみを計算するよう SageMaker Clarify プロセッサに指示します。 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 処理ジョブを実行してバイアスを検出する方法を示すノートブックの例については、 SageMaker 「Clarify による公平性と説明可能性」を参照してください。

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

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

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値を計算する方法を説明するノートブックの例については、「Fairness and Explainability with 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、 SageMaker 「Clarify による説明可能性 - 部分依存プロット (PDP)」を参照してください。

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

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 リクエスト形式」を参照してください。これらの例では、受信データセットのデータは前のセクションと同じですが、Lines JSON 形式です。各行は有効な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, )

前の設定例では、特徴パラメータ が JMESPath式に設定Featuresされ、 SageMaker Clarify 処理ジョブが各レコードから特徴の配列を抽出できるようにします。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 オブジェクトのラベルパラメータをJMESPath式 に設定する方法を示していますpredicted_label。これにより、モデルの出力から予測ラベルが抽出されます。

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

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

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

JSON Lines 形式のデータセットのバイアスメトリクスと特徴量重要度を計算するには、CSVデータセットの前のセクションと同じ実行ステートメントと設定オブジェクトを使用します。 SageMaker Studio Classic で SageMaker Clarify 処理ジョブを実行して、バイアスを検出し、特徴量の重要度を計算できます。手順とノートブックの例については、「Fairness and Explainability with 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データを受け入れ、 と の間の 1 つのスコアを出力0します1

0.491656005382537 0.569582343101501 ...

次の例は、 SageMaker モデルをデプロイするように ModelConfig オブジェクトを設定する方法を示しています。この例では、エフェメラルエンドポイントがモデルをデプロイします。このエンドポイントはml.g4dn.xlarge、高速推論のためにGPU、 を備えた 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 spaCy が処理に使用するトークン化のドキュメントを参照してください。 NLP前の例では平均 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, )

SageMaker Studio Classic でNLP説明可能性分析のために SageMaker Clarify 処理ジョブを実行する方法を示すノートブックの例については、 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 処理ジョブは、イメージをスーパーピクセルのコレクションとして扱うカーネルSHAPアルゴリズムを使用してイメージについて説明します。画像で構成されるデータセットを指定すると、処理ジョブは画像のデータセットを出力します。各画像には、関連するスーパーピクセルのヒートマップが表示されます。

次の設定例は、 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 処理ジョブに指示します。高速推論の場合、エンドポイントは を備えた ml.p2.xlarge 1 つの推論インスタンスを使用しますGPU。

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 を使用してイメージを分類し、その分類を説明するサンプルノートブックについては、「 Explaining Image Classification with SageMaker Clarify」を参照してください。

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

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

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

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

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

次の設定例では、 SageMaker オブジェクト検出モデルyour_cv_od_modelをJPEGイメージでトレーニングして、それらの動物を識別します。

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 処理ジョブに指示します。高速イメージングの場合、このエンドポイントは を備えた ml.p2.xlarge 1 つの推論インスタンスを使用しますGPU。

次の設定例では、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 JSONする方法を示しています。JSON フォーマットの詳細については、「」を参照してくださいJSON リクエスト形式

[ { "item_id": "item1", "timestamp": "2019-09-11", "target_value": 47650.3, "dynamic_feature_1": 0.4576, "dynamic_feature_2": 0.2164, "dynamic_feature_3": 0.1906, "static_feature_1": 3, "static_feature_2": 4 }, { "item_id": "item1", "timestamp": "2019-09-12", "target_value": 47380.3, "dynamic_feature_1": 0.4839, "dynamic_feature_2": 0.2274, "dynamic_feature_3": 0.1889, "static_feature_1": 3, "static_feature_2": 4 }, { "item_id": "item2", "timestamp": "2020-04-23", "target_value": 35601.4, "dynamic_feature_1": 0.5264, "dynamic_feature_2": 0.3838, "dynamic_feature_3": 0.4604, "static_feature_1": 1, "static_feature_2": 2 }, ]

データ設定

次の設定例に示すように、渡された入力データセットのデータを正しく解析する方法を説明可能性ジョブにTimeSeriesDataConfig伝達します。

time_series_data_config = clarify.TimeSeriesDataConfig( target_time_series='[].target_value', item_id='[].item_id', timestamp='[].timestamp', related_time_series=['[].dynamic_feature_1', '[].dynamic_feature_2', '[].dynamic_feature_3'], static_covariates=['[].static_feature_1', '[].static_feature_2'], dataset_format='timestamp_records', )

非対称シェープリー値の設定

を使用してAsymmetricShapleyValueConfig、ベースライン、方向、粒度、サンプル数などの時系列予測モデルの説明分析の引数を定義します。ベースライン値は、関連する時系列、静的共変数、ターゲット時系列の 3 種類のデータすべてに設定されます。AsymmetricShapleyValueConfig 設定は、一度に 1 つの項目の特徴量属性を計算する方法を SageMaker Clarify プロセッサに通知します。次の設定は、 の定義例を示していますAsymmetricShapleyValueConfig

asymmetric_shapley_value_config = AsymmetricShapleyValueConfig( direction="chronological", granularity="fine-grained", num_samples=10, baseline={ "related_time_series": "zero", "static_covariates": { "item1": [0, 0], "item2": [0, 0] }, "target_time_series": "zero" }, )

に指定した値は、キー methodsを持つ のエントリとして分析設定に渡AsymmetricShapleyValueConfigされますasymmetric_shapley_value

モデル設定

SageMaker Clarify プロセッサから送信されるペイロードの構造を制御できます。次のコードサンプルでは、ModelConfig設定オブジェクトは時系列予測の説明可能性ジョブに、JMESPath構文を使用してレコードを '{"instances": $records}' に集約するように指示します。各レコードの構造は、次の record_template で定義されます'{"start": $start_time, "target": $target_time_series, "dynamic_feat": $related_time_series, "cat": $static_covariates}'$start_time$target_time_series、、 $static_covariates$related_time_series、データセット値をエンドポイントリクエスト値にマッピングするために使用される内部トークンであることに注意してください。

model_config = clarify.ModelConfig( model_name=your_model, instance_type='ml.m4.xlarge', instance_count=1, record_template='{"start": $start_time, "target": $target_time_series, "dynamic_feat": $related_time_series, "cat": $static_covariates}', content_template='{"instances": $records}',, time_series_model_config=TimeSeriesModelConfig( forecast={'forecast': 'predictions[*].mean[:2]'} ) )

同様に、キー を使用して分析設定に渡TimeSeriesModelConfigされる forecastの 属性はtime_series_predictor_config、エンドポイントレスポンスからモデル予測を抽出するために使用されます。例えば、エンドポイントバッチレスポンスの例は次のとおりです。

{ "predictions": [ {"mean": [13.4, 3.6, 1.0]}, {"mean": [23.0, 4.7, 3.0]}, {"mean": [3.4, 5.6, 2.0]} ] }

に指定されたJMESPath式forecast{'predictions[*].mean[:2]'}} の場合、予測値は次のように解析されます。

[[13.4, 3.6], [23.0, 4.7], [3.4, 5.6]]

並列 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', )

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

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