Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Wskaźniki uczciwości

Wskaźniki uczciwości zostały zaprojektowane, aby wspierać zespoły w ocenie i doskonaleniu modeli problemów dotyczących sprawiedliwoś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?

Wskaźniki rzetelności to biblioteka, która umożliwia łatwe obliczanie powszechnie identyfikowanych metryk uczciwości dla klasyfikatorów binarnych i wieloklasowych. Wiele istniejących narzędzi do oceny problemów związanych z uczciwością nie działa dobrze na dużych zbiorach danych i modelach. W Google ważne jest, abyśmy dysponowali narzędziami, które mogą działać w systemach z miliardami użytkowników. Wskaźniki uczciwości pozwolą Ci ocenić każdy rozmiar przypadku użycia.

W szczególności wskaźniki uczciwości obejmują możliwość:

  • Oceń dystrybucję zbiorów danych
  • Oceń wydajność modelu podzieloną na zdefiniowane grupy użytkowników
    • Poczuj się pewnie swoich wyników dzięki przedziałom ufności i ocenom na wielu progach
  • Zanurz się głęboko w poszczególne plasterki, aby poznać przyczyny źródłowe 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, aby ocenić obawy dotyczące sprawiedliwości w czasie.

Pobieranie pakietu pip obejmuje:

Używanie wskaźników uczciwości w modelach Tensorflow

Dane

Aby uruchomić wskaźniki uczciwości z 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 wycinków dla swoich obaw o sprawiedliwość, możesz spróbować znaleźć zestaw ocen, który to robi, lub rozważyć funkcje proxy w zestawie funkcji, które mogą uwydatnić rozbieżności wyników. Aby uzyskać dodatkowe wskazówki, zobacz tutaj .

Model

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

Po przeszkoleniu Estymatora będziesz musiał wyeksportować zapisany model w celu oceny. Aby dowiedzieć się więcej, zobacz przewodnik TFMA .

Konfigurowanie plasterków

Następnie zdefiniuj wycinki, na których chcesz ocenić:

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

Jeśli chcesz ocenić plasterki przekrojowe (na przykład kolor i wysokość futra), możesz ustawić następujące opcje:

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

Oblicz metryki rzetelności

Dodaj wywołanie zwrotne wskaźników uczciwości do listy metrics_callback . W wywołaniu zwrotnym możesz zdefiniować listę progów, przy których model będzie oceniany.

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 ładowania początkowego Poissona i wymagają ponownego obliczenia 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 używania wskaźników uczciwości:

  • Wybierz dane do wyświetlenia , zaznaczając pola po lewej stronie. Poszczególne wykresy dla każdej metryki pojawią się w widgecie w odpowiedniej kolejności.
  • Zmień wycinek linii bazowej , pierwszy słupek na wykresie, używając rozwijanego selektora. Na podstawie tej wartości bazowej zostaną obliczone delty.
  • Wybierz progi za pomocą rozwijanego selektora. Możesz wyświetlić wiele progów na tym samym wykresie. Wybrane progi zostaną pogrubione i możesz kliknąć pogrubiony próg, aby go odznaczyć.
  • Umieść wskaźnik myszy na pasku, aby wyświetlić dane dla tego wycinka.
  • Zidentyfikuj rozbieżności w stosunku do linii bazowej, używając kolumny „ Różnica z linią bazową ”, która określa procentową różnicę między bieżącym wycinkiem a linią bazową.
  • Eksploruj punkty danych wycinka dogłębnie za pomocą narzędzia Co jeśli . Zobacz tutaj przykład.

Renderowanie wskaźników rzetelności dla wielu modeli

Wskaźniki rzetelności mogą być również używane do porównywania modeli. Zamiast przekazywać pojedynczy wynik eval_result, należy przekazać 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 rzetelności - porównanie modeli

Porównanie modeli może być używane obok porównania progów. Na przykład możesz porównać dwa modele przy dwóch zestawach progów, aby znaleźć optymalną kombinację dla swoich wskaźników sprawiedliwości.

Używanie wskaźników uczciwości z modelami innymi niż TensorFlow

Aby lepiej wspierać klientów, którzy mają różne modele i przepływy pracy, opracowaliśmy bibliotekę ocen, 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 inne niż TensorFlow. Korzystając z zestawu Apache Beam Python SDK, można utworzyć samodzielny plik binarny oceny TFMA, a następnie uruchomić go w celu przeanalizowania modelu.

Dane

Ten krok ma na celu dostarczenie zbioru danych, na którym mają być wykonywane oceny. Powinien być w formacie tf.Example proto z etykietami, prognozami i innymi funkcjami, które możesz chcieć wyciąć .

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ę eval niezależną od modelu i ekstraktor w celu przeanalizowania i dostarczenia danych potrzebnych TFMA do obliczania 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ę elementów z kluczami reprezentującymi wszystkie obiekty, w tym klucze etykiet i prognoz oraz wartości reprezentujące typ danych elementu.

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

Utwórz konfigurację niezależną od modelu za pomocą kluczy etykiet, kluczy prognozowania 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 model Model Agnostic Extractor

Ekstraktor 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 wycinka , zawierającą informacje o kolumnach, które chcesz wyciąć.

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

Oblicz metryki rzetelności

W ramach EvalSharedModel możesz podać wszystkie metryki, na podstawie których chcesz, aby Twój model był oceniany. 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óra jest używana 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)))

Gdy wszystko zostanie skonfigurowane, 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 wskaźników uczciwości zawiera kilka przykładów: