説明を取得する

このガイドでは、Vertex AI の Model リソースから説明を取得する方法について説明します。次の 2 つの方法で説明を取得できます。

  • オンライン説明: Vertex AI API への同期リクエスト。特徴属性を含む予測を返すオンライン予測と似ています。

  • バッチの説明: 特徴属性を含む予測を返す Vertex AI API への非同期リクエスト。バッチの説明は、バッチ予測リクエストのオプション部分です。

始める前に

説明を取得する前に、次のことを行う必要があります。

  1. このステップは、使用する ML モデルのタイプによって異なります。

  2. オンライン説明を取得するには、前の手順で作成した ModelEndpoint リソースにデプロイします

オンライン説明を取得する

オンライン説明を取得する場合は、オンライン予測の場合とほぼ同様の手順を行います。ただし、projects.locations.endpoints.predict リクエストを Vertex AI API に送信する代わりに、projects.locations.endpoints.explain リクエストを送信します。

次のガイドでは、オンライン説明のリクエストの準備と送信について詳しく説明します。

バッチ説明を取得する

特徴ベースのバッチ説明のみがサポートされています。サンプルベースのバッチ説明は取得できません

バッチの説明を取得するには、バッチ予測ジョブの作成時に generateExplanation フィールドtrue に設定します。

バッチ予測ジョブの準備と作成の詳細な手順については、バッチ予測の取得をご覧ください。

Vertex AI Workbench ユーザー管理ノートブックで説明をローカルで取得する

Vertex AI Workbench ユーザー管理ノートブックでは、カスタム トレーニング モデルの説明を生成できます。ノートブックのローカル カーネルまたはランタイム内で Vertex Explainable AI を実行することで、Vertex AI にモデルをデプロイすることなく説明を取得できます。ローカルの説明を使用すると、変更ごとに Vertex AI モデルのデプロイを調整しなくても、さまざまな Vertex Explainable AI 設定を試すことができます。これにより、さまざまなベースラインを使用した場合や、説明ごとに異なる可視化設定をした場合、また、アルゴリズムで使用されるステップまたはパスを調整した場合の影響を簡単かつ迅速に評価できます。

ローカルの説明を使用できるのは、ユーザー管理ノートブック内だけです。この機能は、ユーザー管理ノートブック インスタンスの外部で実行される Jupyter ノートブックでは動作しません。

ユーザー管理ノートブック インスタンスを使用してローカルに説明を生成するには:

  • ユーザー管理ノートブック インスタンスを作成します
  • ユーザー管理ノートブック インスタンスから JupyterLab 環境を起動し、ノートブックを作成またはインポートします。
  • モデル アーティファクトをノートブックのローカル環境または Cloud Storage バケットに保存します。
  • モデルを記述する説明メタデータを生成して保存し、説明リクエストを構成します。

同時説明を取得する

Explainable AI は同時説明をサポートしています。同時説明では、説明メソッドごとにモデルを個別にデプロイすることなく、デプロイされた同じモデル エンドポイントから特徴ベースの説明とサンプルベースの説明の両方をリクエストできます。

同時説明を取得するには、モデルをアップロードして、サンプルベースの説明または特徴ベースの説明を構成します。その後、通常どおりモデルをデプロイします。

モデルをデプロイした後は、通常どおり、構成された説明をリクエストできます。また、concurrent_explanation_spec_override を指定することで、同時説明をリクエストできます。

同時説明を使用する場合は、次の点に注意してください。

  • 同時説明は、v1beta1 API バージョンでのみ使用できます。Vertex Python SDK を使用している場合、同時説明を使用するには preview モデルを使用する必要があります。
  • 特徴ベースの説明を使用してデプロイした後に、サンプルベースの説明をリクエストすることはできません。サンプルベースの説明と特徴ベースの説明の両方が必要な場合は、サンプルベースの説明を使用してモデルをデプロイし、同時説明フィールドを使用して特徴ベースの説明をリクエストします。
  • 同時説明では、バッチ説明はサポートされていません。この機能を使用する唯一の方法はオンライン説明です。

ユーザー管理ノートブックで Explainable AI SDK を使用する

Explainable AI SDK は、ユーザー管理ノートブック インスタンスにプリインストールされています。ノートブック内で Explainable AI SDK を使用することで、モデル アーティファクトを保存し、説明リクエストのモデルの入出力に関するメタデータを自動的に識別できます。他のパラメータを指定して説明リクエストを構成し、説明の結果を可視化することもできます。

モデルとメタデータは、ノートブックのローカル環境または Cloud Storage バケットに保存できます。TensorFlow を使用している場合は、save_model_with_metadata() メソッドを使用してモデルの入力と出力を推定し、この説明メタデータをモデルに保存できます。

次に、load_model_from_local_path() を使用して Explainable AI SDK にモデルを読み込みます。必要に応じて、特定の Vertex Explainable AI アルゴリズムの構成を調整できます。たとえば、サンプリングされた Shapley に使用するパスの数や、統合勾配や XRAI に使用するステップ数を変更できます。

最後に、データのインスタンスで explain() を呼び出し、特徴アトリビューションを可視化します。

次のサンプルコードを使用して、ユーザー管理ノートブック インスタンス内で TensorFlow 2 モデルのローカルの説明を取得できます。

# This sample code only works within a user-managed notebooks instance.
import explainable_ai_sdk
from explainable_ai_sdk.metadata.tf.v2 import SavedModelMetadataBuilder

metadata_and_model_builder = SavedModelMetadataBuilder('LOCAL_PATH_TO_MODEL')
metadata_and_model_builder.save_model_with_metadata('LOCAL_PATH_TO_SAVED_MODEL_ARTIFACT')

# Load the model and adjust the configuration for Explainable AI parameters
num_paths = 20
model_artifact_with_metadata = explainable_ai_sdk.load_model_from_local_path(
    'LOCAL_PATH_TO_SAVED_MODEL_ARTIFACT',
    explainable_ai_sdk.SampledShapleyConfig(num_paths))

# Explainable AI supports generating explanations for multiple predictions
instances = [{feature_a: 10, feature_2: 100,...}, ... ]
explanations = model_artifact_with_metadata.explain(instances)
explanations[0].visualize_attributions()

さまざまな構成やパラメータなど、Explainable AI SDK の詳細については、GitHub にある SDK の config.py ファイルをご覧ください。詳しくは、Vertex AI Workbench ユーザー管理ノートブックをご覧ください。

トラブルシューティング

このセクションでは、説明の取得中に問題が発生した場合に役立つトラブルシューティングの手順について説明します。

エラー: リスト インデックスが範囲外です

説明をリクエストしたときに次のエラー メッセージが表示された場合:

"error": "Explainability failed with exception: listindex out of range"

オブジェクトの配列を想定しているフィールドに空の配列を渡していないことを確認します。たとえば、field1 がオブジェクトの配列を受け入れる場合、次のリクエスト本文はエラーになる可能性があります。

{
  "instances": [
    {
      "field1": [],
    }
  ]
}

代わりに、配列が空でないようにします。次に例を示します。

{
  "instances": [
    {
      "field1": [
        {}
      ],
    }
  ]
}

次のステップ