Fairness Indicators 旨在支援團隊與更廣泛的 Tensorflow 工具組合作,評估及改善模型的公平性問題。此工具目前已廣泛用於我們的眾多產品中,現在推出 BETA 版供您在自身的使用情境中試用。
何謂 Fairness Indicators?
Fairness Indicators 是一個程式庫,可針對二元和多類別分類器輕鬆計算普遍認定的公平性指標。許多現有的公平性問題評估工具無法妥善處理大規模資料集和模型。在 Google,我們認為擁有可處理數十億使用者系統的工具非常重要。Fairness Indicators 可讓您評估任何規模的使用情境。
具體而言,Fairness Indicators 包含下列功能:
- 評估資料集的分配
- 評估模型效能,依使用者定義的群組劃分
- 透過信賴區間和多個門檻的評估,對結果感到放心
- 深入探討個別分層,找出根本原因和改善機會
這個個案研究隨附影片和程式設計練習,示範如何在您自己的產品上使用 Fairness Indicators,以便長期評估公平性問題。
pip 套件下載包含
- Tensorflow Data Validation (TFDV)
- Tensorflow Model Analysis (TFMA)
- Fairness Indicators
- What-If Tool (WIT)
搭配 Tensorflow 模型使用 Fairness Indicators
資料
如要搭配 TFMA 執行 Fairness Indicators,請確保評估資料集已針對您要依據劃分的特徵加上標籤。如果您沒有與公平性問題完全相符的分層特徵,可以考慮尋找符合需求的評估集,或是在特徵集中尋找可能突顯結果差異的替代特徵。如需其他指引,請參閱這裡。
模型
您可以使用 Tensorflow Estimator 類別來建構模型。TFMA 即將支援 Keras 模型。如果您想在 Keras 模型上執行 TFMA,請參閱下方的「Model-Agnostic TFMA」章節。
訓練 Estimator 後,您需要匯出已儲存的模型以進行評估。如要進一步瞭解詳情,請參閱TFMA 指南。
設定分層
接下來,定義您要評估的分層
slice_spec = [
tfma.slicer.SingleSliceSpec(columns=[‘fur color’])
]
如果您想評估交叉分層 (例如,毛色和身高),您可以設定如下:
slice_spec = [
tfma.slicer.SingleSliceSpec(columns=[‘fur_color’, ‘height’])
]`
計算 Fairness Metrics
將 Fairness Indicators 回呼新增至 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)
轉譯 Fairness Indicators
from tensorflow_model_analysis.addons.fairness.view import widget_view
widget_view.render_fairness_indicator(eval_result=eval_result)
使用 Fairness Indicators 的訣竅
- 選取要顯示的指標:勾選左側的方塊。每個指標的個別圖表會依序顯示在小工具中。
- 變更基準分層:使用下拉式選取器變更圖表上的第一個橫條。差異將根據這個基準值計算。
- 選取門檻:使用下拉式選取器選取門檻。您可以在同一個圖表上檢視多個門檻。選取的門檻會以粗體顯示,您可以按一下粗體門檻來取消選取。
- 將滑鼠游標停留在橫條上方:即可查看該分層的指標。
- 找出與基準的差異:使用「與基準的差異」欄位,此欄位會找出目前分層與基準之間的百分比差異。
- 深入探索分層的資料點:使用 What-If Tool。如需範例,請參閱這裡。
轉譯多個模型的 Fairness Indicators
Fairness Indicators 也可用於比較模型。請勿傳入單一 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 模型使用 Fairness Indicators
為了更妥善地支援擁有不同模型和工作流程的客戶,我們開發了一個與要評估的模型無關的評估程式庫。
任何想評估機器學習系統的人員都可以使用此程式庫,特別是當您擁有非以 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’]),
])
]
計算 Fairness Metrics
您可以提供您想在其中評估模型的所有指標,作為 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)))
完成所有設定後,使用 model_eval_lib 提供的 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」章節的指示轉譯 Fairness Indicators。
更多範例
Fairness Indicators 範例目錄包含數個範例
- Fairness_Indicators_Example_Colab.ipynb 概述 TensorFlow Model Analysis 中的 Fairness Indicators,以及如何搭配真實資料集使用。這個筆記本也會介紹 TensorFlow Data Validation 和 What-If Tool,這兩個工具可用於分析與 Fairness Indicators 封裝在一起的 TensorFlow 模型。
- Fairness_Indicators_on_TF_Hub.ipynb 示範如何使用 Fairness Indicators 比較在不同文字嵌入上訓練的模型。這個筆記本使用來自 TensorFlow Hub 的文字嵌入,TensorFlow Hub 是 TensorFlow 的程式庫,可用於發布、探索和重複使用模型元件。
- Fairness_Indicators_TensorBoard_Plugin_Example_Colab.ipynb 示範如何在 TensorBoard 中視覺化 Fairness Indicators。