이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

공정성 지표 사례 Colab

개요

이 활동에서는 공정성 지표를 사용하여 시민 의견 데이터 세트를 탐색합니다. 공정성 지표는 TensorFlow 모델 분석 을 기반으로 구축 된 도구 모음으로, 제품 파이프 라인에서 공정성 지표를 정기적으로 평가할 수 있습니다. 이 소개 비디오 는 공정성 지표를 만드는 주요 동기 중 하나 인 여기에서 제시하는 실제 시나리오에 대한 자세한 내용과 컨텍스트를 제공합니다.

데이터 세트 정보

이 연습에서는 지속적인 연구를 위해 2017 년에 Civil Comments 플랫폼 에서 공개 한 약 2 백만 개의 공개 댓글 인 Civil Comments 데이터 세트 를 사용합니다. 이러한 노력은 Kaggle에서 유독성 댓글을 분류하고 의도하지 않은 모델 편향을 최소화하기 위해 대회를 주최 한 Jigsaw가 후원했습니다.

데이터 세트의 각 개별 텍스트 주석에는 독성 레이블이 있습니다. 데이터 내에서 댓글의 하위 집합은 성별, 성적 지향, 종교, 인종 또는 민족에 대한 카테고리를 포함하여 다양한 정체성 속성으로 라벨이 지정됩니다.

도구 정보

TensorFlow Model Analysis 는 TensorFlow 및 비 TensorFlow 기계 학습 모델을 모두 평가하기위한 라이브러리입니다. 이를 통해 사용자는 분산 방식으로 대량의 데이터에 대한 모델을 평가하고 다른 데이터 조각에 대한 그래프 및 기타 메트릭을 계산하고 노트북에서 시각화 할 수 있습니다.

공정성 지표는 TFMA 위에 구축됩니다. 공정성 지표를 통해 사용자는 다음을 수행 할 수 있습니다.

  • 정의 된 사용자 그룹에 걸쳐 분할 된 모델 성능 평가
  • 여러 임계 값에서 신뢰 구간 및 평가를 통해 결과에 대해 확신

공정성 표시기는 사용자가 다음을 수행 할 수 있도록 TensorFlow 데이터 유효성 검사What-If 도구 와 함께 패키지로 제공됩니다.

  • 데이터 세트 분포 평가
  • What-If Tool을 사용하여 개별 조각을 자세히 살펴보고 근본 원인과 개선 기회를 탐색합니다.

가져 오기

다음 코드를 실행하여 fairness_indicators 라이브러리를 설치하십시오. 이 패키지에는이 연습에서 사용할 도구가 포함되어 있습니다. 런타임 다시 시작이 요청 될 수 있지만 필수는 아닙니다.

pip install -q --upgrade fairness-indicators
ERROR: apache-beam 2.22.0 has requirement oauth2client<4,>=2.0.1, but you'll have oauth2client 4.1.3 which is incompatible.
ERROR: tfx-bsl 0.22.0 has requirement absl-py<0.9,>=0.7, but you'll have absl-py 0.9.0 which is incompatible.
ERROR: tensorflow-model-analysis 0.22.1 has requirement absl-py<0.9,>=0.7, but you'll have absl-py 0.9.0 which is incompatible.
ERROR: tensorflow-transform 0.22.0 has requirement absl-py<0.9,>=0.7, but you'll have absl-py 0.9.0 which is incompatible.
ERROR: tensorflow-data-validation 0.22.0 has requirement absl-py<0.9,>=0.7, but you'll have absl-py 0.9.0 which is incompatible.
ERROR: tensorflow-data-validation 0.22.0 has requirement pandas<1,>=0.24, but you'll have pandas 1.0.4 which is incompatible.

import os
import tempfile
import apache_beam as beam
import numpy as np
import pandas as pd
from datetime import datetime

import tensorflow_hub as hub
import tensorflow as tf
import tensorflow_model_analysis as tfma
import tensorflow_data_validation as tfdv
from tensorflow_model_analysis.addons.fairness.post_export_metrics import fairness_indicators
from tensorflow_model_analysis.addons.fairness.view import widget_view
from fairness_indicators.examples import util

from witwidget.notebook.visualization import WitConfigBuilder
from witwidget.notebook.visualization import WitWidget

데이터 다운로드 및 이해

이 연습에서는 2017 년에 Civil Comments 플랫폼에서 공개 한 약 2 백만 개의 공개 댓글 인 Civil Comments 데이터 세트로 작업합니다. 또한 댓글의 하위 집합에는 다양한 ID 속성으로 레이블이 지정되어 있습니다. 댓글에 언급되었습니다.

편의를 위해 Google Cloud Platform에서 데이터 세트를 호스팅했습니다. 다음 코드를 실행하여 GCP에서 데이터를 다운로드하면 데이터를 다운로드하고 분석하는 데 약 1 분이 걸립니다.

TensorFlow 데이터 유효성 검사는 데이터를 분석하는 데 사용할 수있는 도구 중 하나입니다. 이를 사용하여 누락 된 값 및 데이터 불균형과 같은 데이터에서 공정성 불균형을 초래할 수있는 잠재적 인 문제를 찾을 수 있습니다.














download_original_data = True 

if download_original_data:
  train_tf_file = tf.keras.utils.get_file('train_tf.tfrecord',
                                          'https://storage.googleapis.com/civil_comments_dataset/train_tf.tfrecord')
  validate_tf_file = tf.keras.utils.get_file('validate_tf.tfrecord',
                                             'https://storage.googleapis.com/civil_comments_dataset/validate_tf.tfrecord')

  # The identity terms list will be grouped together by their categories
  # (see 'IDENTITY_COLUMNS') on threshould 0.5. Only the identity term column,
  # text column and label column will be kept after processing.
  train_tf_file = util.convert_comments_data(train_tf_file)
  validate_tf_file = util.convert_comments_data(validate_tf_file)

else:
  train_tf_file = tf.keras.utils.get_file('train_tf_processed.tfrecord',
                                          'https://storage.googleapis.com/civil_comments_dataset/train_tf_processed.tfrecord')
  validate_tf_file = tf.keras.utils.get_file('validate_tf_processed.tfrecord',
                                             'https://storage.googleapis.com/civil_comments_dataset/validate_tf_processed.tfrecord')
Downloading data from https://storage.googleapis.com/civil_comments_dataset/train_tf.tfrecord
1439031296/1439024821 [==============================] - 27s 0us/step
Downloading data from https://storage.googleapis.com/civil_comments_dataset/validate_tf.tfrecord
958767104/958765415 [==============================] - 15s 0us/step

stats = tfdv.generate_statistics_from_tfrecord(data_location=train_tf_file)
tfdv.visualize_statistics(stats)
WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.

Warning:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/stats_util.py:227: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_data_validation/utils/stats_util.py:227: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

이 데이터에서 주목해야 할 몇 가지 흥미로운 사항이 있습니다. 첫 번째는 우리가 예측하는 독성 라벨이 불균형하다는 것입니다. 학습 세트의 예제 중 8 %만이 독성이 있습니다. 즉, 분류자는 모든 댓글이 독성이 없다고 예측하여 92 %의 정확도를 얻을 수 있습니다.

정체성 용어와 관련된 분야의 경우, 108 만 건의 훈련 사례 중 약 6.6k 건만이 동성애를 다루고 있으며 양성애 관련 사례는 훨씬 더 드뭅니다. 이는 학습 데이터 부족으로 인해 이러한 슬라이스의 성능이 저하 될 수 있음을 나타낼 수 있습니다.

상수 정의

여기에서 데이터를 구문 분석하는 데 사용할 기능 맵을 정의합니다. 각 예에는 레이블, 댓글 텍스트, 텍스트와 관련된 sexual orientation , gender , religion , racedisability 정체성이 있습니다.

BASE_DIR = tempfile.gettempdir()

TEXT_FEATURE = 'comment_text'
LABEL = 'toxicity'
FEATURE_MAP = {
    # Label:
    LABEL: tf.io.FixedLenFeature([], tf.float32),
    # Text:
    TEXT_FEATURE:  tf.io.FixedLenFeature([], tf.string),

    # Identities:
    'sexual_orientation':tf.io.VarLenFeature(tf.string),
    'gender':tf.io.VarLenFeature(tf.string),
    'religion':tf.io.VarLenFeature(tf.string),
    'race':tf.io.VarLenFeature(tf.string),
    'disability':tf.io.VarLenFeature(tf.string),
}

모델 훈련

먼저 모델에 데이터를 공급하는 입력 기능을 설정합니다. 이전 TensorFlow 데이터 유효성 검사 실행에서 클래스 불균형을 식별 했으므로 각 예제에 가중치 열을 추가하고이를 설명하기 위해 독성 예제의 가중치를 높입니다. 평가 단계에서는 평가 단계에서만 ID 기능을 사용합니다. 교육 시간에는 댓글 만 모델에 제공되기 때문입니다.

def train_input_fn():
  def parse_function(serialized):
    parsed_example = tf.io.parse_single_example(
        serialized=serialized, features=FEATURE_MAP)
    # Adds a weight column to deal with unbalanced classes.
    parsed_example['weight'] = tf.add(parsed_example[LABEL], 0.1)
    return (parsed_example,
            parsed_example[LABEL])
  train_dataset = tf.data.TFRecordDataset(
      filenames=[train_tf_file]).map(parse_function).batch(512)
  return train_dataset

다음으로 심층 신경망 모델을 만들고 데이터에 대해 학습합니다.

model_dir = os.path.join(BASE_DIR, 'train', datetime.now().strftime(
    "%Y%m%d-%H%M%S"))

embedded_text_feature_column = hub.text_embedding_column(
    key=TEXT_FEATURE,
    module_spec='https://tfhub.dev/google/nnlm-en-dim128/1')

classifier = tf.estimator.DNNClassifier(
    hidden_units=[500, 100],
    weight_column='weight',
    feature_columns=[embedded_text_feature_column],
    optimizer=tf.keras.optimizers.Adagrad(learning_rate=0.003),
    loss_reduction=tf.losses.Reduction.SUM,
    n_classes=2,
    model_dir=model_dir)

classifier.train(input_fn=train_input_fn, steps=1000)
INFO:tensorflow:Using default config.

INFO:tensorflow:Using default config.

INFO:tensorflow:Using config: {'_model_dir': '/tmp/train/20200612-092617', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

INFO:tensorflow:Using config: {'_model_dir': '/tmp/train/20200612-092617', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': allow_soft_placement: true
graph_options {
  rewrite_options {
    meta_optimizer_iterations: ONE
  }
}
, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_device_fn': None, '_protocol': None, '_eval_distribute': None, '_experimental_distribute': None, '_experimental_max_worker_delay_secs': None, '_session_creation_timeout_secs': 7200, '_service': None, '_cluster_spec': ClusterSpec({}), '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:1666: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/ops/resource_variable_ops.py:1666: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/training/training_util.py:236: Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Saver not created because there are no variables in the graph to restore

INFO:tensorflow:Saver not created because there are no variables in the graph to restore

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/head/base_head.py:517: NumericColumn._get_dense_tensor (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.
Instructions for updating:
The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_estimator/python/estimator/head/base_head.py:517: NumericColumn._get_dense_tensor (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.
Instructions for updating:
The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/feature_column/feature_column.py:2167: NumericColumn._transform_feature (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.
Instructions for updating:
The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/feature_column/feature_column.py:2167: NumericColumn._transform_feature (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.
Instructions for updating:
The old _FeatureColumn APIs are being deprecated. Please use the new FeatureColumn APIs instead.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/optimizer_v2/adagrad.py:106: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/keras/optimizer_v2/adagrad.py:106: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Create CheckpointSaverHook.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Graph was finalized.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Done running local_init_op.

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...

INFO:tensorflow:Saving checkpoints for 0 into /tmp/train/20200612-092617/model.ckpt.

INFO:tensorflow:Saving checkpoints for 0 into /tmp/train/20200612-092617/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...

INFO:tensorflow:loss = 58.586525, step = 0

INFO:tensorflow:loss = 58.586525, step = 0

INFO:tensorflow:global_step/sec: 19.2889

INFO:tensorflow:global_step/sec: 19.2889

INFO:tensorflow:loss = 56.108788, step = 100 (5.186 sec)

INFO:tensorflow:loss = 56.108788, step = 100 (5.186 sec)

INFO:tensorflow:global_step/sec: 13.2697

INFO:tensorflow:global_step/sec: 13.2697

INFO:tensorflow:loss = 47.36806, step = 200 (7.536 sec)

INFO:tensorflow:loss = 47.36806, step = 200 (7.536 sec)

INFO:tensorflow:global_step/sec: 17.3887

INFO:tensorflow:global_step/sec: 17.3887

INFO:tensorflow:loss = 55.351665, step = 300 (5.751 sec)

INFO:tensorflow:loss = 55.351665, step = 300 (5.751 sec)

INFO:tensorflow:global_step/sec: 20.1386

INFO:tensorflow:global_step/sec: 20.1386

INFO:tensorflow:loss = 56.003563, step = 400 (4.966 sec)

INFO:tensorflow:loss = 56.003563, step = 400 (4.966 sec)

INFO:tensorflow:global_step/sec: 19.8068

INFO:tensorflow:global_step/sec: 19.8068

INFO:tensorflow:loss = 41.94625, step = 500 (5.048 sec)

INFO:tensorflow:loss = 41.94625, step = 500 (5.048 sec)

INFO:tensorflow:global_step/sec: 19.7739

INFO:tensorflow:global_step/sec: 19.7739

INFO:tensorflow:loss = 45.751472, step = 600 (5.058 sec)

INFO:tensorflow:loss = 45.751472, step = 600 (5.058 sec)

INFO:tensorflow:global_step/sec: 19.7408

INFO:tensorflow:global_step/sec: 19.7408

INFO:tensorflow:loss = 50.788307, step = 700 (5.065 sec)

INFO:tensorflow:loss = 50.788307, step = 700 (5.065 sec)

INFO:tensorflow:global_step/sec: 20.0382

INFO:tensorflow:global_step/sec: 20.0382

INFO:tensorflow:loss = 47.543068, step = 800 (4.991 sec)

INFO:tensorflow:loss = 47.543068, step = 800 (4.991 sec)

INFO:tensorflow:global_step/sec: 20.2378

INFO:tensorflow:global_step/sec: 20.2378

INFO:tensorflow:loss = 48.0553, step = 900 (4.941 sec)

INFO:tensorflow:loss = 48.0553, step = 900 (4.941 sec)

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 1000...

INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 1000...

INFO:tensorflow:Saving checkpoints for 1000 into /tmp/train/20200612-092617/model.ckpt.

INFO:tensorflow:Saving checkpoints for 1000 into /tmp/train/20200612-092617/model.ckpt.

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 1000...

INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 1000...

INFO:tensorflow:Loss for final step: 51.027008.

INFO:tensorflow:Loss for final step: 51.027008.

<tensorflow_estimator.python.estimator.canned.dnn.DNNClassifierV2 at 0x7fad866fcf60>

공정성 표시기로 TensorFlow 모델 분석 실행

저장된 모델 내보내기

def eval_input_receiver_fn():
  serialized_tf_example = tf.compat.v1.placeholder(
      dtype=tf.string, shape=[None], name='input_example_placeholder')

  # This *must* be a dictionary containing a single key 'examples', which
  # points to the input placeholder.
  receiver_tensors = {'examples': serialized_tf_example}

  features = tf.io.parse_example(serialized_tf_example, FEATURE_MAP)
  features['weight'] = tf.ones_like(features[LABEL])

  return tfma.export.EvalInputReceiver(
    features=features,
    receiver_tensors=receiver_tensors,
    labels=features[LABEL])

tfma_export_dir = tfma.export.export_eval_savedmodel(
  estimator=classifier,
  export_dir_base=os.path.join(BASE_DIR, 'tfma_eval_model'),
  eval_input_receiver_fn=eval_input_receiver_fn)
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/eval_saved_model/encoding.py:141: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/eval_saved_model/encoding.py:141: build_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.build_tensor_info or tf.compat.v1.saved_model.build_tensor_info.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Calling model_fn.

INFO:tensorflow:Saver not created because there are no variables in the graph to restore

INFO:tensorflow:Saver not created because there are no variables in the graph to restore

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Done calling model_fn.

INFO:tensorflow:Signatures INCLUDED in export for Classify: None

INFO:tensorflow:Signatures INCLUDED in export for Classify: None

INFO:tensorflow:Signatures INCLUDED in export for Regress: None

INFO:tensorflow:Signatures INCLUDED in export for Regress: None

INFO:tensorflow:Signatures INCLUDED in export for Predict: None

INFO:tensorflow:Signatures INCLUDED in export for Predict: None

INFO:tensorflow:Signatures INCLUDED in export for Train: None

INFO:tensorflow:Signatures INCLUDED in export for Train: None

INFO:tensorflow:Signatures INCLUDED in export for Eval: ['eval']

INFO:tensorflow:Signatures INCLUDED in export for Eval: ['eval']

Warning:tensorflow:Export includes no default signature!

Warning:tensorflow:Export includes no default signature!

INFO:tensorflow:Restoring parameters from /tmp/train/20200612-092617/model.ckpt-1000

INFO:tensorflow:Restoring parameters from /tmp/train/20200612-092617/model.ckpt-1000

INFO:tensorflow:Assets added to graph.

INFO:tensorflow:Assets added to graph.

INFO:tensorflow:Assets written to: /tmp/tfma_eval_model/temp-1591954044/assets

INFO:tensorflow:Assets written to: /tmp/tfma_eval_model/temp-1591954044/assets

INFO:tensorflow:SavedModel written to: /tmp/tfma_eval_model/temp-1591954044/saved_model.pb

INFO:tensorflow:SavedModel written to: /tmp/tfma_eval_model/temp-1591954044/saved_model.pb

공정성 메트릭 계산

측정 항목을 계산할 ID와 오른쪽 패널에서 신뢰 구간을 실행할지 여부를 선택합니다. 구성에 따라이 단계를 실행하는 데 2-10 분이 소요됩니다.


tfma_eval_result_path = os.path.join(BASE_DIR, 'tfma_eval_result')


slice_selection = 'sexual_orientation' 

compute_confidence_intervals = False 

# Define slices that you want the evaluation to run on.
slice_spec = [
    tfma.slicer.SingleSliceSpec(), # Overall slice
    tfma.slicer.SingleSliceSpec(columns=[slice_selection]),
]

# Add the fairness metrics.
add_metrics_callbacks = [
  tfma.post_export_metrics.fairness_indicators(
      thresholds=[0.1, 0.3, 0.5, 0.7, 0.9],
      labels_key=LABEL
      )
]

eval_shared_model = tfma.default_eval_shared_model(
    eval_saved_model_path=tfma_export_dir,
    add_metrics_callbacks=add_metrics_callbacks)

# Run the fairness evaluation.
with beam.Pipeline() as pipeline:
  _ = (
      pipeline
      | 'ReadData' >> beam.io.ReadFromTFRecord(validate_tf_file)
      | '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)
WARNING:apache_beam.typehints.typehints:Ignoring send_type hint: <class 'NoneType'>
WARNING:apache_beam.typehints.typehints:Ignoring return_type hint: <class 'NoneType'>
WARNING:apache_beam.typehints.typehints:Ignoring send_type hint: <class 'NoneType'>
WARNING:apache_beam.typehints.typehints:Ignoring return_type hint: <class 'NoneType'>
WARNING:apache_beam.typehints.typehints:Ignoring send_type hint: <class 'NoneType'>
WARNING:apache_beam.typehints.typehints:Ignoring return_type hint: <class 'NoneType'>

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/eval_saved_model/load.py:169: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/eval_saved_model/load.py:169: load (from tensorflow.python.saved_model.loader_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.loader.load or tf.compat.v1.saved_model.load. There will be a new function for importing SavedModels in Tensorflow 2.0.

INFO:tensorflow:Restoring parameters from /tmp/tfma_eval_model/1591954044/variables/variables

INFO:tensorflow:Restoring parameters from /tmp/tfma_eval_model/1591954044/variables/variables

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/eval_saved_model/graph_ref.py:189: get_tensor_from_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.get_tensor_from_tensor_info or tf.compat.v1.saved_model.get_tensor_from_tensor_info.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/eval_saved_model/graph_ref.py:189: get_tensor_from_tensor_info (from tensorflow.python.saved_model.utils_impl) is deprecated and will be removed in a future version.
Instructions for updating:
This function will only be available through the v1 compatibility library as tf.compat.v1.saved_model.utils.get_tensor_from_tensor_info or tf.compat.v1.saved_model.get_tensor_from_tensor_info.

What-if 도구 렌더링

이 섹션에서는 What-If Tool의 대화 형 시각적 인터페이스를 사용하여 마이크로 수준에서 데이터를 탐색하고 조작합니다.

시각화의 오른쪽 패널에서 각 점이 도구에로드 된 하위 집합의 예제 중 하나를 나타내는 산점도를 볼 수 있습니다. 포인트 중 하나를 클릭하십시오. 이제 왼쪽 패널에서이 특정 예에 대한 세부 정보를 볼 수 있습니다. 주석 텍스트, 지상 진실 독성 및 적용 가능한 ID가 표시됩니다. 이 왼쪽 패널의 하단에는 방금 훈련 한 모델의 추론 결과가 표시됩니다.

예제의 텍스트를 수정하십시오. 그런 다음 "추론 실행"버튼을 클릭하여 변경 사항으로 인해인지 된 독성 예측이 어떻게 변경되었는지 볼 수 있습니다.

DEFAULT_MAX_EXAMPLES = 1000

# Load 100000 examples in memory. When first rendered, 
# What-If Tool should only display 1000 of these due to browser constraints.
def wit_dataset(file, num_examples=100000):
  dataset = tf.data.TFRecordDataset(
      filenames=[file]).take(num_examples)
  return [tf.train.Example.FromString(d.numpy()) for d in dataset]

wit_data = wit_dataset(train_tf_file)
config_builder = WitConfigBuilder(wit_data[:DEFAULT_MAX_EXAMPLES]).set_estimator_and_feature_spec(
    classifier, FEATURE_MAP).set_label_vocab(['non-toxicity', LABEL]).set_target_feature(LABEL)
wit = WitWidget(config_builder)

공정성 지표 렌더링

내 보낸 평가 결과로 공정성 표시기 위젯을 렌더링합니다.

아래에는 선택한 측정 항목에 대한 데이터의 각 부분의 실적을 표시하는 막대 차트가 표시됩니다. 시각화 상단에있는 드롭 다운 메뉴를 사용하여 기준 비교 조각과 표시된 임계 값을 조정할 수 있습니다.

공정성 표시기 위젯은 위에서 렌더링 된 What-If 도구와 통합됩니다. 막대 차트에서 데이터의 한 조각을 선택하면 What-If 도구가 업데이트되어 선택한 조각의 예제를 보여줍니다. 위의 What-If 도구에서 데이터가 다시로드되면 Color By독성으로 수정 해보십시오. 이를 통해 슬라이스 별 예제의 독성 균형을 시각적으로 이해할 수 있습니다.

event_handlers={'slice-selected':
                wit.create_selection_callback(wit_data, DEFAULT_MAX_EXAMPLES)}
widget_view.render_fairness_indicator(eval_result=eval_result,
                                      slicing_column=slice_selection,
                                      event_handlers=event_handlers
                                      )
FairnessIndicatorViewer(slicingMetrics=[{'sliceValue': 'Overall', 'slice': 'Overall', 'metrics': {'post_export…

이 특정 데이터 세트 및 작업을 사용하면 특정 ID에 대해 체계적으로 더 높은 오탐 및 오 탐률이 부정적인 결과를 초래할 수 있습니다. 예를 들어, 콘텐츠 중재 시스템에서 특정 그룹에 대해 전체보다 높은 오 탐률이 발생하면 해당 음성이 음소거 될 수 있습니다. 따라서 모델을 개발 및 개선 할 때 이러한 유형의 기준을 정기적으로 평가하고 공정성 지표, TFDV 및 WIT와 같은 도구를 활용하여 잠재적 인 문제를 파악하는 것이 중요합니다. 공정성 문제를 식별 한 후에는 새로운 데이터 소스, 데이터 균형 조정 또는 기타 기술을 실험하여 실적이 저조한 그룹의 성능을 개선 할 수 있습니다.

공정성 지표를 사용하는 방법에 대한 자세한 정보와 지침은 이 링크를 참조하십시오.