מדדי הוגנות

אינדיקטורים להוגנות מיועדים לתמוך בצוותים בהערכה ובשיפור מודלים לדאגות להוגנות בשיתוף עם ערכת הכלים הרחבה יותר של Tensorflow. הכלי נמצא כעת בשימוש פנימי באופן פעיל על ידי רבים מהמוצרים שלנו, והוא זמין כעת ב-BETA כדי לנסות את מקרי השימוש שלך.

לוח מחוונים של הוגנות

מה זה מדדי הוגנות?

Fairness Indicators היא ספרייה המאפשרת חישוב קל של מדדי הוגנות המזוהים בדרך כלל עבור מסווגים בינאריים ורב-מחלקות. כלים קיימים רבים להערכת חששות הוגנות אינם עובדים היטב על מערכי נתונים ומודלים בקנה מידה גדול. בגוגל חשוב לנו שיהיו כלים שיכולים לעבוד על מערכות של מיליארד משתמשים. אינדיקטורים להוגנות יאפשרו לך להעריך בכל גודל של מקרה שימוש.

בפרט, מדדי הוגנות כוללים את היכולת:

  • הערכת התפלגות מערכי נתונים
  • הערך את ביצועי המודל, בחלוקה לקבוצות מוגדרות של משתמשים
    • תרגיש בטוח לגבי התוצאות שלך עם מרווחי ביטחון והשוואות בספים מרובים
  • צלול עמוק לתוך פרוסות בודדות כדי לחקור סיבות שורש והזדמנויות לשיפור

הורדת חבילת ה-pip כוללת:

שימוש במחווני הוגנות עם מודלים של Tensorflow

נְתוּנִים

כדי להפעיל אינדיקטורים להוגנות עם TFMA, ודא שמערך הנתונים של ההערכה מסומן עבור התכונות שברצונך לחתוך לפיהן. אם אין לך את תכונות הפרוסות המדויקות לדאגות ההגינות שלך, תוכל לנסות למצוא ערכת הערכה שעושה זאת, או לשקול תכונות פרוקסי בתוך מערך התכונות שלך שעשויות להדגיש פערי תוצאות. להדרכה נוספת, ראה כאן .

דֶגֶם

אתה יכול להשתמש בכיתה Tensorflow Estimator כדי לבנות את המודל שלך. תמיכה בדגמי Keras תגיע בקרוב ל-TFMA. אם ברצונך להפעיל את TFMA על דגם Keras, אנא עיין בסעיף "TFMA-אגנוסטי לדגם" להלן.

לאחר הכשרה של מעריך ההערכה שלך, תצטרך לייצא מודל שמור למטרות הערכה. למידע נוסף, עיין במדריך 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)

לפני הפעלת התצורה, קבע אם ברצונך לאפשר חישוב של רווחי סמך או לא. רווחי סמך מחושבים באמצעות אתחול Poisson ודורשים חישוב מחדש מעל 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 w. baseline", המזהה את ההפרש באחוזים בין הפרוסה הנוכחית לקו הבסיס.
  • חקור את נקודות הנתונים של פרוסה לעומק באמצעות הכלי What-If . ראה כאן לדוגמא.

עיבוד מדדי הוגנות עבור דגמים מרובים

ניתן להשתמש באינדיקטורים של הוגנות גם כדי להשוות מודלים. במקום להעביר 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 Extractor

Extractor משמש כדי לחלץ את התכונות, התוויות והתחזיות מהקלט באמצעות תצורה אגנוסטית של מודל. ואם אתה רוצה לחתוך את הנתונים שלך, אתה צריך גם להגדיר את מפרט מפתח הפרוסה , המכיל מידע על העמודות שברצונך לחתוך בהן.

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)

לבסוף, הצגת אינדיקטורים להוגנות באמצעות ההוראות בסעיף "עיבוד אינדיקטורים להוגנות" לעיל.

דוגמאות נוספות

ספריית הדוגמאות של מדדי הוגנות מכילה מספר דוגמאות: