このページは Cloud Translation API によって翻訳されました。
Switch to English

公平性指標

公平性指標は、より広範なTensorflowツールキットと連携して、公平性の問題のモデルを評価および改善するチームをサポートするように設計されています。このツールは現在、多くの製品で内部的に積極的に使用されており、独自のユースケースを試すためにベータ版で利用できるようになりました。

公平性指標ダッシュボード

公平性指標とは何ですか?

公平性インジケータは、バイナリおよびマルチクラス分類器の一般的に識別される公平性メトリックの簡単な計算を可能にするライブラリです。公平性の懸念を評価するための既存のツールの多くは、大規模なデータセットやモデルではうまく機能しません。 Googleでは、10億ユーザーのシステムで機能するツールを用意することが重要です。公平性指標を使用すると、あらゆる規模のユースケースにわたって評価できます。

特に、公平性指標には次の機能が含まれます。

  • データセットの分布を評価する
  • 定義されたユーザーグループ間でスライスされたモデルのパフォーマンスを評価する
    • 複数のしきい値での信頼区間と評価により、結果に自信を持ちます
  • 個々のスライスを深く掘り下げ、根本的な原因と改善の機会を探る

このケーススタディでは、 ビデオとプログラミングの演習を行い、フェアネスインジケーターを独自の製品の1つで使用して、フェアネスの懸念を長期的に評価する方法を示します。

pipパッケージのダウンロードには以下が含まれます。

Tensorflowモデルでの公平性インジケーターの使用

データ

TFMAでフェアネスインジケーターを実行するには、スライスする機能に評価データセットがラベル付けされていることを確認してください。公平性の懸念に対応する正確なスライス機能がない場合は、機能する評価セットを探すか、結果の差異を強調する機能セット内のプロキシ機能を検討することを検討してください。その他のガイダンスについては、 こちらをご覧ください

型番

Tensorflow Estimatorクラスを使用してモデルを構築できます。 Kerasモデルのサポートは、TFMAでまもなく提供されます。 KerasモデルでTFMAを実行する場合は、以下の「モデルに依存しないTFMA」セクションを参照してください。

Estimatorをトレーニングした後、保存したモデルを評価のためにエクスポートする必要があります。詳細については、 TFMAガイドを参照してください

スライスの構成

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

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

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

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

公平性メトリックの計算

公平性指標コールバックを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)

構成を実行する前に、信頼区間の計算を有効にするかどうかを決定します。信頼区間はポアソンブートストラップを使用して計算され、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)

公平性指標のレンダリング

from tensorflow_model_analysis.addons.fairness.view import widget_view

widget_view.render_fairness_indicator(eval_result=eval_result)

公平性指標

公平性インジケータを使用するためのヒント:

  • 左側のボックスをチェックして、 表示するメトリックを選択します 。各メトリックの個別のグラフがウィジェットに順番に表示されます。
  • ドロップダウンセレクターを使用して、グラフの最初のバーであるベースラインスライスを変更します 。デルタは、このベースライン値を使用して計算されます。
  • ドロップダウンセレクターを使用してしきい値を選択します。同じグラフで複数のしきい値を表示できます。選択したしきい値は太字になり、太字のしきい値をクリックして選択を解除できます。
  • バーカーソルを合わせると、そのスライスのメトリックが表示されます。
  • 現在のスライスとベースラインとの差のパーセンテージを特定する[Diff w。baseline]列を使用して、ベースラインとの差異を特定します。
  • What-Ifツールを使用して、スライスのデータポイントを詳しく 調べます。例については、 こちらをご覧ください。

複数のモデルの公平性インジケーターのレンダリング

フェアネスインジケーターは、モデルの比較にも使用できます。単一の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)

公平性指標-モデルの比較

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

非TensorFlowモデルでの公平性インジケーターの使用

異なるモデルとワークフローを持つクライアントをより適切にサポートするために、評価対象のモデルに依存しない評価ライブラリを開発しました。

特に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 } }
        }
    }
}

型番

モデルを指定する代わりに、モデルにとらわれないeval構成とエクストラクターを作成して、TFMAがメトリックを計算するために必要なデータを解析して提供します。 ModelAgnosticConfig仕様は、入力例から使用される機能、予測、およびラベルを定義します。

このために、ラベルと予測キーを含むすべての機能を表すキーと、機能のデータ型を表す値で機能マップを作成します。

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)

Model Agnostic 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_metricsまたはfairness_indicatorsで定義されているようなメトリックコールバックの形式で提供されます。

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

また、評価を実行するテンソルフローグラフを作成するために使用される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によって提供されるExtractEvaluateまたはExtractEvaluateAndWriteResults関数のExtractEvaluateかを使用して、モデルを評価します。

_ = (
    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)

最後に、上記の「レンダリングの公平性インジケータ」セクションの指示を使用して、フェアネスインジケータをレンダリングします。

その他の例

公平性指標のサンプルディレクトリには、いくつかの例が含まれています。