Показатели справедливости

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

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

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

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

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

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

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

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

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

Данные

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

Модель

Вы можете использовать класс Tensorflow Estimator для построения своей модели. Поддержка моделей Keras скоро появится в TFMA. Если вы хотите запустить 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 } }
        }
    }
}

Модель

Вместо указания модели вы создаете независимую от модели конфигурацию и экстрактор для анализа и предоставления данных, необходимых 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_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)

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

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

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