Évaluation de modèles multi-tâches pour la prise de décision basée sur le risque
Apprenez à utiliser les EvaluationSuites pour identifier des lacunes de performance spécifiques à travers diverses tâches au lieu de vous fier à un score global unique.
Dans ce guide
Idée principale
Pour évaluer avec précision un modèle d'IA, les praticiens doivent s'éloigner des mesures agrégées uniques et adopter une stratégie d'évaluation multi-tâches. En composant une EvaluationSuite constituée de plusieurs SubTasks - chacune associant un évaluateur, un jeu de données et une métrique spécifiques - les développeurs peuvent sonder différentes dimensions du comportement du modèle, telles que le raisonnement général, l'équité et les biais. Cette approche permet l'identification d'axes de risque spécifiques ; par exemple, un modèle peut afficher une précision globale élevée mais échouer significativement sur l'implication en langage naturel ou présenter des biais dans des sous-ensembles démographiques spécifiques. Les décisions sont ensuite prises sur la base de ces profils de risque individuels, garantissant qu'un score moyen élevé ne masque pas des défaillances critiques dans une tâche à haut risque.
Stratégie d'évaluation multi-tâches
S'appuyer sur un score agrégé unique pour évaluer un modèle masque souvent des faiblesses critiques. Un modèle peut atteindre une précision moyenne élevée sur un benchmark large tout en échouant catastrophiquement sur une tâche spécifique à haut risque. L'évaluation des modèles sur un ensemble diversifié de tâches aide à révéler les écarts de performance le long d'axes spécifiques, comme une divergence entre la perplexité intra-domaine et les capacités linguistiques générales.
En décomposant l'évaluation en tâches distinctes, les praticiens peuvent distinguer un modèle généralement capable d'un modèle simplement sur-optimisé pour un motif de jeu de données spécifique. Cette vue granulaire est essentielle pour identifier les risques liés à l'équité, aux biais et à la fiabilité, qui sont généralement lissés dans une moyenne globale.
Composition d'une suite d'évaluation
Une EvaluationSuite est structurée comme une collection de SubTasks. Chaque SubTask est un tuple contenant un évaluateur, un jeu de données et une métrique. Cette modularité permet à la suite de sonder diverses dimensions du modèle. Par exemple, une SubTask peut se concentrer sur la classification de texte pour l'analyse de sentiment, tandis qu'une autre se concentre sur l'implication en langage naturel pour tester la cohérence logique.
Pour garantir que la suite est complète, les développeurs doivent inclure des tâches testant les capacités générales ainsi que celles conçues pour sonder les biais. Certains jeux de données nécessitent un data_preprocessor pour formater correctement les entrées avant qu'elles ne soient transmises à l'évaluateur, garantissant que le modèle reçoit les données selon le schéma attendu.
Implémentation et exécution
Techniquement, une SubTask nécessite des attributs obligatoires : task_type (correspondant aux tâches d'évaluateur supportées) et data (un objet ou un nom de jeu de données Hugging Face). Des attributs supplémentaires comme subset, split et args_for_task permettent un contrôle précis sur la tranche d'évaluation et les métriques spécifiques utilisées, telles que la précision ou le score F1.
La suite est exécutée à l'aide d'une méthode run qui prend un modèle ou un pipeline en entrée. Ce processus génère un rapport détaillé contenant le nom de la tâche, la métrique calculée et la télémétrie de performance telle que le temps total et la latence par échantillon.
import evaluate
from evaluate.evaluation_suite import SubTask
class Suite(evaluate.EvaluationSuite):
def __init__(self, name):
super().__init__(name)
self.suite = [
SubTask(
task_type='text-classification',
data='glue',
subset='sst2',
split='validation[:10]',
args_for_task={
'metric': 'accuracy',
'input_column': 'sentence',
'label_column': 'label',
'label_mapping': {'LABEL_0': 0.0, 'LABEL_1': 1.0}
}
),
SubTask(
task_type='text-classification',
data='glue',
subset='rte',
split='validation[:10]',
args_for_task={
'metric': 'accuracy',
'input_column': 'sentence1',
'second_input_column': 'sentence2',
'label_column': 'label',
'label_mapping': {'LABEL_0': 0, 'LABEL_1': 1}
}
)
]
suite = Suite('my-eval-suite')
results = suite.run('gpt2')Analyse du risque et des performances
Le résultat d'une exécution multi-tâches est généralement un tableau où chaque ligne représente une tâche spécifique. Au lieu de moyenner ces lignes, les analystes doivent examiner la variance de la précision et de la latence entre les tâches. Une latence élevée dans une tâche spécifique peut indiquer un goulot d'étranglement dans le traitement des entrées complexes par le modèle, tandis qu'une faible précision dans une tâche de sonde d'équité indique un risque élevé de sortie biaisée.
La prise de décision se déplace alors vers un modèle d'axe de risque : si le modèle échoue à une tâche critique (par exemple, la sécurité), il est rejeté indépendamment de ses performances sur les tâches générales. Cela empêche le lissage des défaillances critiques et garantit que le modèle respecte les seuils minimums de sécurité et de performance pour chaque capacité requise.
Exemple de sortie : Les résultats incluent généralement des colonnes pour task_name, accuracy, total_time_in_seconds et latency_in_seconds. Par exemple, glue/sst2 pourrait afficher une précision de 0,5 avec une latence de 0,07s, tandis que glue/rte afficherait une précision de 0,4 avec une latence de 0,16s.
import pandas as pd
results_data = {
'task_name': ['glue/sst2', 'glue/rte'],
'accuracy': [0.5, 0.4],
'total_time_in_seconds': [0.74, 1.67],
'latency_in_seconds': [0.07, 0.16]
}
df = pd.DataFrame(results_data)
print(df)Conditions d’application
- Le modèle doit-il être évalué sur plusieurs capacités distinctes (ex: logique vs sentiment) ?
- Existe-t-il des modes de défaillance à haut risque spécifiques qui doivent être surveillés indépendamment de la précision générale ?
- Le jeu de données d'évaluation est-il compatible avec les types de tâches de la bibliothèque evaluate de Hugging Face ?
- Les jeux de données nécessitent-ils un prétraitement personnalisé avant d'être transmis à l'évaluateur ?
Champ d’application
L'EvaluationSuite nécessite que les jeux de données soient compatibles avec les types de tâches d'évaluateur supportés et peut nécessiter des fonctions de data_preprocessor personnalisées pour les formats non standard.