Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/tfx/guide/fairness_indicators.md
25118 views

Fairness Indicators

Fairness Indicators は、より広範な Tensorflow ツールキットと連携して、チームが公平性に関する懸念のあるモデルを評価および改善する際の支援を提供するように設計されています。このツールは現在、多くの Google 製品で活発に使用されており、独自のユースケースでお試しいただけるように、BETA バージョンでも提供されています。

Fairness Indicator ダッシュボード

Fairness Indicators とは

Fairness Indicators は二進数とマルチクラスの分類子において一般的に特定される公平性メトリクスを簡単に計算できるようにするためのライブラリです。公平性に関する懸念を評価する多数の既存のツールは大規模なデータセットやモデルであまりうまく動作しません。Google では、十億人ユーザークラスのシステムで動作するツールを重視しており、Fairness Indicators ではあらゆる規模のユースケースを評価することができます。

具体的には、Fairness Indicators には次の機能が含まれています。

  • データセットの分散を評価する

  • 定義されたグループのユーザー間でスライスされたモデルのパフォーマンスを評価する

    • 複数のしきい値での信頼区間と評価により、結果に確証を得られます。

  • 個別のスライスを精査して、根源と改善の機会を探る

こちらのケーススタディには動画とプログラミング演習も含まれており、ユーザー独自の製品で Fairness Indicators を使用して長期間にわたる公平性の懸念を評価する方法を実演しています。

pip パッケージダウンロードには次の項目が含まれています。

TensorFlow Model で Fairness Indicators を使用する

データ

TFMA で Fairness Indicators を使用するには、評価データセットのスライスに使用する特徴量にラベルが付いていることを確認してください。公平性の懸念に使用するスライス特徴量がない場合は、その特徴量のある評価セットを探すか、結果の格差をハイライトする可能性のある特徴量セット内のプロキシ特徴量を検討してください。その他のガイダンスについては、こちらをご覧ください。

モデル

Tensorflow Estimator クラスを使用して、モデルを構築することができます。TFMA では近日 Keras モデルがサポートされる予定です。Keras モデルで TFMA を実行する場合は、以下の「モデルに依存しない TFMA」セクションをご覧ください。

Estimator のトレーニングが完了したら、評価の目的で、保存したモデルをエクスポートする必要があります。詳細については、TFMA ガイドをご覧ください。

スライスを構成する

次の、評価に使用するスライスを定義します。

slice_spec = [ tfma.slicer.SingleSliceSpec(columns=[‘fur color’]) ]

交差スライスを評価する場合(毛の色と高さの両方など)、次のように設定できます。

slice_spec = [ tfma.slicer.SingleSliceSpec(columns=[‘fur_color’, ‘height’]) ]`

公平性メトリクスを計算する

Fairness Indicators コールバックを metrics_callback リストに追加します。コールバックでは、モデルが評価される際のしきい値のリストを定義できます。

from tensorflow_model_analysis.addons.fairness.post_export_metrics import fairness_indicators # Build the fairness metrics. Besides the thresholds, you also can config the example_weight_key, labels_key here. For more details, please check the api. metrics_callbacks = \ [tfma.post_export_metrics.fairness_indicators(thresholds=[0.1, 0.3, 0.5, 0.7, 0.9])] eval_shared_model = tfma.default_eval_shared_model( eval_saved_model_path=tfma_export_dir, add_metrics_callbacks=metrics_callbacks)

この構成を実行する前に、信頼区間の計算を有効にするかどうかを決定してください。信頼区間は Poisson ブートストラップ法を用いて計算され、20 サンプルごとに再計算が必要です。

compute_confidence_intervals = True

TFMA 評価パイプラインを実行します。

validate_dataset = tf.data.TFRecordDataset(filenames=[validate_tf_file]) # Run the fairness evaluation. with beam.Pipeline() as pipeline: _ = ( pipeline | beam.Create([v.numpy() for v in validate_dataset]) | 'ExtractEvaluateAndWriteResults' >> tfma.ExtractEvaluateAndWriteResults( eval_shared_model=eval_shared_model, slice_spec=slice_spec, compute_confidence_intervals=compute_confidence_intervals, output_path=tfma_eval_result_path) ) eval_result = tfma.load_eval_result(output_path=tfma_eval_result_path)

Fairness Indicators をレンダリングする

from tensorflow_model_analysis.addons.fairness.view import widget_view widget_view.render_fairness_indicator(eval_result=eval_result)

Fairness Indicators

Fairness Indicators を使用する際のヒント:

  • 左側のチェックボックスをオンにして、表示するメトリクスを選択します。各メトリクスのグラフは順に、ウィジェットに表示されます。

  • ドロップダウンセレクターを使用して、グラフの最初の棒で示されるベースラインスライスを変更します。デルタはこのベースライン値を使って計算されます。

  • ドロップダウンセレクターを使用して、しきい値を選択します。同一のフラフ上に複数のしきい値を表示することができます。選択されたしきい値は強調して示され、そのしきい値をクリックすると選択が解除されます。

  • スライスのメトリクスを確認するには、棒にマウスポインターを合わせます

  • 「Diff w. baseline」列を使用して、ベースラインとの格差を識別します。現在のスライスとベースラインとの差がパーセント率で示されます。

  • スライスのデータポイントを詳しく探るには、What-If Tool を使用します。こちらで例をご覧ください。

複数のモデルの Fairness Indicators をレンダリングする

Fairness Indicators を使ってモデルを比較することもできます。1 つの eval_result を渡す代わりに、2 つのモデル名を eval_result オブジェクトにマッピングするディクショナリである multi_eval_results オブジェクトを渡します。

from tensorflow_model_analysis.addons.fairness.view import widget_view eval_result1 = tfma.load_eval_result(...) eval_result2 = tfma.load_eval_result(...) multi_eval_results = {"MyFirstModel": eval_result1, "MySecondModel": eval_result2} widget_view.render_fairness_indicator(multi_eval_results=multi_eval_results)

Fairness Indicators - モデルの比較

モデルの比較としきい値の比較を合わせて使用することができます。たとえば、2 つのモデルを 2 セットのしきい値で比較し、公平性メトリクスに最適な組み合わせを見つけ出すことができます。

TensorFlow 以外のモデルで Fairness Indicators を使用する

異なるモデルとワークグローを使用するクライアントをサポートするために、評価対象のモデルに依存しない評価ライブラリを開発しました。

機械学習システムを評価したい方、特に TensorFlow 以外のテクノロジーに基づくモデルを使用している方ならだれでもこれを使用できます。Apache Beam Python SDK を使用してスタンドアロンの TFMA 評価バイナリを作成し、それを実行してモデルを分析することができます。

データ

このステップでは、評価を実行するためのデータセットを作成します。データセットは tf.Example proto 形式であり、ラベル、予測、およびスライスの基準となるその他の特徴量が必要です。

tf.Example { features { feature { key: "fur_color" value { bytes_list { value: "gray" } } } feature { key: "height" value { bytes_list { value: "tall" } } } feature { key: "prediction" value { float_list { value: 0.9 } } } feature { key: "label" value { float_list { value: 1.0 } } } } }

モデル

モデルを指定する代わりに、TFMA がメトリクスを計算するために必要とするデータを分析して提供する、モデルに依存しない評価構成と Extractor を作成します。ModelAgnosticConfig 仕様は、入力 Example から使用される特徴量、予測、およびラベルを定義します。

このためには、ラベルキーと予測キー、および特徴量のデータ型を示す値など、すべての特徴量を表現するキーを伴う特徴量マップを作成します。

feature_map[label_key] = tf.FixedLenFeature([], tf.float32, default_value=[0])

ラベルキー、予測キー、および特徴量マップを使用して、モデルに依存しない構成を作成します。

model_agnostic_config = model_agnostic_predict.ModelAgnosticConfig( label_keys=list(ground_truth_labels), prediction_keys=list(predition_labels), feature_spec=feature_map)

モデルに依存しない Extractor をセットアップする

Extractor は、モデルに依存しない構成を使用して入力から特徴量、ラベル、および予測を抽出するために使用します。さらにデータをスライスする場合は、スライスする列に関する情報を含むスライスキー仕様を定義する必要もあります。

model_agnostic_extractors = [ model_agnostic_extractor.ModelAgnosticExtractor( model_agnostic_config=model_agnostic_config, desired_batch_size=3), slice_key_extractor.SliceKeyExtractor([ slicer.SingleSliceSpec(), slicer.SingleSliceSpec(columns=[‘height’]), ]) ]

公平性メトリクスを計算する

EvalSharedModel の一環として、モデルの評価に使用するすべてのメトリクスを指定できます。メトリクスは、post_export_metricsfairness_indicators で定義されているコールバックのように、メトリクスのコールバックの形態で指定されます。

metrics_callbacks.append( post_export_metrics.fairness_indicators( thresholds=[0.5, 0.9], target_prediction_keys=[prediction_key], labels_key=label_key))

また、評価の実行目的で TensorFlow グラフを作成するために使用される construct_fn も取り込みます。

eval_shared_model = types.EvalSharedModel( add_metrics_callbacks=metrics_callbacks, construct_fn=model_agnostic_evaluate_graph.make_construct_fn( add_metrics_callbacks=metrics_callbacks, fpl_feed_config=model_agnostic_extractor .ModelAgnosticGetFPLFeedConfig(model_agnostic_config)))

すべての準備が完了したら、ExtractEvaluate または ExtractEvaluateAndWriteResults 関数のいずれかを使用し(model_eval_lib が提供する関数)、モデルを評価します。

_ = ( examples | 'ExtractEvaluateAndWriteResults' >> model_eval_lib.ExtractEvaluateAndWriteResults( eval_shared_model=eval_shared_model, output_path=output_path, extractors=model_agnostic_extractors)) eval_result = tensorflow_model_analysis.load_eval_result(output_path=tfma_eval_result_path)

最後に、上記の「Fairness Indicators をレンダリングする」セクションの指示に従って、Fairness Indicators をレンダリングします。

その他の例

Fairness Indicators のサンプルディレクトリには、複数の例が掲載されています。