Générer des insights d’IA responsable avec YAML et Python
S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (préversion)
Vous pouvez générer un tableau de bord et une carte de performance d’IA responsable à l’aide d’un travail de pipeline en utilisant des composants d’IA responsable. Il existe six composants principaux pour créer des tableaux de bord IA responsable, ainsi que quelques composants d’assistance. Voici un exemple de graphe d’expérience :
Composants IA responsable
Les composants principaux de la construction du tableau de bord IA responsable dans Azure Machine Learning sont les suivants :
RAI Insights dashboard constructor
- Composants de l’outil :
Add Explanation to RAI Insights dashboard
Add Causal to RAI Insights dashboard
Add Counterfactuals to RAI Insights dashboard
Add Error Analysis to RAI Insights dashboard
Gather RAI Insights dashboard
Gather RAI Insights score card
Les composants RAI Insights dashboard constructor
et Gather RAI Insights dashboard
sont toujours requis, ainsi qu’au moins un des composants de l’outil. Toutefois, il n’est pas nécessaire d’utiliser tous les outils de chaque tableau de bord IA responsable.
Les sections suivantes présentent les spécifications des composants IA responsable et des exemples d’extraits de code en YAML et Python.
Important
Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. La préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
Limites
L’ensemble actuel de composants présente de nombreuses limitations d’utilisation :
- Tous les modèles doivent être inscrits dans Azure Machine Learning au format MLflow avec une saveur sklearn (scikit-learn).
- Les modèles doivent être chargeables dans l’environnement de composant.
- Les modèles doivent être sérialisables via pickle.
- Les modèles doivent être fournis aux composants IA responsable en utilisant le composant
Fetch Registered Model
(Extraire des modèles inscrits) que nous fournissons. - Les entrées de jeu de données doivent être au format
mltable
. - Un modèle doit être fourni même si seule une analyse causale des données est effectuée. Vous pouvez utiliser pour cela les estimateurs
DummyClassifier
etDummyRegressor
de scikit-learn.
Constructeur de tableau de bord Insights IA responsable
Ce composant a trois ports d’entrée :
- Le modèle Machine Learning
- Le jeu de données d’apprentissage
- Le jeu de données de test
Pour générer des insights de débogage de modèle avec des composants tels que l’analyse des erreurs et les explications de modèle, utilisez le jeu de données d’apprentissage et de test que vous avez utilisé lors de l’apprentissage de votre modèle. Pour des composants tels que l’analyse causale, qui ne nécessite pas de modèle, vous utilisez le jeu de données d’apprentissage pour effectuer l’apprentissage du modèle causal afin de générer les insights causales. Vous utilisez le jeu de données de test pour remplir vos visualisations de tableau de bord d’IA responsable.
Le moyen le plus simple de fournir le modèle consiste à inscrire le modèle d’entrée et à référencer le même modèle dans le port d’entrée de modèle du composant RAI Insight Constructor
, dont nous parlerons plus loin dans cet article.
Notes
Actuellement, seuls les modèles au format MLflow et avec une saveur sklearn
sont pris en charge.
Les deux jeux de données doivent être au format mltable
. Les jeux de données d’apprentissage et de test fournis n’ont pas besoin d’être les mêmes que ceux utilisés dans l’apprentissage du modèle, mais cela est possible. Par défaut, pour des raisons de performances, le jeu de données de test est limité à 5 000 lignes de l’interface utilisateur de visualisation.
Le composant constructeur accepte également les paramètres suivants :
Nom du paramètre | Description | Type |
---|---|---|
title |
Courte description du tableau de bord. | Chaîne |
task_type |
Spécifie si le modèle est destiné à la classification, à la régression, ou à la prévision. | Chaîne, classification , regression ou forecasting |
target_column_name |
Nom de la colonne dans les jeux de données d’entrée, que le modèle tente de prédire. | String |
maximum_rows_for_test_dataset |
Nombre maximal de lignes autorisées dans le jeu de données de test, pour des raisons de performances. | Entier, valeur par défaut 5 000 |
categorical_column_names |
Colonnes des jeux de données, qui représentent des données catégorielles. | Liste facultative de chaînes1 |
classes |
Liste complète des étiquettes de classe dans le jeu de données d’apprentissage. | Liste facultative de chaînes1 |
feature_metadata |
Spécifie des informations supplémentaires dont le tableau de bord peut avoir besoin en fonction du type de tâche. Pour la prévision, cela inclut la spécification de la colonne qui est la colonne datetime et de la colonne qui est la colonne time_series_id . Pour la vision, cela peut inclure une valeur de pixel moyenne ou des données d’emplacement d’une image. |
Liste facultative de chaînes1 |
use_model_dependency |
Spécifie si le modèle nécessite qu’un conteneur Docker distinct soit pris en charge en raison de dépendances en conflit avec le tableau de bord RAI. Pour la prévision, cela doit être activé. En règle générale, pour d’autres scénarios, cela n’est pas activé. | Boolean |
1 Les listes doivent être fournies en tant que chaîne codée JSON unique pour les entrées categorical_column_names
, classes
et feature_metadata
.
Le composant constructeur a une sortie unique nommée rai_insights_dashboard
. Il s’agit d’un tableau de bord vide sur lequel les composants d’outil individuels fonctionnent. Tous les résultats sont assemblés par le composant Gather RAI Insights dashboard
à la fin.
create_rai_job:
type: command
component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_constructor/versions/<get current version>
inputs:
title: From YAML snippet
task_type: regression
type: mlflow_model
path: azureml:<registered_model_name>:<registered model version>
train_dataset: ${{parent.inputs.my_training_data}}
test_dataset: ${{parent.inputs.my_test_data}}
target_column_name: ${{parent.inputs.target_column_name}}
categorical_column_names: '["location", "style", "job title", "OS", "Employer", "IDE", "Programming language"]'
Ajouter une analyse causale au tableau de bord Insights IA responsable
Ce composant effectue une analyse causale sur les jeux de données fournis. Il a un port d’entrée unique, qui accepte la sortie du RAI Insights dashboard constructor
. Il accepte aussi les paramètres suivants :
Nom du paramètre | Description | Tapez . |
---|---|---|
treatment_features |
Liste des noms de caractéristiques dans les jeux de données, qui sont potentiellement « traitables » pour obtenir différents résultats. | Liste de chaînes2. |
heterogeneity_features |
Liste des noms de caractéristiques dans les jeux de données, qui peuvent affecter le comportement des caractéristiques « traitables ». Par défaut, toutes les caractéristiques sont prises en compte. | Liste facultative de chaînes2. |
nuisance_model |
Modèle utilisé pour estimer le résultat de la modification des caractéristiques de traitement. | Chaîne facultative. Doit être linear ou AutoML , par défaut linear . |
heterogeneity_model |
Modèle utilisé pour estimer l’effet des caractéristiques d’hétérogénéité sur le résultat. | Chaîne facultative. Doit être linear ou forest , par défaut linear . |
alpha |
Niveau de confiance des intervalles de confiance. | Nombre à virgule flottante facultatif, par défaut 0,05. |
upper_bound_on_cat_expansion |
Extension maximale pour les caractéristiques catégorielles. | Entier facultatif, par défaut 50. |
treatment_cost |
Le coût des traitements. Si la valeur est 0, tous les traitements ont un coût nul. Si une liste est passée, chaque élément est appliqué à l’une des treatment_features .Chaque élément peut être une valeur scalaire pour indiquer un coût constant d’application de ce traitement ou un tableau indiquant le coût de chaque échantillon. Si le traitement est un traitement discret, le tableau de cette caractéristique doit être à deux dimensions, la première dimension représentant des échantillons et la seconde représentant la différence de coût entre la valeur par défaut et les autres valeurs. |
Entier facultatif ou liste2. |
min_tree_leaf_samples |
Nombre minimal d’échantillons par nœud terminal dans l’arborescence de stratégie. | Entier facultatif, par défaut 2. |
max_tree_depth |
Profondeur maximale de l’arborescence de stratégie. | Entier facultatif, par défaut 2. |
skip_cat_limit_checks |
Par défaut, les caractéristiques catégorielles doivent avoir plusieurs instances de chaque catégorie afin qu’un modèle soit robuste. La définition de la valeur sur True ignore ces vérifications. |
Booléen facultatif, par défaut False . |
categories |
Catégories à utiliser pour les colonnes catégorielles. Si auto , les catégories sont déduites pour toutes les colonnes catégorielles. Sinon, cet argument doit comporter autant d’entrées qu’il existe de colonnes catégorielles.Chaque entrée doit être soit auto pour déduire les valeurs de cette colonne, soit la liste des valeurs de la colonne. Si des valeurs explicites sont fournies, la première valeur est traitée comme la valeur « contrôle » pour cette colonne par rapport à laquelle d’autres valeurs sont comparées. |
Facultatif, auto ou liste2. |
n_jobs |
Degré de parallélisme à appliquer, | Entier facultatif, par défaut 1. |
verbose |
Spécifie s’il faut fournir une sortie détaillée pendant le calcul. | Entier facultatif, par défaut 1. |
random_state |
Valeur de départ pour le générateur de nombres pseudo-aléatoires (PRNG). | Entier facultatif. |
2 Pour les paramètres list
: plusieurs paramètres acceptent des listes d’autres types (chaînes, nombres, et même autres listes). Pour les transmettre au composant, ils doivent d’abord être encodés en JSON dans une seule chaîne.
Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n]
du composant Gather RAI Insights Dashboard
.
causal_01:
type: command
component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_causal/versions/<version>
inputs:
rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}}
treatment_features: `["Number of GitHub repos contributed to", "YOE"]'
Ajouter des points contrefactuels au tableau de bord Insights IA responsable
Ce composant génère des points contrefactuels pour le jeu de données de test fourni. Il dispose d’un port d’entrée unique, qui accepte la sortie du constructeur de tableau de bord d’insights IA responsable. Il accepte aussi les paramètres suivants :
Nom du paramètre | Description | Type |
---|---|---|
total_CFs |
Nombre de points contrefactuels à générer pour chaque ligne du jeu de données de test. | Entier facultatif, par défaut 10. |
method |
Explication dice-ml à utiliser. |
Chaîne facultative. random , genetic ou kdtree . La valeur par défaut est random . |
desired_class |
Index identifiant la classe contrefactuelle souhaitée. Pour la classification binaire, cette valeur doit être définie sur opposite . |
Chaîne ou entier facultatif. La valeur par défaut est 0. |
desired_range |
Pour les problèmes de régression, identifiez la plage de résultats souhaitée. | Liste facultative de deux nombres3. |
permitted_range |
Dictionnaire avec des noms de caractéristiques en tant que clés et plage autorisée dans la liste en tant que valeurs. La valeur par défaut est la plage déduite des données d’entraînement. | Chaîne ou liste facultative3. |
features_to_vary |
Chaîne all ou liste de noms de caractéristiques qui varient. |
Chaîne ou liste facultative3. |
feature_importance |
Indicateur pour activer le calcul de l’importance des caractéristiques à l’aide de dice-ml . |
Valeur booléenne facultative. La valeur par défaut est True . |
3 Pour les paramètres non scalaires : les paramètres qui sont des listes ou des dictionnaires doivent être passés en tant que chaînes codées en JSON uniques.
Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n]
du composant Gather RAI Insights dashboard
.
counterfactual_01:
type: command
component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_counterfactual/versions/<version>
inputs:
rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}}
total_CFs: 10
desired_range: "[5, 10]"
Ajouter une analyse des erreurs au tableau de bord Insights IA responsable
Ce composant génère une analyse d’erreur pour le modèle. Il a un port d’entrée unique, qui accepte la sortie du RAI Insights Dashboard Constructor
. Il accepte aussi les paramètres suivants :
Nom du paramètre | Description | Type |
---|---|---|
max_depth |
Profondeur maximale de l’arborescence d’analyse des erreurs. | Entier facultatif. La valeur par défaut est 3. |
num_leaves |
Nombre maximal de nœuds terminaux dans l’arborescence d’erreurs. | Entier facultatif. La valeur par défaut est 31. |
min_child_samples |
Nombre minimal de points de données requis pour produire un nœud terminal. | Entier facultatif. La valeur par défaut est 20. |
filter_features |
Liste d’une ou deux caractéristiques à utiliser pour le filtre de matrice. | Liste facultative, à passer en tant que chaîne encodée JSON unique. |
Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n]
du composant Gather RAI Insights Dashboard
.
error_analysis_01:
type: command
component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_erroranalysis/versions/<version>
inputs:
rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}}
filter_features: `["style", "Employer"]'
Ajouter une explication au tableau de bord Insights IA responsable
Ce composant génère une explication du modèle. Il a un port d’entrée unique, qui accepte la sortie du RAI Insights Dashboard Constructor
. Il accepte une chaîne de commentaire facultative unique en tant que paramètre.
Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n]
du composant Collecter le tableau de bord Insights IA responsable.
explain_01:
type: command
component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_explanation/versions/<version>
inputs:
comment: My comment
rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}}
Collecter le tableau de bord Insights IA responsable
Ce composant assemble les insights générés dans un tableau de bord IA responsable unique. Il a cinq ports d’entrée :
- Port
constructor
qui doit être connecté au composant Constructeur de tableau de bord Insights IA responsable. - Quatre ports
insight_[n]
pouvant être connectés à la sortie des composants d’outil. Au moins un de ces ports doit être connecté.
Il existe deux ports de sortie :
- Le port
dashboard
contient l’objetRAIInsights
terminé. - Le port
ux_json
contient les données requises pour afficher un tableau de bord minimal.
gather_01:
type: command
component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_gather/versions/<version>
inputs:
constructor: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}}
insight_1: ${{parent.jobs.causal_01.outputs.causal}}
insight_2: ${{parent.jobs.counterfactual_01.outputs.counterfactual}}
insight_3: ${{parent.jobs.error_analysis_01.outputs.error_analysis}}
insight_4: ${{parent.jobs.explain_01.outputs.explanation}}
Comment générer une carte de performance d’IA responsable (préversion) ?
L’étape de configuration vous oblige à utiliser votre expertise de domaine autour du problème pour définir vos valeurs cibles souhaitées sur les performances du modèle et les métriques d’équité.
Comme d’autres composants de tableau de bord d’IA responsable configurés dans le pipeline YAML, vous pouvez ajouter un composant pour générer la carte de performance dans le pipeline YAML :
scorecard_01:
type: command
component: azureml:rai_score_card@latest
inputs:
dashboard: ${{parent.jobs.gather_01.outputs.dashboard}}
pdf_generation_config:
type: uri_file
path: ./pdf_gen.json
mode: download
predefined_cohorts_json:
type: uri_file
path: ./cohorts.json
mode: download
Où pdf_gen.json est le fichier json de configuration de la génération de carte de performance et l’ID predifined_cohorts_json est le fichier json de définition de cohortes prédéfini.
Voici un exemple de fichier JSON pour la définition de cohortes et la configuration de génération de carte de performance :
Définition de cohortes :
[
{
"name": "High Yoe",
"cohort_filter_list": [
{
"method": "greater",
"arg": [
5
],
"column": "YOE"
}
]
},
{
"name": "Low Yoe",
"cohort_filter_list": [
{
"method": "less",
"arg": [
6.5
],
"column": "YOE"
}
]
}
]
Voici un fichier de configuration de génération de carte de performance en guise d’exemple de régression :
{
"Model": {
"ModelName": "GPT-2 Access",
"ModelType": "Regression",
"ModelSummary": "This is a regression model to analyze how likely a programmer is given access to GPT-2"
},
"Metrics": {
"mean_absolute_error": {
"threshold": "<=20"
},
"mean_squared_error": {}
},
"FeatureImportance": {
"top_n": 6
},
"DataExplorer": {
"features": [
"YOE",
"age"
]
},
"Fairness": {
"metric": ["mean_squared_error"],
"sensitive_features": ["YOUR SENSITIVE ATTRIBUTE"],
"fairness_evaluation_kind": "difference OR ratio"
},
"Cohorts": [
"High Yoe",
"Low Yoe"
]
}
Voici un fichier de configuration de génération de carte de performance en guise d’exemple de classification :
{
"Model": {
"ModelName": "Housing Price Range Prediction",
"ModelType": "Classification",
"ModelSummary": "This model is a classifier that predicts whether the house will sell for more than the median price."
},
"Metrics" :{
"accuracy_score": {
"threshold": ">=0.85"
},
}
"FeatureImportance": {
"top_n": 6
},
"DataExplorer": {
"features": [
"YearBuilt",
"OverallQual",
"GarageCars"
]
},
"Fairness": {
"metric": ["accuracy_score", "selection_rate"],
"sensitive_features": ["YOUR SENSITIVE ATTRIBUTE"],
"fairness_evaluation_kind": "difference OR ratio"
}
}
Définition d’entrées pour le composant de carte de performance d’IA responsable
Cette section répertorie et définit les paramètres requis pour configurer le composant de carte de performance d’IA responsable.
Modèle
ModelName | Nom du modèle |
---|---|
ModelType |
Valeurs dans ['classification', 'regression']. |
ModelSummary |
Entrez un texte résumant l'objet du modèle. |
Notes
Pour la classification multiclasse, vous devez d’abord utiliser la stratégie One-vs-Rest pour choisir votre classe de référence, puis fractionner votre modèle de classification multiclasse en un problème de classification binaire pour votre classe de référence sélectionnée et le reste des classes.
Mesures
Mesure de performance | Définition | Type de modèle |
---|---|---|
accuracy_score |
Fraction de points de données correctement classifiés. | classification ; |
precision_score |
Fraction de points de données correctement classifiés parmi ceux classifiés comme ayant la valeur 1. | classification ; |
recall_score |
Fraction de points de données correctement classifiés parmi ceux dont l’étiquette réelle est 1. Autres noms : taux de vrai positif, sensibilité. | classification ; |
f1_score |
Le score F1 est la moyenne harmonique de la précision et du rappel. | classification ; |
error_rate |
Proportion d’instances mal classifiées sur l’ensemble des instances. | classification ; |
mean_absolute_error |
Moyenne de valeurs d’erreurs absolues. Plus robuste pour les valeurs hors norme que mean_squared_error . |
régression ; |
mean_squared_error |
Moyenne des erreurs quadratiques. | régression ; |
median_absolute_error |
Valeur médiane des erreurs carrées. | régression ; |
r2_score |
Fraction de variance dans les étiquettes expliquée par le modèle. | régression ; |
Seuil : seuil souhaité pour la métrique sélectionnée. Les jetons mathématiques autorisés sont >, <, >= et <=m, suivis d’un nombre réel. Par exemple, >= 0,75 signifie que la cible pour la métrique sélectionnée est supérieure ou égale à 0,75.
Importance de la fonctionnalité
top_n : nombre de fonctionnalités à afficher avec un maximum de 10. Les entiers positifs jusqu’à 10 sont autorisés.
Équité
Métrique | Définition |
---|---|
metric |
Métrique principale pour l’impartialité de l’évaluation. |
sensitive_features |
Liste de noms de caractéristiques du jeu de données d’entrée à désigner comme caractéristiques sensibles pour le rapport d’impartialité. |
fairness_evaluation_kind |
Valeurs dans ['difference', 'ratio']. |
threshold |
Valeurs cibles souhaitées de l’évaluation d’impartialité. Les jetons mathématiques autorisés sont >, <, >= et <=, suivis d’un nombre réel. Par exemple, metric="accuracy", fairness_evaluation_kind="difference". <= 0,05 signifie que la cible pour la différence d’exactitude est inférieure ou égale à 0,05. |
Notes
Votre choix de fairness_evaluation_kind
(sélection de 'difference' ou 'ratio') affecte l’échelle de votre valeur cible. Dans votre sélection, veillez à choisir une valeur cible significative.
Vous pouvez sélectionner parmi les métriques suivantes, jumelées avec fairness_evaluation_kind
pour configurer le composant d’évaluation d’impartialité de la carte de performance :
Métrique | fairness_evaluation_kind | Définition | Type de modèle |
---|---|---|---|
accuracy_score |
différence | La différence maximale en score d’exactitude entre deux groupes. | classification ; |
accuracy_score |
ratio | Le rapport minimal en score d’exactitude entre deux groupes. | classification ; |
precision_score |
différence | La différence maximale en score d’exactitude entre deux groupes. | classification ; |
precision_score |
ratio | Le rapport maximal en score d’exactitude entre deux groupes. | classification ; |
recall_score |
différence | La différence maximale en score de rappel entre deux groupes. | classification ; |
recall_score |
ratio | Le rapport maximal en score de rappel entre deux groupes. | classification ; |
f1_score |
différence | La différence maximale en score f1 entre deux groupes. | classification ; |
f1_score |
ratio | Le rapport maximal en score f1 entre deux groupes. | classification ; |
error_rate |
différence | La différence maximale en taux d’erreur entre deux groupes. | classification ; |
error_rate |
ratio | Le rapport maximal en taux d’erreur entre deux groupes. | classification ; |
Selection_rate |
différence | La différence maximale en taux de sélection entre deux groupes. | classification ; |
Selection_rate |
ratio | Le rapport maximal en taux de sélection entre deux groupes. | classification ; |
mean_absolute_error |
différence | Différence maximale en erreur absolue moyenne entre deux groupes. | régression ; |
mean_absolute_error |
ratio | Rapport maximal en erreur absolue moyenne entre deux groupes. | régression ; |
mean_squared_error |
différence | Différence maximale en erreur carrée moyenne entre deux groupes. | régression ; |
mean_squared_error |
ratio | Rapport maximal en erreur carrée moyenne entre deux groupes. | régression ; |
median_absolute_error |
différence | Différence maximale en erreur absolue médiane entre deux groupes. | régression ; |
median_absolute_error |
ratio | Rapport maximal en erreur absolue médiane entre deux groupes. | régression ; |
r2_score |
différence | La différence maximale en score R2 entre deux groupes. | régression ; |
r2_Score |
ratio | Le rapport maximal en score R2 entre deux groupes. | régression ; |
Contraintes d’entrée
Quels sont les formats et saveurs de modèle pris en charge ?
Le modèle doit se trouver dans le répertoire MLflow avec une saveur sklearn disponible. En outre, le modèle doit être chargeable dans l’environnement qui est utilisé par les composants IA responsable.
Quels sont les formats de données acceptés ?
Les jeux de données fournis doivent être au format mltable
avec des données tabulaires.
Étapes suivantes
- Une fois votre tableau de bord IA responsable généré, découvrez comment y accéder et l’utiliser dans Azure Machine Learning studio.
- Récapitulez et partagez vos insights d’IA responsable avec la carte de performance d’IA responsable en tant qu’exportation PDF.
- Apprenez-en davantage sur les concepts et les techniques du tableau de bord d’IA responsable.
- Découvrez comment collecter des données de manière responsable.
- Affichez des exemples de notebooks YAML et Python pour générer le tableau de bord IA responsable avec YAML ou Python.
- Apprenez-en davantage sur la façon d’utiliser le tableau de bord IA responsable et la carte de performance pour déboguer des données et des modèles, et mieux éclairer la prise de décisions dans ce billet de blog de la communauté technique.
- Découvrez comment le tableau de bord IA responsable et la carte de performance ont été utilisés par le UK National Health Service (NHS) dans un témoignage client réel.
- Explorez les fonctionnalités du tableau de bord IA responsable via cette démonstration web interactive du Laboratoire d’IA.