Многозадачная оценка моделей для принятия решений на основе рисков
Узнайте, как использовать EvaluationSuites для выявления конкретных пробелов в производительности по различным задачам вместо того, чтобы полагаться на один общий агрегированный показатель.
В этом материале
Основная мысль
Для точной оценки ИИ-модели специалистам следует отойти от использования единых агрегированных метрик и вместо этого применить стратегию многозадачной оценки. Создавая EvaluationSuite, состоящий из нескольких SubTasks, где каждый объединяет конкретного оценщика, набор данных и метрику, разработчики могут исследовать различные аспекты поведения модели, такие как общие рассуждения, справедливость и предвзятость. Этот подход позволяет выявить конкретные оси риска; например, модель может демонстрировать высокую общую точность, но значительно ошибаться в задачах на логический вывод из естественного языка или проявлять предвзятость в отношении определенных демографических групп. Решения принимаются на основе этих индивидуальных профилей риска, что гарантирует, что высокий средний балл не скроет критические сбои в высокорисковых задачах.
Стратегия многозадачной оценки
Опора на один агрегированный показатель при оценке модели часто маскирует критические недостатки. Модель может достичь высокой средней точности в широком бенчмарке, при этом катастрофически потерпев неудачу в конкретной высокорисковой задаче. Оценка моделей по разнообразному набору задач помогает выявить разрывы в производительности по определенным осям, таким как несоответствие между перплексией в конкретном домене и общими языковыми способностями.
Разбивая оценку на отдельные задачи, специалисты могут отличить модель, которая обладает общими способностями, от той, которая просто переобучена под определенный паттерн данных. Такой детализированный взгляд необходим для выявления рисков, связанных со справедливостью, предвзятостью и надежностью, которые обычно сглаживаются при расчете глобального среднего значения.
Составление пакета оценки (Evaluation Suite)
EvaluationSuite структурирован как коллекция SubTasks. Каждый SubTask представляет собой кортеж, содержащий оценщика (evaluator), набор данных и метрику. Такая модульность позволяет пакету исследовать различные измерения модели. Например, один SubTask может быть сосредоточен на классификации текстов для анализа тональности, а другой - на логическом выводе из естественного языка для проверки логической последовательности.
Чтобы пакет был исчерпывающим, разработчикам следует включить задачи, проверяющие как общие возможности, так и задачи, предназначенные для выявления предвзятости. Некоторые наборы данных требуют использования data_preprocessor для правильного форматирования входных данных перед их передачей оценщику, чтобы модель получала данные в ожидаемой схеме.
Реализация и выполнение
С технической точки зрения SubTask требует обязательных атрибутов: task_type (соответствующий поддерживаемым задачам оценщика) и data (объект или имя набора данных Hugging Face). Дополнительные атрибуты, такие как subset, split и args_for_task, позволяют точно контролировать срез оценки и конкретные используемые метрики, такие как точность (accuracy) или F1-мера.
Пакет выполняется с помощью метода run, который принимает модель или пайплайн в качестве входных данных. Этот процесс генерирует подробный отчет, содержащий название задачи, рассчитанную метрику и телеметрию производительности, такую как общее время и задержка на один образец.
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')Анализ рисков и производительности
Результатом многозадачного запуска обычно является таблица, где каждая строка представляет определенную задачу. Вместо того чтобы усреднять эти строки, аналитикам следует изучать дисперсию точности и задержки между задачами. Высокая задержка в конкретной задаче может указывать на узкое место в обработке моделью сложных входных данных, в то время как низкая точность в задаче на проверку справедливости указывает на высокий риск предвзятого вывода.
Принятие решений затем переносится на модель осей риска: если модель проваливает «критическую» задачу (например, безопасность), она отклоняется независимо от ее результатов в «общих» задачах. Это предотвращает «усреднение» критических сбоев и гарантирует, что модель соответствует минимальным порогам безопасности и производительности для каждой требуемой возможности.
Иллюстративный вывод: результаты обычно включают столбцы task_name, accuracy, total_time_in_seconds и latency_in_seconds. Например, glue/sst2 может показать точность 0.5 с задержкой 0.07с, в то время как glue/rte покажет точность 0.4 с задержкой 0.16с.
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)Условия применения
- Нужно ли оценивать модель по нескольким различным способностям (например, логика против анализа тональности)?
- Существуют ли конкретные высокорисковые режимы сбоев, которые должны отслеживаться независимо от общей точности?
- Совместим ли набор данных для оценки с типами задач библиотеки Hugging Face evaluate?
- Требуют ли наборы данных предварительной пользовательской обработки перед передачей оценщику?
Границы применения
EvaluationSuite требует, чтобы наборы данных были совместимы с поддерживаемыми типами задач Evaluator, и может потребовать создания пользовательских функций data_preprocessor для нестандартных форматов.