ตัวชี้วัดความเป็นธรรม

ตัวบ่งชี้ความเป็นธรรมได้รับการออกแบบมาเพื่อสนับสนุนทีมในการประเมินและปรับปรุงแบบจำลองสำหรับข้อกังวลด้านความเป็นธรรมร่วมกับชุดเครื่องมือ Tensorflow ที่กว้างขึ้น ปัจจุบันเครื่องมือนี้มีการใช้อย่างแข็งขันภายในโดยผลิตภัณฑ์จำนวนมากของเรา และขณะนี้มีอยู่ในรุ่นเบต้าเพื่อทดลองใช้ในกรณีการใช้งานของคุณเอง

แดชบอร์ดตัวบ่งชี้ความเป็นธรรม

ตัวชี้วัดความเป็นธรรมคืออะไร?

ตัวบ่งชี้ความเป็นธรรมคือไลบรารีที่ช่วยให้คำนวณเมตริกความเป็นธรรมที่ระบุโดยทั่วไปได้ง่ายสำหรับตัวแยกประเภทไบนารีและหลายคลาส เครื่องมือที่มีอยู่จำนวนมากสำหรับการประเมินข้อกังวลด้านความเป็นธรรมนั้นใช้งานไม่ได้กับชุดข้อมูลและแบบจำลองขนาดใหญ่ ที่ Google การมีเครื่องมือที่สามารถทำงานบนระบบที่มีผู้ใช้หลายพันล้านคนเป็นสิ่งสำคัญสำหรับเรา ตัวบ่งชี้ความเป็นธรรมจะช่วยให้คุณสามารถประเมินกรณีการใช้งานได้ทุกขนาด

โดยเฉพาะอย่างยิ่ง ตัวชี้วัดความเป็นธรรมรวมถึงความสามารถในการ:

  • ประเมินการกระจายของชุดข้อมูล
  • ประเมินประสิทธิภาพของแบบจำลอง แบ่งตามกลุ่มผู้ใช้ที่กำหนด
    • รู้สึกมั่นใจในผลลัพธ์ของคุณด้วยช่วงความมั่นใจและการประเมินที่หลายเกณฑ์
  • เจาะลึกลงไปในแต่ละส่วนเพื่อสำรวจสาเหตุและโอกาสในการปรับปรุง

กรณีศึกษา นี้ พร้อมด้วย วิดีโอ และแบบฝึกหัดการเขียนโปรแกรม แสดงให้เห็นว่าสามารถใช้ตัวบ่งชี้ความเป็นธรรมกับผลิตภัณฑ์ของคุณเองเพื่อประเมินข้อกังวลด้านความเป็นธรรมได้อย่างไรเมื่อเวลาผ่านไป

การดาวน์โหลดแพ็คเกจ pip ประกอบด้วย:

การใช้ตัวบ่งชี้ความเป็นธรรมกับแบบจำลองเทนเซอร์โฟลว์

ข้อมูล

ในการเรียกใช้ตัวบ่งชี้ความเป็นธรรมด้วย TFMA ตรวจสอบให้แน่ใจว่าชุดข้อมูลการประเมินนั้นติดป้ายกำกับสำหรับคุณสมบัติที่คุณต้องการแบ่งส่วน หากคุณไม่มีฟีเจอร์สไลซ์ที่แน่นอนสำหรับข้อกังวลด้านความเป็นธรรม คุณอาจลองค้นหาชุดการประเมินที่ใช่ หรือพิจารณาฟีเจอร์พร็อกซีภายในชุดฟีเจอร์ของคุณที่อาจเน้นความแตกต่างของผลลัพธ์ สำหรับคำแนะนำเพิ่มเติม โปรดดู ที่นี่

แบบอย่าง

คุณสามารถใช้คลาส Tensorflow Estimator เพื่อสร้างแบบจำลองของคุณ TFMA รองรับโมเดล Keras ในเร็วๆ นี้ หากคุณต้องการเรียกใช้ TFMA บนโมเดล Keras โปรดดูส่วน "Model-Agnostic 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)

ก่อนรันการกำหนดค่า ให้พิจารณาว่าคุณต้องการเปิดใช้งานการคำนวณช่วงความมั่นใจหรือไม่ ช่วงความเชื่อมั่นคำนวณโดยใช้การบูตแบบปัวซอง และต้องมีการคำนวณใหม่มากกว่า 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)

ตัวชี้วัดความเป็นธรรม

เคล็ดลับในการใช้เครื่องชี้วัดความเป็นธรรม:

  • เลือกตัวชี้วัดที่จะแสดง โดยทำเครื่องหมายที่ช่องทางด้านซ้ายมือ กราฟแต่ละรายการสำหรับเมตริกแต่ละรายการจะปรากฏในวิดเจ็ตตามลำดับ
  • เปลี่ยนเส้นฐาน แถบแรกบนกราฟ โดยใช้ตัวเลือกดรอปดาวน์ เดลต้าจะถูกคำนวณด้วยค่าพื้นฐานนี้
  • เลือกเกณฑ์ โดยใช้ตัวเลือกดรอปดาวน์ คุณสามารถดูเกณฑ์ได้หลายรายการในกราฟเดียวกัน เกณฑ์ที่เลือกจะเป็นตัวหนา และคุณสามารถคลิกเกณฑ์ที่เป็นตัวหนาเพื่อยกเลิกการเลือกได้
  • วางเมาส์เหนือแถบ เพื่อดูตัวชี้วัดสำหรับส่วนนั้น
  • ระบุความไม่เสมอภาคกับเส้นฐาน โดยใช้คอลัมน์ "ส่วนต่าง w. เส้นฐาน" ซึ่งระบุเปอร์เซ็นต์ความแตกต่างระหว่างส่วนปัจจุบันกับเส้นฐาน
  • สำรวจจุดข้อมูลของส่วนลึก โดยใช้ เครื่องมือ 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 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 } }
        }
    }
}

แบบอย่าง

แทนที่จะระบุโมเดล คุณจะสร้างการกำหนดค่า 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 ซึ่งใช้ในการสร้างกราฟเทนเซอร์โฟลว์เพื่อดำเนินการประเมิน

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 จัด เตรียมไว้ให้เพื่อประเมินโมเดล

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

สุดท้าย แสดงผลตัวบ่งชี้ความเป็นธรรมโดยใช้คำแนะนำจากส่วน "การแสดงตัวบ่งชี้ความเป็นธรรม" ด้านบน

ตัวอย่างเพิ่มเติม

ไดเร็กทอรีตัวอย่างตัวบ่งชี้ความเป็นธรรม ประกอบด้วยตัวอย่างหลายประการ: