Почему нам нужно заботиться о создании этикеток?

В последние годы в алгоритмах обработки данных произошли значительные изменения. Все больше и больше предприятий используют алгоритмы машинного обучения и глубокого обучения при принятии решений. Вычислительная мощность за последнее десятилетие также увеличилась в несколько раз. Таким образом, есть доступность технологий и инструментов для удовлетворения потребностей. Но есть проблема в самих данных. Компании имеют миллиарды записей, но у них нет лейблов. Многие современные алгоритмы нуждаются в маркированных данных.

Традиционно организации нанимали людей, чтобы вручную пометить данные. Но это ограничено наличием людей, временем для маркировки и бюджетом. В частности, когда мы говорим о ТБ данных, генерируемых в день в онлайн-бизнесе, таком как электронная коммерция, социальные сети или банки. В этих случаях практически невозможно пометить данные вручную и требуется программная генерация помеченных данных.

Как программно сгенерировать помеченные данные?

Есть несколько способов работы с немаркированными данными:

  1. Активное обучение. Обучите модель на небольшом наборе помеченных данных. Предсказать метку для немаркированных данных. Точки данных с низкой степенью уверенности в предсказанной метке отправляются на маркировку специалисту-человеку.
  2. Полу-контролируемое обучение: аналогично активному обучению, но вместо отправки данных экспертам-людям используйте предположения, не зависящие от предметной области и задачи, для улучшения ярлыков.
  3. Передача обучения: предварительно обученная модель на большом наборе данных, настроенная на новые данные.
  4. Слабый контроль: используйте легко доступные, высокоуровневые и, возможно, не очень точные правила для маркировки немаркированных данных. Пример шноркеля, который объясняется в следующих разделах.

Краткое изложение этих подходов хорошо объясняется на рисунке ниже:

А теперь пора заняться сноркелингом

Шноркель - Слабый надзор

Трубка поставляется в виде пакета Python. Snorkel требует, чтобы пользователи написали правила, которые могут маркировать некоторые части данных. Эти правила представляют собой правила высокого уровня, которые написаны с помощью экспертов в предметной области. В терминологии сноркелинга эти правила называются функциями маркировки. Эти функции маркировки применяются ко всем немаркированным данным. Преобразованные данные отправляются в основную функцию Snorkel, известную как Модель метки, которая оценивает точность отдельной функции маркировки и корреляции между ними для присвоения метки немаркированным данным. Snorkel также предоставляет функции нарезки, которые используются для наблюдения за производительностью модели этикеток на срезах данных (например, город A или город B). Как вы, возможно, задавались вопросом, как оценить эффективность трубок, необходим небольшой набор золотых наборов, также известный как набор для разработки. Набор для разработки также может использоваться для устранения дисбаланса этикеток. Snorkel также предоставляет функции преобразования, которые можно использовать для увеличения данных для изучения инвариантности данных.

Как можно оценить точность отдельных функций маркировки?

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

Прогнозы зашумленных меток от функций разметки можно рассматривать как факторный график, имеющий некоторую корреляцию с фактической меткой (неизвестно). Создается ковариационная матрица между наблюдаемыми (из функций маркировки) и наборами разделителей (фактическими метками). Авторы использовали метод обращения матриц для получения уравнения, которое может быть решено методом пополнения матриц для оценки точности функций разметки. Эта проблема решается с помощью нейронной сети pytorch в шноркеле. Следующие рисунки объясняют, как предсказания Y из матрицы функций разметки (LF) могут быть преобразованы в метод завершения матрицы и могут быть оценены корреляции ~ zz ^ T.

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

Пример с трубкой

Круто, теперь займемся сноркелингом. Пример на странице Snorkel хорош, и я объясню то же самое ниже.

Шаг 1. Получите много немаркированных данных. Полагаю, он у нас есть :)

Шаг 2. Напишите функции маркировки

Функция маркировки может возвращать несколько меток. Возьмем здесь более простой двоичный классификатор. Помимо выходов True и False, также может быть третий выход Abstain.

Для написания функции разметки необходимо использовать декоратор @labeling_function()

Шаг 3. Примените функции маркировки ко всем немаркированным данным

Хотя в приведенном ниже примере используется фрейм данных pandas, приложение в Snorkel также доступно для pyspark.

Шаг 4. Получите прогнозируемые ярлыки

Шаг 5: (Необязательно) Определите функцию преобразования

Эту функцию можно объявить с помощью декоратора @ @transformation_function()

Шаг 6: (Необязательно) Примените функции преобразования, определенные на шаге 5

Шаг 7. (Необязательно) Определите функции нарезки

Шаг 8: Обучите классификатор

Последним шагом является обучение модели классификатора ed-end, которая, по утверждениям авторов, демонстрирует повышение точности предсказанных меток. В приведенном ниже примере используется модель логистической регрессии. Также можно использовать любую другую модель. Этот классификатор можно использовать для оценки этикеток.

Надеюсь, вам понравилось. Если да, пожалуйста, хлопайте в ладоши!