مساعدة في حماية الحاجز المرجاني العظيم مع TensorFlow على Kaggle تاريخ التحدي

مؤشرات الإنصاف

تم تصميم مؤشرات الإنصاف لدعم الفرق في تقييم وتحسين نماذج مخاوف الإنصاف بالشراكة مع مجموعة أدوات Tensorflow الأوسع. تُستخدم الأداة حاليًا بشكل نشط داخليًا بواسطة العديد من منتجاتنا ، وهي متوفرة الآن في الإصدار التجريبي لتجربة حالات الاستخدام الخاصة بك.

لوحة معلومات مؤشر الإنصاف

ما هي مؤشرات الإنصاف؟

مؤشرات الإنصاف عبارة عن مكتبة تتيح سهولة حساب مقاييس الإنصاف المحددة بشكل شائع للمصنفات الثنائية ومتعددة الفئات. لا تعمل العديد من الأدوات الحالية لتقييم مخاوف الإنصاف بشكل جيد على مجموعات البيانات والنماذج واسعة النطاق. في Google ، من المهم بالنسبة لنا أن يكون لدينا أدوات يمكنها العمل على أنظمة يستخدمها مليار مستخدم. تتيح لك مؤشرات الإنصاف التقييم عبر أي حجم لحالة الاستخدام.

تشمل مؤشرات الإنصاف على وجه الخصوص القدرة على:

  • تقييم توزيع مجموعات البيانات
  • قم بتقييم أداء النموذج ، مقسمًا عبر مجموعات محددة من المستخدمين
    • كن واثقًا من نتائجك مع فترات الثقة والتطورات عند عتبات متعددة
  • تعمق في الشرائح الفردية لاستكشاف الأسباب الجذرية وفرص التحسين

توضح دراسة الحالة هذه ، المكملة بمقاطع الفيديو وتمارين البرمجة ، كيف يمكن استخدام مؤشرات الإنصاف في أحد منتجاتك لتقييم مخاوف الإنصاف بمرور الوقت.

يتضمن تنزيل حزمة النقطة ما يلي:

استخدام مؤشرات الإنصاف مع نماذج 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 bootstrapping وتتطلب إعادة حساب أكثر من 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 . انظر هنا للحصول على مثال.

تقديم مؤشرات الإنصاف لنماذج متعددة

يمكن أيضًا استخدام مؤشرات الإنصاف لمقارنة النماذج. بدلًا من تمرير قيمة واحدة إلى نتيجة واحدة ، قم بتمرير كائن 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)

مؤشرات الإنصاف - مقارنة النماذج

يمكن استخدام مقارنة النماذج جنبًا إلى جنب مع مقارنة العتبة. على سبيل المثال ، يمكنك مقارنة نموذجين بمجموعتين من الحدود للعثور على التركيبة المثلى لمقاييس الإنصاف الخاصة بك.

استخدام مؤشرات الإنصاف مع نماذج non-TensorFlow

لدعم العملاء الذين لديهم نماذج وسير عمل مختلفة بشكل أفضل ، قمنا بتطوير مكتبة تقييم غير ملائمة للنموذج الذي يتم تقييمه.

يمكن لأي شخص يرغب في تقييم نظام التعلم الآلي الخاص به استخدام هذا ، خاصة إذا كان لديك نماذج لا تستند إلى TensorFlow. باستخدام Apache Beam Python SDK ، يمكنك إنشاء ثنائي تقييم TFMA مستقل ثم تشغيله لتحليل نموذجك.

البيانات

هذه الخطوة هي توفير مجموعة البيانات التي تريد أن تعمل التقييمات عليها. يجب أن يكون بتنسيق tf.Example proto الذي يحتوي على تسميات وتنبؤات وميزات أخرى قد ترغب في تقسيمها .

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

نموذج

بدلاً من تحديد نموذج ، تقوم بإنشاء مستخرج وتكوين تقييم حيادي نموذج لتحليل وتوفير البيانات التي يحتاجها 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 أو مؤشرات الإنصاف .

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)

أخيرًا ، اعرض مؤشرات الإنصاف باستخدام الإرشادات الواردة في قسم "مؤشرات عدالة العرض" أعلاه.

مزيد من الأمثلة

يحتوي دليل أمثلة مؤشرات الإنصاف على عدة أمثلة: