Wskaźniki uczciwości

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wskaźniki uczciwości zostały zaprojektowane, aby wspierać zespoły w ocenie i ulepszaniu modeli dotyczących kwestii uczciwości we współpracy z szerszym zestawem narzędzi Tensorflow. Narzędzie jest obecnie aktywnie używane wewnętrznie przez wiele naszych produktów i jest teraz dostępne w wersji BETA do wypróbowania we własnych przypadkach użycia.

Tablica wskaźników uczciwości

Co to są wskaźniki uczciwości?

Fairness Indicators to biblioteka, która umożliwia łatwe obliczanie powszechnie identyfikowanych metryk rzetelności dla klasyfikatorów binarnych i wieloklasowych. Wiele istniejących narzędzi do oceny kwestii sprawiedliwości nie działa dobrze w przypadku zestawów danych i modeli na dużą skalę. W Google ważne jest dla nas posiadanie narzędzi, które mogą działać na systemach miliardowych użytkowników. Wskaźniki uczciwości pozwolą Ci ocenić każdy przypadek użycia.

W szczególności Wskaźniki Uczciwości obejmują zdolność do:

  • Oceń dystrybucję zbiorów danych
  • Oceń wydajność modelu, podzieloną na określone grupy użytkowników
    • Poczuj się pewnie co do swoich wyników dzięki przedziałom ufności i ocenom na wielu progach
  • Zanurz się głęboko w poszczególne plastry, aby zbadać podstawowe przyczyny i możliwości poprawy

To studium przypadku , wraz z filmami i ćwiczeniami programistycznymi, pokazuje, w jaki sposób wskaźniki uczciwości można wykorzystać w jednym z własnych produktów do oceny problemów związanych z uczciwością w czasie.

Pobieranie pakietu pip obejmuje:

Korzystanie ze wskaźników uczciwości w modelach Tensorflow

Dane

Aby uruchomić wskaźniki rzetelności za pomocą TFMA, upewnij się, że zestaw danych oceny jest oznaczony etykietą dla funkcji, według których chcesz podzielić. Jeśli nie masz dokładnych funkcji wycinka dla swoich obaw o uczciwość, możesz spróbować znaleźć zestaw ewaluacyjny, który ma to miejsce, lub rozważyć funkcje proxy w zestawie funkcji, które mogą uwydatniać rozbieżności wyników. Dodatkowe wskazówki znajdziesz tutaj .

Model

Do zbudowania modelu możesz użyć klasy Tensorflow Estimator. Wsparcie dla modeli Keras pojawi się wkrótce w TFMA. Jeśli chcesz uruchomić TFMA na modelu Keras, zapoznaj się z poniższą sekcją „Model-Agnostic TFMA”.

Po przeszkoleniu estymatora będziesz musiał wyeksportować zapisany model w celu oceny. Aby dowiedzieć się więcej, zapoznaj się z przewodnikiem TFMA .

Konfigurowanie plasterków

Następnie zdefiniuj plastry, które chcesz ocenić:

slice_spec = [
  tfma.slicer.SingleSliceSpec(columns=[‘fur color’])
]

Jeśli chcesz ocenić przekroje poprzeczne (na przykład zarówno kolor futra, jak i wysokość), możesz ustawić następujące opcje:

slice_spec = [
  tfma.slicer.SingleSliceSpec(columns=[‘fur_color’, ‘height’])
]`

Obliczanie metryk rzetelności

Dodaj wywołanie zwrotne Fairness Indicators do listy metrics_callback . W wywołaniu zwrotnym możesz zdefiniować listę progów, według których będzie oceniany model.

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)

Przed uruchomieniem konfiguracji określ, czy chcesz włączyć obliczanie przedziałów ufności. Przedziały ufności są obliczane przy użyciu metody Poissona i wymagają ponownego przeliczenia na 20 próbkach.

compute_confidence_intervals = True

Uruchom potok oceny 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)

Wskaźniki rzetelności renderowania

from tensorflow_model_analysis.addons.fairness.view import widget_view

widget_view.render_fairness_indicator(eval_result=eval_result)

Wskaźniki uczciwości

Wskazówki dotyczące korzystania ze wskaźników uczciwości:

  • Wybierz dane do wyświetlenia , zaznaczając pola po lewej stronie. W widgecie pojawią się kolejno poszczególne wykresy dla każdej metryki.
  • Zmień wycinek linii bazowej , pierwszy słupek na wykresie, za pomocą selektora rozwijanego. Różnice zostaną obliczone na podstawie tej wartości bazowej.
  • Wybierz progi za pomocą selektora rozwijanego. Na jednym wykresie można wyświetlić wiele progów. Wybrane progi zostaną pogrubione i możesz kliknąć pogrubiony próg, aby go odznaczyć.
  • Najedź kursorem na pasek, aby zobaczyć dane dla tego wycinka.
  • Zidentyfikuj rozbieżności z linią bazową za pomocą kolumny „Różnica z linią bazową”, która określa procentową różnicę między bieżącym wycinek a linią bazową.
  • Dokładnie zbadaj punkty danych wycinka za pomocą narzędzia Co jeśli . Zobacz tutaj na przykład.

Wskaźniki rzetelności renderowania dla wielu modeli

Do porównywania modeli można również wykorzystać wskaźniki rzetelności. Zamiast przekazywać pojedynczy eval_result, przekaż obiekt multi_eval_results, który jest słownikiem mapującym dwie nazwy modeli na obiekty 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)

Wskaźniki uczciwości — porównanie modeli

Porównanie modeli może być używane wraz z porównaniem progów. Na przykład możesz porównać dwa modele przy dwóch zestawach progów, aby znaleźć optymalną kombinację dla metryk uczciwości.

Korzystanie ze wskaźników rzetelności w modelach innych niż TensorFlow

Aby lepiej wspierać klientów, którzy mają różne modele i przepływy pracy, opracowaliśmy bibliotekę oceny, która jest niezależna od ocenianego modelu.

Każdy, kto chce ocenić swój system uczenia maszynowego, może z tego skorzystać, zwłaszcza jeśli masz modele nie oparte na TensorFlow. Korzystając z zestawu SDK Apache Beam Python, możesz utworzyć samodzielny plik binarny do oceny TFMA, a następnie uruchomić go w celu przeanalizowania modelu.

Dane

Ten krok ma na celu dostarczenie zestawu danych, na którym chcesz uruchomić oceny. Powinien być w formacie tf.Example zawierającym etykiety, prognozy i inne funkcje, które możesz chcieć pokroić.

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 } }
        }
    }
}

Model

Zamiast określać model, tworzysz konfigurację oceny niezależnej od modelu i ekstraktor, aby przeanalizować i dostarczyć dane potrzebne TFMA do obliczenia metryk. Specyfikacja ModelAgnosticConfig definiuje funkcje, prognozy i etykiety, które mają być używane z przykładów wejściowych.

W tym celu utwórz mapę obiektów z kluczami reprezentującymi wszystkie obiekty, w tym kluczami etykiet i prognoz oraz wartościami reprezentującymi typ danych obiektu.

feature_map[label_key] = tf.FixedLenFeature([], tf.float32, default_value=[0])

Utwórz konfigurację niezależną od modelu za pomocą kluczy etykiet, kluczy prognoz i mapy funkcji.

model_agnostic_config = model_agnostic_predict.ModelAgnosticConfig(
    label_keys=list(ground_truth_labels),
    prediction_keys=list(predition_labels),
    feature_spec=feature_map)

Skonfiguruj ekstraktor niezależny od modelu

Extractor służy do wyodrębniania funkcji, etykiet i prognoz z danych wejściowych przy użyciu konfiguracji niezależnej od modelu. A jeśli chcesz pokroić dane, musisz również zdefiniować specyfikację klucza wycinania , zawierającą informacje o kolumnach, według których chcesz pokroić.

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’]),
    ])
]

Obliczanie metryk rzetelności

W ramach EvalSharedModel możesz podać wszystkie metryki, na podstawie których chcesz ocenić swój model. Metryki są dostarczane w postaci wywołań zwrotnych metryk, takich jak te zdefiniowane w post_export_metrics lub fairness_indicators .

metrics_callbacks.append(
    post_export_metrics.fairness_indicators(
        thresholds=[0.5, 0.9],
        target_prediction_keys=[prediction_key],
        labels_key=label_key))

Pobiera również construct_fn , który jest używany do tworzenia wykresu tensorflow w celu wykonania oceny.

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

Po skonfigurowaniu wszystkiego użyj jednej z funkcji ExtractEvaluate lub ExtractEvaluateAndWriteResults dostarczonych przez model_eval_lib , aby ocenić model.

_ = (
    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)

Na koniec wyrenderuj wskaźniki rzetelności, korzystając z instrukcji z sekcji „Wskaźniki rzetelności renderowania” powyżej.

Więcej przykładów

Katalog przykładów Fairness Indicators zawiera kilka przykładów: