Подход, обучение и код

Недавно я участвовал в испытании Jigsaw Multilingual Toxic Comment Classification на Kaggle, и наша команда (команда ACE) заняла 3-е место в итоговой таблице лидеров. В этом блоге я описываю постановку задачи, наш подход и уроки, которые мы извлекли из соревнований. Я также предоставил ссылку на наш полный код в конце блога.

описание проблемы

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

Задача была задана как проблема классификации обычного текста, когда нужно было предсказать вероятность того, что (текстовый) комментарий будет токсичным, и представленные материалы оценивались по метрике ROC AUC.

Самая интересная часть проблемы заключалась в том, что токсичность должна была быть идентифицирована на 6 разных языках, и для 3 из них не было данных для обучения, а для остальных 3 было очень мало данных для обучения.

Конкурс был организован Jigsaw, компанией Google, которая создает инструменты для решения таких проблем, как токсичность, дезинформация, радикализация преследования в онлайн-контенте. Это был третий конкурс по выявлению токсичности, проведенный Jigsaw (хотя и первый, многоязычный по своей природе).

Почему проблема сложная?

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

Я просто хотел немного повеселиться, капитан Базз Килл. Думаю, в молодости у тебя никогда не было жизни. это было, вероятно, около 100000000000000000 лет

В дополнение к этому, если вы пытаетесь решить проблему на нескольких языках, это становится довольно трудным.

Обзор решения

На рисунке выше показан общий обзор различных компонентов нашего окончательного решения, а также их индивидуальные оценки (ROC) и веса, которые привели к нашей окончательной оценке 0,9523.

Окончательное решение представляло собой смесь различных базовых моделей, обученных разными способами. «Роберта» на приведенном выше рисунке представляет модели, полученные на основе архитектуры RoBERTa XLM, а Mono Bert представляет модели Bert Base, предварительно обученные на тексте определенного языка.

Технический обзор

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

Данные обучения / предварительная обработка

Для обучения моделей на соревнованиях мы использовали следующие наборы данных:

  • Данные с пометкой на английском языке, предоставленные организатором с прошлых соревнований.
  • Переведенная версия помеченных английских данных на каждом целевом языке
  • Небольшие проверочные данные, предоставленные организаторами на целевом языке
  • Открытые данные субтитров с метками, сгенерированными с использованием псевдо-меток
  • Набор тестовых данных с псевдометками *

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

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

Предварительно обученные модели

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

RoBERTa XLM, вариант Google's Bert с точки зрения архитектуры, предварительно обученный более чем 100 языкам, был рабочей лошадкой в ​​конкурсе. Он работает на удивление хорошо из коробки и неплохо работает даже с данными по обучению английскому на других языках.

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

Модельное обучение

Здесь в игру вступают много искусства и опыта. Для обучения модели мы использовали разные стратегии:

  • Многоэтапное обучение: обучение модели на прогрессивно более сложных задачах, пример обучения на только что помеченных данных на английском языке, а затем постепенный переход к более сложной задаче, пример псевдо-меток, а затем выполнение последнего раунда (эпохи) обучения на данных проверки, так как это было закрытие тестовых данных
  • Обучение без учителя на данных, относящихся к предметной области. Огромные языковые модели, такие как RoBERTa, обычно обучаются на общих наборах данных, таких как новости, Википедия - это может сильно отличаться от содержания / структуры / словаря конкретной задачи данные. Хотя получение помеченных данных всегда является дорогостоящим делом, часто имеется большая доступность немаркированных данных (в данном случае только необработанных текстовых данных), которые можно использовать для предварительного обучения. Это помогает повысить производительность при последующем контролируемом обучении для конкретной задачи.
  • Многократное усреднение: количество обучающих примеров, объединяющих все различные типы наборов данных, которые я описал ранее, достигло миллионов. Мы заметили, что модель быстро насыщалась во время обучения и перестала улучшаться после примерно 200 000 выборок. Мы обучили различные модели, используя случайное подмножество данных, и усреднили наши прогнозы на тестовом наборе данных, используя эти модели.

Прогнозирование и смешивание / ансамблирование

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

Наше окончательное решение представляло собой смесь прогнозов из 4 семейств моделей, как описано в «Обзоре решения». Мы обучили многократные модели (обучение на разных подмножествах данных) в каждой семье, чтобы в итоге получилось около 30 (!!) нечетных моделей.

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

Увеличение времени тестирования (TTA) - это метод, при котором мы делаем прогноз не только на тестовом примере, но и на некоторых его вариантах, чтобы в итоге получить лучший окончательный прогноз. Мы использовали эту технику в некоторых из наших базовых моделей, и это дало нам небольшой импульс, вот как это работало:

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

Аппаратное обеспечение

Ни для кого не секрет, что модели Deep Learning намного быстрее работают на GPU по сравнению с CPU, но TPU Google намного быстрее, чем даже GPU. Они просто феноменальны с точки зрения памяти (позволяют увеличить размер пакета) и скорости (позволяют быстро экспериментировать), которую они обеспечивают, и делают процесс обучения намного менее болезненным.

Мы широко использовали бесплатную квоту TPU, предоставленную Kaggle и Google Colab во время конкурса, для обучения наших моделей.

Код

Вот ссылка на наш полный код