This page was translated by the Cloud Translation API.
Switch to English

Индикаторы справедливости

Индикаторы справедливости предназначены для поддержки групп в оценке и улучшении моделей для обеспечения справедливости в партнерстве с более широким набором инструментов Tensorflow. Этот инструмент в настоящее время активно используется внутри многих наших продуктов и теперь доступен в бета-версии, чтобы опробовать свои собственные варианты использования.

Панель индикаторов честности

Что такое индикаторы справедливости?

Индикаторы справедливости - это библиотека, которая позволяет легко вычислять обычно определяемые показатели справедливости для двоичных и мультиклассовых классификаторов. Многие существующие инструменты для оценки проблем справедливости плохо работают с крупномасштабными наборами данных и моделями. Для Google важно иметь инструменты, которые могут работать в системах с миллиардами пользователей. Индикаторы справедливости позволят вам оценить любой вариант использования.

В частности, индикаторы справедливости включают возможность:

  • Оценить распределение наборов данных
  • Оценить производительность модели, разрезанную на определенные группы пользователей
    • Будьте уверены в своих результатах с доверительными интервалами и оценками с несколькими порогами
  • Погрузитесь в отдельные части, чтобы изучить основные причины и возможности для улучшения

Это тематическое исследование , дополненное видеороликами и упражнениями по программированию, демонстрирует, как индикаторы справедливости можно использовать в одном из ваших собственных продуктов для оценки проблем справедливости с течением времени.

Загрузка пакета pip включает:

Использование индикаторов справедливости с моделями Tensorflow

Данные

Чтобы запустить индикаторы справедливости с TFMA, убедитесь, что набор данных оценки помечен для функций, по которым вы хотите выполнить срез. Если у вас нет точных функций среза для ваших соображений справедливости, вы можете попытаться найти набор для оценки, который имеет, или рассмотреть прокси-функции в вашем наборе функций, которые могут выявить различия в результатах. Дополнительные инструкции см. Здесь .

Модель

Вы можете использовать класс Tensorflow Estimator для построения своей модели. Скоро в TFMA появится поддержка моделей Keras. Если вы хотите запустить TFMA на модели Keras, см. Раздел «TFMA, не зависящий от модели» ниже.

После обучения вашего оценщика вам нужно будет экспортировать сохраненную модель для оценки. Чтобы узнать больше, см. Руководство по 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)

Индикаторы справедливости

Советы по использованию индикаторов честности:

  • Выберите показатели для отображения , установив флажки слева. В виджете по порядку появятся отдельные графики для каждой метрики.
  • Измените срез базовой линии , первую полосу на графике, с помощью раскрывающегося селектора. Дельты будут рассчитаны с использованием этого базового значения.
  • Выберите пороговые значения с помощью раскрывающегося списка. Вы можете просмотреть несколько пороговых значений на одном графике. Выбранные пороговые значения будут выделены жирным шрифтом, и вы можете щелкнуть выделенное жирным шрифтом пороговое значение, чтобы отменить его выбор.
  • Наведите указатель мыши на панель, чтобы увидеть показатели для этого фрагмента.
  • Определите несоответствия с базовой линией с помощью столбца «Различие с базовой линией», который определяет процентную разницу между текущим срезом и базовой линией.
  • Подробно исследуйте точки данных среза с помощью инструмента « Что, если» . См. Здесь пример.

Индикаторы справедливости рендеринга для нескольких моделей

Индикаторы справедливости также можно использовать для сравнения моделей. Вместо передачи одного eval_result передайте объект multi_eval_results, который представляет собой словарь, сопоставляющий два имени модели с объектами eval_result.

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)

Индикаторы справедливости - сравнение моделей

Сравнение моделей можно использовать вместе со сравнением пороговых значений. Например, вы можете сравнить две модели с двумя наборами пороговых значений, чтобы найти оптимальную комбинацию для ваших показателей справедливости.

Использование индикаторов справедливости с моделями, отличными от TensorFlow

Чтобы лучше поддерживать клиентов с разными моделями и рабочими процессами, мы разработали оценочную библиотеку, которая не зависит от модели, которая оценивается.

Любой, кто хочет оценить свою систему машинного обучения, может использовать это, особенно если у вас есть модели, не основанные на TensorFlow. Используя Apache Beam Python SDK, вы можете создать автономный оценочный двоичный файл TFMA, а затем запустить его для анализа вашей модели.

Данные

Этот шаг заключается в предоставлении набора данных, на котором будут выполняться оценки. Он должен быть в формате tf.Example с метками, прогнозами и другими функциями, которые вы, возможно, захотите использовать.

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

Экстрактор используется для извлечения функций, меток и прогнозов из входных данных с использованием независимой от модели конфигурации. И если вы хотите разрезать свои данные, вам также необходимо определить спецификацию ключа среза , содержащую информацию о столбцах, которые вы хотите разрезать.

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 или 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)

Наконец, визуализируйте индикаторы справедливости, используя инструкции из раздела «Отображение индикаторов справедливости» выше.

Больше примеров

Каталог примеров индикаторов справедливости содержит несколько примеров: