Adalet Göstergeleri

Adillik Göstergeleri, daha geniş Tensorflow araç seti ile işbirliği içinde adalet kaygılarına yönelik modelleri değerlendirme ve geliştirme konusunda ekipleri desteklemek üzere tasarlanmıştır. Araç şu anda birçok ürünümüz tarafından dahili olarak aktif olarak kullanılmaktadır ve artık kendi kullanım durumlarınızı denemek için BETA olarak mevcuttur.

Adalet Gösterge Tablosu

Adillik Göstergeleri Nedir?

Adillik Göstergeleri, ikili ve çok sınıflı sınıflandırıcılar için yaygın olarak tanımlanan adalet metriklerinin kolay hesaplanmasını sağlayan bir kitaplıktır. Adillik endişelerini değerlendirmeye yönelik mevcut araçların çoğu, büyük ölçekli veri kümeleri ve modellerde iyi çalışmıyor. Google olarak milyarlarca kullanıcılı sistemlerde çalışabilecek araçlara sahip olmak bizim için önemli. Adillik Göstergeleri her boyuttaki kullanım durumunu değerlendirmenize olanak tanır.

Adillik Göstergeleri özellikle aşağıdaki yetenekleri içerir:

  • Veri kümelerinin dağılımını değerlendirin
  • Tanımlı kullanıcı gruplarına göre model performansını değerlendirin
    • Güven aralıkları ve çoklu eşiklerdeki değerlendirmelerle sonuçlarınızdan emin olun
  • Temel nedenleri ve iyileştirme fırsatlarını keşfetmek için ayrı ayrı dilimlere derinlemesine dalın

Videolar ve programlama alıştırmalarıyla tamamlanan bu örnek olay çalışması , zaman içinde adalet endişelerini değerlendirmek için Adillik Göstergelerinin kendi ürünlerinizden birinde nasıl kullanılabileceğini göstermektedir.

Pip paketi indirmesi şunları içerir:

Tensorflow Modelleriyle Adillik Göstergelerini Kullanma

Veri

Adillik Göstergelerini TFMA ile çalıştırmak için değerlendirme veri kümesinin, dilimlemek istediğiniz özelliklere göre etiketlendiğinden emin olun. Adil olma konusundaki endişeleriniz için tam dilim özelliklerine sahip değilseniz, bunu sağlayan bir değerlendirme kümesi bulmayı deneyebilir veya özellik kümeniz içindeki sonuç eşitsizliklerini vurgulayabilecek temsili özellikleri göz önünde bulundurabilirsiniz. Ek rehberlik için buraya bakın.

Modeli

Modelinizi oluşturmak için Tensorflow Tahmincisi sınıfını kullanabilirsiniz. Keras modelleri için destek yakında TFMA'ya gelecek. TFMA'yı bir Keras modelinde çalıştırmak istiyorsanız lütfen aşağıdaki "Modelden Bağımsız TFMA" bölümüne bakın.

Tahminciniz eğitildikten sonra, değerlendirme amacıyla kayıtlı bir modeli dışa aktarmanız gerekecektir. Daha fazla bilgi edinmek için TFMA kılavuzuna bakın.

Dilimleri Yapılandırma

Ardından, değerlendirmek istediğiniz dilimleri tanımlayın:

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

Kesişen dilimleri (örneğin, hem kürk rengi hem de yükseklik) değerlendirmek istiyorsanız aşağıdakileri ayarlayabilirsiniz:

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

Hesaplama Adaleti Metrikleri

metrics_callback listesine bir Adalet Göstergeleri geri çağrısı ekleyin. Geri aramada, modelin değerlendirileceği eşiklerin bir listesini tanımlayabilirsiniz.

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)

Yapılandırmayı çalıştırmadan önce güven aralıklarının hesaplanmasını etkinleştirmek isteyip istemediğinizi belirleyin. Güven aralıkları Poisson önyüklemesi kullanılarak hesaplanır ve 20 örnek üzerinde yeniden hesaplama gerektirir.

compute_confidence_intervals = True

TFMA değerlendirme hattını çalıştırın:

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)

Render Adilliği Göstergeleri

from tensorflow_model_analysis.addons.fairness.view import widget_view

widget_view.render_fairness_indicator(eval_result=eval_result)

Adillik Göstergeleri

Adillik Göstergelerini kullanmaya ilişkin ipuçları:

  • Sol taraftaki kutuları işaretleyerek görüntülenecek metrikleri seçin . Widget'ta her bir ölçüm için ayrı ayrı grafikler sırayla görünecektir.
  • Açılır seçiciyi kullanarak grafikteki ilk çubuk olan taban çizgisi dilimini değiştirin . Deltalar bu temel değerle hesaplanacaktır.
  • Açılır seçiciyi kullanarak eşikleri seçin . Aynı grafikte birden fazla eşiği görüntüleyebilirsiniz. Seçilen eşikler kalın harflerle yazılacaktır ve kalın harflerle yazılmış bir eşiği tıklatarak seçimini kaldırabilirsiniz.
  • Söz konusu dilime ilişkin ölçümleri görmek için fareyle çubuğun üzerine gelin .
  • Geçerli dilim ile taban çizgisi arasındaki yüzde farkını tanımlayan "Diff w. baseline" sütununu kullanarak taban çizgisiyle eşitsizlikleri belirleyin .
  • What-If Aracını kullanarak bir dilimin veri noktalarını derinlemesine keşfedin . Bir örnek için buraya bakın.

Çoklu Modeller İçin Adillik Göstergelerinin Oluşturulması

Adillik Göstergeleri modelleri karşılaştırmak için de kullanılabilir. Tek bir eval_result iletmek yerine, iki model adını eval_result nesnelerine eşleyen bir sözlük olan multi_eval_results nesnesini iletin.

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)

Adillik Göstergeleri - Model Karşılaştırması

Model karşılaştırması eşik karşılaştırmasının yanında kullanılabilir. Örneğin, adalet ölçümleriniz için en uygun kombinasyonu bulmak amacıyla iki modeli iki eşik kümesinde karşılaştırabilirsiniz.

TensorFlow Olmayan Modellerle Adillik Göstergelerini Kullanma

Farklı modelleri ve iş akışları olan müşterileri daha iyi desteklemek için, değerlendirilen modelden bağımsız bir değerlendirme kitaplığı geliştirdik.

Özellikle TensorFlow tabanlı olmayan modelleriniz varsa, makine öğrenimi sistemini değerlendirmek isteyen herkes bunu kullanabilir. Apache Beam Python SDK'yı kullanarak bağımsız bir TFMA değerlendirme ikili dosyası oluşturabilir ve ardından modelinizi analiz etmek için onu çalıştırabilirsiniz.

Veri

Bu adım, değerlendirmelerin üzerinde çalışmasını istediğiniz veri kümesini sağlamaktır. Dilimlemek isteyebileceğiniz etiketleri, tahminleri ve diğer özellikleri içeren tf.Example protokol formatında olmalıdır.

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

Modeli

Bir model belirtmek yerine, TFMA'nın metrikleri hesaplamak için ihtiyaç duyduğu verileri ayrıştırmak ve sağlamak için bir model agnostik değerlendirme yapılandırması ve çıkarıcı oluşturursunuz. ModelAgnosticConfig spesifikasyonu, giriş örneklerinden kullanılacak özellikleri, tahminleri ve etiketleri tanımlar.

Bunun için etiket ve tahmin anahtarları da dahil olmak üzere tüm özellikleri temsil eden anahtarlar ve özelliğin veri türünü temsil eden değerler içeren bir özellik haritası oluşturun.

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

Etiket anahtarlarını, tahmin anahtarlarını ve özellik haritasını kullanarak modelden bağımsız bir yapılandırma oluşturun.

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

Model Agnostik Çıkarıcıyı Ayarlama

Çıkarıcı, model agnostik yapılandırmayı kullanarak girdiden özellikleri, etiketleri ve tahminleri çıkarmak için kullanılır. Verilerinizi dilimlemek istiyorsanız dilimlemek istediğiniz sütunlarla ilgili bilgileri içeren dilim anahtarı spesifikasyonunu da tanımlamanız gerekir.

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

Hesaplama Adaleti Metrikleri

EvalSharedModel'in bir parçası olarak modelinizin değerlendirilmesini istediğiniz tüm metrikleri sağlayabilirsiniz. Metrikler, post_export_metrics veya fairness_indicators'da tanımlananlar gibi metrik geri çağırmaları biçiminde sağlanır.

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

Ayrıca değerlendirmeyi gerçekleştirmek için tensor akışı grafiği oluşturmak için kullanılan bir construct_fn de alır.

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

Her şey ayarlandıktan sonra modeli değerlendirmek için model_eval_lib tarafından sağlanan ExtractEvaluate veya ExtractEvaluateAndWriteResults işlevlerinden birini kullanın.

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

Son olarak, yukarıdaki "Adillik Göstergelerini Oluşturma" bölümündeki talimatları kullanarak Adillik Göstergelerini oluşturun.

Daha fazla örnek

Adillik Göstergeleri örnek dizini birkaç örnek içerir: