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

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

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

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

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

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

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

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

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

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

Данные

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

Модель

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

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

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

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

Отображение индикаторов справедливости для нескольких моделей

Индикаторы справедливости также можно использовать для сравнения моделей. Вместо того, чтобы передавать один 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_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)

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

Дополнительные примеры

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