Помогают защитить Большой Барьерный Риф с TensorFlow на Kaggle Присоединяйтесь вызов

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

Индикаторы справедливости предназначены для поддержки команд в оценке и улучшении моделей для обеспечения справедливости в сотрудничестве с более широким набором инструментов 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)

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

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

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

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

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

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)

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

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

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