ตัวบ่งชี้ความเป็นธรรมได้รับการออกแบบมาเพื่อสนับสนุนทีมในการประเมินและปรับปรุงแบบจำลองสำหรับข้อกังวลด้านความเป็นธรรมร่วมกับชุดเครื่องมือ Tensorflow ที่กว้างขึ้น ปัจจุบันเครื่องมือนี้มีการใช้อย่างแข็งขันภายในโดยผลิตภัณฑ์จำนวนมากของเรา และขณะนี้มีอยู่ในรุ่นเบต้าเพื่อทดลองใช้ในกรณีการใช้งานของคุณเอง
ตัวชี้วัดความเป็นธรรมคืออะไร?
ตัวบ่งชี้ความเป็นธรรมคือไลบรารีที่ช่วยให้คำนวณเมตริกความเป็นธรรมที่ระบุโดยทั่วไปได้ง่ายสำหรับตัวแยกประเภทไบนารีและหลายคลาส เครื่องมือที่มีอยู่จำนวนมากสำหรับการประเมินข้อกังวลด้านความเป็นธรรมนั้นใช้งานไม่ได้กับชุดข้อมูลและแบบจำลองขนาดใหญ่ ที่ Google การมีเครื่องมือที่สามารถทำงานได้บนระบบที่มีผู้ใช้หลายพันล้านคนเป็นสิ่งสำคัญสำหรับเรา ตัวบ่งชี้ความเป็นธรรมจะช่วยให้คุณสามารถประเมินกรณีการใช้งานได้ทุกขนาด
โดยเฉพาะอย่างยิ่ง ตัวชี้วัดความเป็นธรรมรวมถึงความสามารถในการ:
- ประเมินการกระจายของชุดข้อมูล
- ประเมินประสิทธิภาพของแบบจำลอง แบ่งตามกลุ่มผู้ใช้ที่กำหนด
- รู้สึกมั่นใจในผลลัพธ์ของคุณด้วยช่วงความมั่นใจและการประเมินที่หลายเกณฑ์
- เจาะลึกลงไปในแต่ละส่วนเพื่อสำรวจสาเหตุและโอกาสในการปรับปรุง
กรณีศึกษา นี้ พร้อมด้วย วิดีโอ และแบบฝึกหัดการเขียนโปรแกรม แสดงให้เห็นว่าสามารถใช้ตัวบ่งชี้ความเป็นธรรมกับผลิตภัณฑ์ของคุณเองเพื่อประเมินข้อกังวลด้านความเป็นธรรมได้อย่างไรเมื่อเวลาผ่านไป
การดาวน์โหลดแพ็คเกจ pip ประกอบด้วย:
- การตรวจสอบข้อมูลเทนเซอร์โฟลว์ (TFDV)
- การวิเคราะห์แบบจำลองเทนเซอร์โฟลว์ (TFMA)
- ตัวชี้วัดความเป็นธรรม
- เครื่องมือ What-If (WIT)
การใช้ตัวบ่งชี้ความเป็นธรรมกับแบบจำลองเทนเซอร์โฟลว์
ข้อมูล
ในการเรียกใช้ตัวบ่งชี้ความเป็นธรรมด้วย 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)
ก่อนรันการกำหนดค่า ให้พิจารณาว่าคุณต้องการเปิดใช้งานการคำนวณช่วงความมั่นใจหรือไม่ ช่วงความเชื่อมั่นคำนวณโดยใช้ 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)
เคล็ดลับในการใช้เครื่องชี้วัดความเป็นธรรม:
- เลือกเมตริกที่จะแสดง โดยทำเครื่องหมายในช่องทางด้านซ้ายมือ กราฟแต่ละรายการสำหรับเมตริกแต่ละรายการจะปรากฏในวิดเจ็ตตามลำดับ
- เปลี่ยนเส้นฐาน แถบแรกบนกราฟ โดยใช้ตัวเลือกแบบเลื่อนลง เดลต้าจะถูกคำนวณด้วยค่าพื้นฐานนี้
- เลือกเกณฑ์ โดยใช้ตัวเลือกดรอปดาวน์ คุณสามารถดูเกณฑ์ได้หลายรายการในกราฟเดียวกัน เกณฑ์ที่เลือกจะเป็นตัวหนา และคุณสามารถคลิกเกณฑ์ที่เป็นตัวหนาเพื่อยกเลิกการเลือกได้
- วางเมาส์เหนือแถบ เพื่อดูเมตริกสำหรับสไลซ์นั้น
- ระบุความไม่เท่าเทียมกันกับเส้นฐาน โดยใช้คอลัมน์ "ส่วนต่างของเส้นฐาน" ซึ่งระบุเปอร์เซ็นต์ความแตกต่างระหว่างส่วนต่างปัจจุบันกับเส้นฐาน
- สำรวจจุดข้อมูลของส่วนลึก โดยใช้ เครื่องมือ 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)
สุดท้าย แสดงผลตัวบ่งชี้ความเป็นธรรมโดยใช้คำแนะนำจากส่วน "การแสดงตัวบ่งชี้ความเป็นธรรม" ด้านบน
ตัวอย่างเพิ่มเติม
ไดเร็กทอรีตัวอย่างตัวบ่งชี้ความเป็นธรรม ประกอบด้วยตัวอย่างหลายประการ:
- Fairness_Indicators_Example_Colab.ipynb ให้ภาพรวมของตัวบ่งชี้ความเป็นธรรมใน การวิเคราะห์แบบจำลอง TensorFlow และวิธีใช้งานกับชุดข้อมูลจริง โน้ตบุ๊กนี้ยังกล่าวถึง TensorFlow Data Validation และ What-If Tool ซึ่งเป็นเครื่องมือสองอย่างสำหรับการวิเคราะห์แบบจำลอง TensorFlow ที่มาพร้อมกับ Fairness Indicators
- Fairness_Indicators_on_TF_Hub.ipynb สาธิตวิธีใช้ Fairness Indicators เพื่อเปรียบเทียบแบบจำลองที่ได้รับการฝึกใน การฝังข้อความ ต่างๆ สมุดบันทึกนี้ใช้การฝังข้อความจาก TensorFlow Hub ไลบรารีของ TensorFlow เพื่อเผยแพร่ ค้นพบ และนำองค์ประกอบของโมเดลมาใช้ซ้ำ
- Fairness_Indicators_TensorBoard_Plugin_Example_Colab.ipynb สาธิตวิธีการแสดงภาพตัวบ่งชี้ความเป็นธรรมใน TensorBoard