Los indicadores de equidad están diseñados para ayudar a los equipos a evaluar y mejorar los modelos para las preocupaciones de equidad en asociación con el conjunto de herramientas más amplio de Tensorflow. Actualmente, muchos de nuestros productos utilizan activamente la herramienta de forma interna y ahora está disponible en versión BETA para que la pruebe en sus propios casos de uso.
¿Qué son los indicadores de equidad?
Fairness Indicators es una biblioteca que permite el cálculo sencillo de métricas de equidad comúnmente identificadas para clasificadores binarios y multiclase. Muchas herramientas existentes para evaluar las preocupaciones sobre la equidad no funcionan bien en conjuntos de datos y modelos a gran escala. En Google, es importante para nosotros tener herramientas que puedan funcionar en sistemas de miles de millones de usuarios. Los indicadores de equidad le permitirán evaluar casos de uso de cualquier tamaño.
En particular, los indicadores de equidad incluyen la capacidad de:
- Evaluar la distribución de conjuntos de datos
- Evalúe el rendimiento del modelo, dividido en grupos definidos de usuarios
- Confíe en sus resultados con intervalos de confianza y evaluaciones en múltiples umbrales
- Profundice en los segmentos individuales para explorar las causas fundamentales y las oportunidades de mejora
Este estudio de caso , completo con videos y ejercicios de programación, demuestra cómo se pueden usar los indicadores de equidad en uno de sus propios productos para evaluar las preocupaciones de equidad a lo largo del tiempo.
La descarga del paquete pip incluye:
- Validación de datos de Tensorflow (TFDV)
- Análisis del modelo de flujo de tensor (TFMA)
- Indicadores de equidad
- La herramienta What-If (WIT)
Uso de indicadores de equidad con modelos Tensorflow
Datos
Para ejecutar indicadores de equidad con TFMA, asegúrese de que el conjunto de datos de evaluación esté etiquetado para las características que le gustaría dividir. Si no tiene las funciones de corte exactas para sus preocupaciones sobre la equidad, puede intentar encontrar un conjunto de evaluación que las tenga, o considerar funciones de proxy dentro de su conjunto de funciones que pueden resaltar las disparidades en los resultados. Para obtener orientación adicional, consulte aquí .
Modelo
Puede usar la clase Tensorflow Estimator para construir su modelo. El soporte para los modelos Keras llegará pronto a TFMA. Si desea ejecutar TFMA en un modelo de Keras, consulte la sección "TFMA independiente del modelo" a continuación.
Después de entrenar a su Estimador, deberá exportar un modelo guardado para fines de evaluación. Para obtener más información, consulte la guía TFMA .
Configuración de sectores
A continuación, defina los cortes en los que le gustaría evaluar:
slice_spec = [
tfma.slicer.SingleSliceSpec(columns=[‘fur color’])
]
Si desea evaluar cortes interseccionales (por ejemplo, tanto el color como la altura del pelaje), puede configurar lo siguiente:
slice_spec = [
tfma.slicer.SingleSliceSpec(columns=[‘fur_color’, ‘height’])
]`
Métricas de equidad informática
Agregue una devolución de llamada de indicadores de equidad a la lista metrics_callback
. En la devolución de llamada, puede definir una lista de umbrales en los que se evaluará el modelo.
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)
Antes de ejecutar la configuración, determine si desea o no habilitar el cálculo de los intervalos de confianza. Los intervalos de confianza se calculan utilizando el arranque de Poisson y requieren volver a calcularse en 20 muestras.
compute_confidence_intervals = True
Ejecute la canalización de evaluación de 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)
Indicadores de equidad de renderizado
from tensorflow_model_analysis.addons.fairness.view import widget_view
widget_view.render_fairness_indicator(eval_result=eval_result)
Consejos para usar indicadores de equidad:
- Seleccione las métricas para mostrar marcando las casillas del lado izquierdo. Aparecerán gráficos individuales para cada una de las métricas en el widget, en orden.
- Cambie el segmento de referencia , la primera barra del gráfico, utilizando el selector desplegable. Los deltas se calcularán con este valor de referencia.
- Seleccione los umbrales con el selector desplegable. Puede ver varios umbrales en el mismo gráfico. Los umbrales seleccionados aparecerán en negrita y puede hacer clic en un umbral en negrita para deseleccionarlo.
- Pase el cursor sobre una barra para ver las métricas de ese segmento.
- Identifique las disparidades con la línea de base utilizando la columna "Dif. con la línea de base", que identifica la diferencia porcentual entre el segmento actual y la línea de base.
- Explore los puntos de datos de un corte en profundidad con la herramienta What-If . Vea aquí un ejemplo.
Indicadores de Equidad de Representación para Múltiples Modelos
Los indicadores de equidad también se pueden utilizar para comparar modelos. En lugar de pasar un solo eval_result, pase un objeto multi_eval_results, que es un diccionario que asigna dos nombres de modelo a objetos 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)
La comparación de modelos se puede utilizar junto con la comparación de umbrales. Por ejemplo, puede comparar dos modelos en dos conjuntos de umbrales para encontrar la combinación óptima para sus métricas de equidad.
Uso de indicadores de equidad con modelos que no son de TensorFlow
Para brindar un mejor soporte a los clientes que tienen diferentes modelos y flujos de trabajo, hemos desarrollado una biblioteca de evaluación que es independiente del modelo que se está evaluando.
Cualquiera que quiera evaluar su sistema de aprendizaje automático puede usar esto, especialmente si tiene modelos que no están basados en TensorFlow. Con Apache Beam Python SDK, puede crear un binario de evaluación de TFMA independiente y luego ejecutarlo para analizar su modelo.
Datos
Este paso es proporcionar el conjunto de datos en el que desea que se ejecuten las evaluaciones. Debe estar en formato de prototipo tf.Example con etiquetas, predicciones y otras características que quizás desee dividir.
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 } }
}
}
}
Modelo
En lugar de especificar un modelo, puede crear una configuración y extractor de evaluación independiente del modelo para analizar y proporcionar los datos que TFMA necesita para calcular las métricas. La especificación ModelAgnosticConfig define las características, las predicciones y las etiquetas que se utilizarán a partir de los ejemplos de entrada.
Para ello, cree un mapa de funciones con claves que representen todas las funciones, incluidas las claves de etiquetas y de predicción, y los valores que representen el tipo de datos de la función.
feature_map[label_key] = tf.FixedLenFeature([], tf.float32, default_value=[0])
Cree una configuración independiente del modelo utilizando claves de etiqueta, claves de predicción y el mapa de funciones.
model_agnostic_config = model_agnostic_predict.ModelAgnosticConfig(
label_keys=list(ground_truth_labels),
prediction_keys=list(predition_labels),
feature_spec=feature_map)
Configurar extractor agnóstico de modelos
El extractor se usa para extraer las características, las etiquetas y las predicciones de la entrada usando la configuración agnóstica del modelo. Y si desea dividir sus datos, también debe definir la especificación de la clave de división, que contiene información sobre las columnas en las que desea dividir.
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’]),
])
]
Métricas de equidad informática
Como parte de EvalSharedModel , puede proporcionar todas las métricas sobre las que desea que se evalúe su modelo. Las métricas se proporcionan en forma de devoluciones de llamadas de métricas como las definidas en post_export_metrics o fairness_indicators .
metrics_callbacks.append(
post_export_metrics.fairness_indicators(
thresholds=[0.5, 0.9],
target_prediction_keys=[prediction_key],
labels_key=label_key))
También toma un construct_fn
que se usa para crear un gráfico de tensorflow para realizar la evaluación.
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)))
Una vez que todo esté configurado, use una de las funciones ExtractEvaluate
o ExtractEvaluateAndWriteResults
proporcionadas por model_eval_lib para evaluar el modelo.
_ = (
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)
Por último, renderice los indicadores de imparcialidad siguiendo las instrucciones de la sección anterior "Procesar indicadores de imparcialidad".
Más ejemplos
El directorio de ejemplos de indicadores de equidad contiene varios ejemplos:
- Fairness_Indicators_Example_Colab.ipynb brinda una descripción general de los indicadores de equidad en TensorFlow Model Analysis y cómo usarlo con un conjunto de datos real. Este cuaderno también repasa la validación de datos de TensorFlow y la herramienta What-If , dos herramientas para analizar modelos de TensorFlow que se empaquetan con indicadores de equidad.
- Fairness_Indicators_on_TF_Hub.ipynb demuestra cómo usar los indicadores de equidad para comparar modelos entrenados en diferentes incrustaciones de texto . Este cuaderno utiliza incrustaciones de texto de TensorFlow Hub , la biblioteca de TensorFlow para publicar, descubrir y reutilizar componentes de modelos.
- Fairness_Indicators_TensorBoard_Plugin_Example_Colab.ipynb demuestra cómo visualizar indicadores de equidad en TensorBoard.