Повысьте производительность систем машинного обучения, улучшив в первую очередь набор данных, а не модель

Прежде чем перейти прямо к делу, интересно поразмыслить над одним
(своего рода) клише: в эпоху огромного количества данных, которые заставили
нас поверить, что мы можем получить все ответы на наши проблемы. , мы обнаружили, что количества недостаточно. На самом деле, мы являемся свидетелями роста новой тенденции против «феномена больших данных», поиска качества, а не количества данных, что хорошо представлено, например, во всех исследованиях, проводимых для улучшения генерация синтетических данных.
С другой стороны, ИИ, ориентированный на данные, как новая дисциплина также набирает обороты для поддержки поиска более качественных данных.

Действительно, Data-Centric AI (далее DCAI) в последнее время набирает обороты в основном благодаря пионерской кампании Эндрю Нг [3].

DCAI можно рассматривать как новую область исследований, которая, в отличие от чистого модельно-ориентированного ИИ, в первую очередь нацелена на раскрытие ценности, скрытой (и часто неизученной) в данных, путем создания более систематического, научного и организованного подхода к подготовке данных.

Хотя подготовка данных уже давно признана одним из наиболее важных этапов конвейера обработки данных для разработки аналитических базовых таблиц (ABT), готовых к имеющимся моделям машинного обучения (ML), до сих пор предпринимались незначительные усилия. были посвящены поиску способов автоматизации и разработки тех методов, которые нацелены на извлечение максимального количества исходных наборов данных.

Подумайте об этом на секунду, алгоритм — это просто набор детерминированных правил, поэтому по определению он не содержит беспорядка, который вместо этого содержится в самих данных: на самом деле данные содержат реальность, которая чрезвычайно разнообразна и трудна для понимания и использования. схематично. Сосредоточение внимания только на закономерностях в данных похоже на сосредоточение внимания на двигателе выключенного автомобиля, но на самом деле разница заключается в том, как мы ведем этот автомобиль и куда мы движемся.

Несмотря на то, что необоснованная эффективность данных является общепризнанным фактом, популяризированным и названным в честь известной статьи Питера Норвига и др., [1], отмечая, что мы должны уделять больше внимания развитию максимально возможного качества наборов данных, а не уделять усилия исключительно алгоритмам, по-прежнему довольно часто придается большое значение уточнению и совершенствованию модели. DCAI основывается на старой поговорке о том, что

специалисты по данным тратят «много» своего времени на споры и исправление (часто) беспорядочных данных, уделяя моделированию лишь «мало» времени.

и представляет собой новую дисциплину для изучения и исследования новых методов систематического улучшения наборов данных как одного из наиболее эффективных и экономящих время способов повышения производительности модели в практических условиях машинного обучения. Несмотря на то, что многие из таких методов уже были вручную использованы практикующими специалистами по обработке и анализу данных в реальных сценариях,DCAI направлен на дальнейшее преодоление разрыва, сделав эту задачу четко определенной и спроектированной. /сильный>

Остальная часть статьи состоит из двух основных разделов:

  1. Краткое введение в DCAI и то, как наборы данных с проблемами с метками могут негативно повлиять на производительность приложений машинного обучения, независимо от того, сколько усилий мы приложили для улучшения базовых моделей.
  2. Практический пример того, как улучшение качества меток в репрезентативном наборе данных может оказать огромное влияние на общую производительность, даже при использовании базовой неоптимизированной модели машинного обучения. Для этого воспользуемся пакетом Cleanlab Python [5].

Прежде чем перейти к сути статьи, я должен поблагодарить Matteo Troìa за неоценимую помощь и поддержку в выполнении этой работы.

Введение в DCAI и проблемы с метками в наборах данных машинного обучения

Проще говоря, в то время как модельно-ориентированный ИИ имеет дело с целью предоставления наилучшей возможной модели с учетом (фиксированного) набора данных, DCAI направлен на создание алгоритмическим способом наилучшего набора данных для передачи в заданная (фиксированная) модель.
Это не означает, что моделирование неактуально и им можно пренебречь, но сначала следует потратить время на улучшение набора данных, внедрение алгоритмов и моделей для поиска более быстрых и эффективных способов, приложить усилия для выбора и настройки лучших модель только после этого, используя уже улучшенный набор данных.

Типичный конвейер на основе DCAI изображен на следующем рисунке.

Этап 3 фактически является основным направлением DCAI, где алгоритмические методы используются для систематического улучшения наборов данных, прежде чем перейти к модели (которая вместо этого находится в центре внимания этапа 4): более того, в реальном сценарии ожидается (возможно, ) повторять несколько раз между этапами 3 и 4.

Чтобы добавить немного деталей, DCAI предоставляет автоматические способы обработки (почти) всех известных аспектов подготовки данных и многое другое, например:

  • Обнаружение выбросов и последующая обработка, где выбросы, как обычно, представляют собой аномальные значения в наборе данных.
  • Обнаружение и исправление ошибок/проблем с ярлыками, другими словами, обнаружение обучающих ярлыков, которые с высокой вероятностью могут быть неверными.
  • Увеличение набора данных, чтобы предоставить больше примеров контролируемого машинного обучения посредством систематической кодификации (предварительных) знаний в предметной области, не включенных в набор данных.
  • Разработка функций, например. методы кодирования, передача пропущенных значений, нормализация, балансировка и т. д.

Хотя все вышеперечисленные задачи чрезвычайно важны для обеспечения качества наборов данных и, соответственно, гарантии надлежащей надежности модели ML, работающей в реальном мире, в частности, ошибки меток имеют первостепенное значение.

Ошибки ярлыков

Обнаружение ошибок меток имеет первостепенное значение, учитывая его последствия для фактической надежности обучающих данных для реальных сценариев, особенно тех, которые считаются «критически важными».

Рассмотрим, например, систему автономного транспортного средства, оснащенную моделью машинного обучения для распознавания различных типов объектов на дороге: подумайте о потенциальных катастрофических последствиях обучения такой модели на обучающем наборе, где даже несколько изображений пешеходов являются неверными. обозначены как дорожные знаки. В этом отношении Tesla каким-то образом проложила путь к DCAI, представив Data Engine, инструмент, ориентированный на DCAI, предназначенный для решения такого рода проблем (см. эту презентацию Андрея Карпатия, руководителя отдела ИИ в Tesla подробности).
Кроме того, ошибки меток представляют собой проблему, даже если они присутствуют в тестовых наборах, поскольку это может привести к тому, что ожидаемые характеристики (точность, достоверность, полнота и т. д.) будут намного выше, чем те, которые были получены впоследствии в производственной среде:

В конце концов, реальность есть реальность, и ее не волнует, что наш тренировочный набор неправильно помечен по какой бы то ни было причине.

В этом отношении labelerrors.com [7] является отличным ресурсом, объясняющим, что ошибки меток присутствуют даже в известных безошибочных наборах тестов рекламного мышления, охватывающих как изображения, так и текст, таких как MNIST, CIFAR-10, CIFAR-100, Amazon Review и др.
Сайт реализован в результате работы Уверенное обучение К. Норткатта и др. [8], что привело к разработке Cleanlab [5], пакета Python, реализующего уверенное обучение для обнаружения ошибок меток в наборах данных, чтобы сделать обучение модели ML более надежным.
Авторы использовали Cleanlab, чтобы доказать, что ни один набор данных не идеален — даже с учетом известных эталонных наборов данных — соответствующие результаты, показанные на labelerrors.com.

Возьмем, к примеру, MNIST: Cleanlab обнаружил несколько примеров с неправильной маркировкой в ​​тестовом наборе, пара из которых представлена ​​на изображении ниже.

Предположение Cleanlab представляет собой наиболее вероятную метку в соответствии с Confident Learning/Cleanlab (метка, полученная в результате предсказания argmax модели, используемой для Confident Learning, мы скоро поговорим об этом); mechanical turk — пять этикетировщиков, которые просмотрели как исходную этикетку, так и предоставленную Cleanlab: как вы можете видеть на правильном примере, Mechanical turk не достиг консенсуса.

Хотя приведенные выше примеры призваны продемонстрировать ценность уверенного обучения как инструмента поддержки исправления неправильной маркировки (по крайней мере, когда это возможно), к настоящему времени должно быть совершенно очевидно, что наличие (потенциально) неправильно маркированных образцов отрицательно влияет на производительность. любая модель ML (независимо от того, насколько она сложна и/или хорошо настроена), поэтому:

лучшее, что мы можем сделать, это удалить неправильные метки из набора данных, по крайней мере, когда исправление нецелесообразно.

Следующий раздел (в конце концов!) становится практическим, демонстрируя огромную мощь Cleanlab для повышения общей точности системы обнаружения фальшивых новостей, разработанной с помощью простой контролируемой модели машинного обучения, обученной на наборе данных Kaggle.

Сокращение ошибок меток для постоянного повышения производительности машинного обучения

Чтобы доказать ценность Confident Learning и простоту внедрения Cleanlab для обнаружения потенциальных ошибок маркировки в наборах данных, мы приняли набор данных для обнаружения поддельных новостей, загруженный из Kaggle [4], включающий новости/факты, собранные из Интернет, каждый из которых снабжен меткой, отражающей надежность самого контента.

После загрузки набора данных с помощью интерфейса командной строки Kaggle:

kaggle datasets download -p ./data anmolkumar/fake-news-content-detection --force
unzip ./data/fake-news-content-detection.zip -d ./data/fake-news-content-detection

мы можем взглянуть на соответствующий тренировочный набор:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataset_location = './data/fake-news-content-detection/'

dataset = pd.read_csv(dataset_location + 'train.csv')
dataset.head()
  • Столбец Text представляет фактическое содержание новостей.
  • Столбец Ярлыки — это фактическая метка обучения, представляющая фактическую надежность контента.
  • Text_Tag используется для представления типа контента.

Таким образом, Ярлыки представляют потенциальные поддельные новости в соответствии с 6 классами/уровнями, как указано в таблице ниже.

Вот смысл классов:

  • 5 — Верно, утверждение точное и ничего существенного не упущено.
  • 3 — в основном верно, утверждение точное, но требует уточнения или дополнительной информации.
  • 2 — Наполовину верно, утверждение частично верно, но упускает важные детали или вырывает что-то из контекста.
  • 0 — вряд ли верно, утверждение содержит элемент правды, но игнорирует важные факты, которые могли бы произвести другое впечатление.
  • 1 — False, высказывание неверно.
  • 4 — Неизвестно, несмотря на название, после небольшого поиска в Интернете получается, что факты, помеченные этим ярлыком, на самом деле относятся к ложным утверждениям, также содержащим, кроме того, нелепые утверждения.

Всего в обучающем наборе 10 240примеров, причем соотношение образцов для каждого из вышеупомянутых классов показано ниже.

Хотя это и не идеально сбалансировано, легко увидеть почти одинаковую пропорцию обучающих выборок для всех классов, кроме класса 4. Также стоит отметить, что некоторые классы имеют значение, которое вполне может перекрываться, что повышает вероятность неправильной маркировки.

Давайте начнем с нашего эксперимента, подобрав очень простую модель машинного обучения, приняв Ярлыки в качестве целевой переменной и Текст в качестве единственной независимой переменной. Для этого мы не будем тратить много времени как на разработку функций, так и на моделирование:

  • Мы собираемся использовать классический tf-idf как способ представления текста в табличном формате, подходящем для контролируемого машинного обучения;
  • Логистическая регрессия будет принята в качестве эталонной модели для оценки базовой производительности (оптимизация гиперпараметров выполняться не будет).

Вот как выглядит соответствующий код:

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline


lrg_clf = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', LogisticRegression(max_iter=1000, random_state=197778)),
])

train_set = dataset[['Text', 'Labels']]

X = train_set.Text
y= train_set.Labels
scores = cross_val_score(lrg_clf, X, y, cv=3, scoring='balanced_accuracy')
print("{:.1f}% balanced accuracy".format(scores.mean() * 100))

При использовании трехкратной перекрестной проверки scikit-learn общая сбалансированная точность составляет

21.9% balanced accuracy

не так здорово, а!?!? В конце концов, основная цель этого эксперимента — выяснить, можно ли улучшить производительность этой неоптимизированной базовой модели, просто убрав (возможные) ошибки меток из обучающего набора с помощью Confident Learning/Cleanlab.

С этой целью использовать Cleanlab довольно просто:

import cleanlab

cl = cleanlab.classification.CleanLearning(LogisticRegression(max_iter=1000))

tfx_pln = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
])

X = tfx_pln.fit_transform(train_set['Text'])
label_issues = cl.find_label_issues(X, y)
label_issues.head(15)

Как кратко упоминалось ранее, Cleanlab можно рассматривать как эталонную реализацию Уверенного обучения, основанного на модели автоматизированного метода обнаружения проблем с метками в любом наборе данных безотносительно к модели.
Cleanlab реализует это через класс CleanLearning, принимающий любую модель, совместимую с scikit-learn, в качестве основного аргумента. Модель используется «за кулисами» при вызове метода find_label_issues, чтобы автоматически генерировать прогнозы вне выборки для всего набора данных (используя k-кратное разделение).

Надлежащая трактовка уверенного обучения выходит за рамки этой статьи, однако основные этапы можно кратко обобщить следующим образом:

  • Во-первых, прогнозы, созданные выбранной моделью машинного обучения (опять же в данном случае логистической регрессией), используются для расчета порога уверенности в себе для каждого класса — среднего прогноза модели на примерах, помеченных в соответствии с данный класс.
  • Затем вышеупомянутые пороговые значения используются для построения совместной матрицы распределения между зашумленной меткой (меткой, заданной в обучающем наборе) и истинной (скрытой) меткой, т. е. фактической ненаблюдаемой меткой.
  • Примеры, не лежащие на диагонали предыдущей матрицы, угадываются как потенциальные ошибки меток.

Для правильного введения и понимания всего рабочего процесса, пожалуйста, обратитесь к этой замечательной лекции [10] и/или этой статье [2].

Весь процесс так же прост, как одна строка кода Python: действительно, метод find_label_issues возвращает фрейм данных Pandas, показывающий информацию о потенциальных проблемах с метками для каждого примера в нашем обучающем наборе.

Примеры с потенциальными ошибками меток характеризуются логическим значением true в столбце is_label_issues, представляющим тот факт, что соответствующее label_quality, т. е. предсказанная моделью вероятность для данной (зашумленной) обучающей метки , ниже порога уверенности в себе, соответствующего данному классу. Общее количество примеров с потенциально неправильными ярлыками: 5136.

Пришло время удалить эти сомнительные ярлыки.

clean_train = train_set.loc[label_issues[~label_issues.is_label_issue].index]

После удаления проблемных меток очищенный обучающий набор содержит 5104 примера, распределенных по классам меток следующим образом.

Как мы видим, общая пропорция полностью соответствует исходной тренировочной выборке.

Давайте теперь переобучим нашу базовую логистическую регрессию с очищенным обучающим набором, чтобы проверить, улучшает ли производительность удаление сомнительных меток.

X = clean_train.Text
y = clean_train.Labels
scores = cross_val_score(lrg_clf, X, y, cv=3, scoring='balanced_accuracy')
print("{:.1f}% balanced accuracy".format(scores.mean() * 100))
43.2% balanced accuracy

Как видите, без каких-либо усилий по корректировке и настройке модели сбалансированная точность увеличилась с 21,9% до 43,2%, что в целом значительно увеличилось на 97%!
Это было достигнуто только за счет очистки обучающей выборки путем избавления от меток, где Cleanlab обнаружил низкий показатель качества/достоверности.

Заключение

В этой первой статье я кратко представил некоторые из основных концепций, лежащих в основе DCAI, уделив особое внимание проблеме обнаружения ошибок меток, чтобы с помощью практического эксперимента продемонстрировать, как

Правильное удаление потенциально проблемных меток из набора данных может привести к ощутимому повышению производительности машинного обучения с учителем.

Для разработки практического эксперимента я использовал набор данных фальшивых новостей от Kaggle и Cleanlab, эталонную реализацию Python Confident Learning: результаты демонстрируют, что автоматизированный подход, такой как Cleanlab, может быстро привести к значительному улучшению контролируемого машинного обучения. производительность даже при использовании простых линейных моделей, таких как логистическая регрессия, без настройки гиперпараметров.

Кроме того, хотя эксперимент здесь был ограничен удалением всех примеров с потенциальными проблемами с метками, мы знаем, что более сложный подход — например. один, основанный на исправлении ошибок меток, когда это возможно, и/или объединении классов со значительным перекрытием (подробнее об этом в будущей статье о Confident Learning и Cleanlab) — может привести к еще большему повышению производительности.

Если вы хотите протестировать код самостоятельно, найдите здесь полный блокнот Python.

Планируется, что будущие статьи о DCAI охватят другие аспекты этой захватывающей дисциплины, углубляясь как в теоретические основы, так и в то же время охватывая другие практические аспекты.

Понравилась история?

Подпишитесь бесплатно, чтобы получать уведомления о новых историях, опубликованных мной.

Я тоже с удовольствием подключаюсь: ищите меня в LinkedIn!

Ссылки

[1] А. Халеви, П. Норвиг и Ф. Перейра, Необоснованная эффективность данных (2009), IEEE Intelligent Systems, vol. 24

[2] К. Норткатт, Л. Цзян, И. Чуанг, Уверенное обучение: оценка неопределенности в метках наборов данных (2021), Журнал исследований искусственного интеллекта, том. 70

[3] Г. Пресс, Эндрю Нг запускает кампанию по внедрению искусственного интеллекта, ориентированного на данные (2021 г.), Forbes

[4] А. Кумар, Набор данных Kaggle по обнаружению фальшивых новостей (2021 г.), получено 7 марта 2023 г.

[5] Github, Cleanlab: стандартный пакет искусственного интеллекта, ориентированный на данные, для качества данных, реальных данных и меток, получено 7 марта 2023 г.

[6] MIT CSAIL, Introduction to Data-Centric AI (2023), получено 7 марта 2023 г.

[7] Веб-сайт Label Errors, labelerrors.com, получено 8 марта 2023 г.

[8] К. Норткатт, А. Атали, Дж. Мюллер, Повсеместные ошибки меток в наборах тестов дестабилизируют тесты машинного обучения (2021 г.), 35-я конференция по системам обработки нейронной информации (NeurIPS 2021)

[9] А. Карпати, Создание стека программного обеспечения 2.0 в Tesla, Spark+AI Summit 2018, видео на Vimeo.

[10] MIT CSAIL, Введение в ИИ, ориентированный на данные, лекция об ошибках меток (2023 г.), получено 10 марта 2023 г.