Предварительное вскрытие

Задача классификации токсичных комментариев связана с проблемой классификации текста с несколькими метками с сильно несбалансированным набором данных. Изначально выяснилось, что использованный тестовый набор уже опубликован в Интернете, поэтому новый набор данных был выпущен в середине конкурса, а метрика оценки была изменена с Log Loss на AUC.



Я попробовал несколько идей после создания своего конвейера PyTorch, но не нашел ни одного новаторского подхода, который выглядел бы многообещающим. Нормализация текста - единственная стратегия, которая, как я обнаружил, дает существенные улучшения, но она требует очень много времени. Окончательный результат (105-е место ~ 3%) был вполне подходящим IMO, учитывая время, которое я потратил на это соревнование (не так много).

(Вокруг темы некоторых высокопоставленных команд шла горячая дискуссия, когда гроссмейстеры Kaggle дисквалифицируются после окончания соревнований.)

Публичные смеси ядер показали хорошие результаты в этом соревновании (т. Е. Не слишком умещались в публичной таблице лидеров). Я ожидал, что он переоборудуется, но все же выбрал одну окончательную заявку, в которой использовалась лучшая общедоступная смесь смесей, чтобы не рисковать. К счастью, это окупилось и дало мне повышение AUC на 0,0001 в частной таблице лидеров:

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

Список методов

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

  • Перевод как Augmentation (время тестирования и время обучения) [1] [2] [13]
  • Псевдо-маркировка [1]
  • Нормализация текста [3] [4]
  • Многоуровневая укладка - 4 уровня [3]; 2 уровня [11]; 1-уровневое суммирование + 1-уровневое взвешенное усреднение [12]
  • Неанглийские вложения [2]
  • Разнообразные предварительно обученные вложения - обучайте несколько моделей отдельно на разных вложениях.
  • Объедините несколько предварительно обученных вложений - объедините после слоя RNN [3]; Конкатенация на уровне внедрения [5]; Вариант Усиленного считывателя мнемоник [7]
  • При усечении текстов сохраняйте как начало, так и конец текста [1]
  • K-max пул [6]
  • Многоуровневая укладка [3]
  • Модель внимания в стиле дипмодзи [3]
  • (NN) Дополнительные функции на уровне строк: «Частота уникальных слов» и «Скорость слов, заглавных заглавными буквами» [4]
  • (NN) Дополнительные функции на уровне слова: если слово содержит только заглавные буквы [4]
  • (GBM) Инженерные функции, кроме tf-idf [12]
  • Кодировка BytePair [5] [8]
  • Р-нет [7]
  • CapsuleNet [11]
  • Слой внимания с учетом этикеток [7]
  • (Обновление 20180413) утечка информации - небольшие совпадения IP-адресов между обучающими и тестовыми наборами данных. Одно перекрывающееся имя пользователя. [14]

Псевдо-маркировка и усечение "голова-хвост"

Я уже опробовал эти две техники и обучил каждой по паре моделей.

Усечение "голова-хвост" (250 жетонов в начале, 50 жетонов в хвосте) помогло лишь немного для bi-GRU, но не для QRNN. На мой финальный ансамбль это практически не повлияло.

Для псевдо-маркировки (PL) я использовал предсказания тестового набора из моего лучшего ансамбля, как предложено в [1], и они немного улучшили окончательный ансамбль (см. Таблицу 1). Я предполагаю, что добавление дополнительных моделей, обученных с помощью PL, еще больше повысит конечный AUC. Однако проблема этого подхода - это утечка, которую он вызывает. Модель ансамбля увидела все данные проверки, и эта информация просочилась в ее прогнозы по набору тестов. Таким образом, местное резюме будет искажено и не сравнимо с теми, которые прошли обучение без PL. Тем не менее, этот метод позволяет создать лучшую единую модель, поэтому он будет весьма полезен для производственного развертывания.

Я думаю, что более консервативный способ выполнения PL - это повторение процесса «поезд-прогнозирование-поезд» (с PL), поэтому модель обучается дважды для каждого сгиба. Но это определенно займет больше времени.

Использованная литература:

  1. Обзор решения, занявшего первое место от Chun Ming Lee из команды Toxic Crusaders
  2. Обзор решения, занявший 2-е место от neongen из команды neongen & Computer говорит нет
  3. Обзор решения за 3-е место от Bojan Tunguz из команды Adversarial Autoencoder
  4. Про мою одиночную модель 0.9872 от Александра Бурмистрова из команды Adversarial Autoencoder
  5. Краткое решение за 5 место от Μαριος Μιχαηλιδης KazAnova из команды TPMPM
  6. Поздравления (от призрачной 11-й команды) от CPMP
  7. 12-е место по доле единого модельного решения от BackFactoryVillage из команды Knights of the Round Table
  8. 15-е резюме решения: кодирование пар байтов от Mohsin hasan из команды Zehar 2.0
  9. Заметки о 25-м месте (0,9872 публичные; 0,9873 частные) от Джеймса Тротмана (соло)
  10. Обзор решений, занявших 27-е место от Джастина Янга из команды Sotoxic
  11. Решение, занявшее 33-е место с использованием вложения вменения (0,9872 частное, 0,9876 публичное) от Мэтт Мотоки (соло)
  12. 34-е место, много FE и плохое понимание NN [КОД ВКЛЮЧЕН] от Peter Hurford из команды Root Nice Square Error :)
  13. Простая техника расширения датасета от Павла Остякова
  14. Рецензия на 184-е место: код, решение и примечания (без бленда) от Eric Chan