Разбор задач квалификации: ML |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-12-25 17:19 Несмотря на то, что конкурс не подразумевал призов, а квалификацию пройти не составляло никакого труда, всё же задача заманивала. Думаю, многие участники конкурсов согласятся, что конкуренция и движение вверх на лидерборде за счёт новых идей часто мотивируют больше, чем призы. Тем более когда с первой попытки повезло выбрать правильный подход и получить хороший скор. Многие, увидев соревнование по текстам, взялись за классические подходы, такие как TF-IDF или Word2vec. Кто-то даже пробовал использовать SOTA-решения для обработки текстов, но, как оказалось, эвристики, полученные после беглого изучения текстов, даже без машинного обучения выводили на скор 0,8+. На свой код с хакатонов всегда страшно смотреть, особенно через время. Многие, в том числе и я, к окончанию конкурса не могут воспроизвести свой лучший результат. Так как я параллельно участвовал ещё в двух конкурсах, совсем не хотелось иметь очередной неподдерживаемый код. А тот факт, что я выбрал правильный путь в самом начале, позволил мне сразу удачно оформить проект. В итоге я свел всё к тому, что больше не думал о данных, о фичах, которые уже есть, и названиях полей. Достаточно написать функцию в class, и поле с названием этой функции и значением, рассчитанным в ней, появляется в данных. Например, захотелось мне добавить признак «количество цифр в вопросе» — я просто пишу функцию https://github.com/BraginIvan/vkcup2019/blob/master/analysis/question_based_analytics.py#L63 и запускаю run all fit_predict. Функция применится к данным, создаст поле и рассчитает значение в датафрейме. Захотел что-то переименовать — пожалуйста, захотел удалить — нет проблем. Это позволило сконцентрироваться на ручном изучении данных, а не на вылавливании багов. Никакой магии, просто пробегаем по всем функциям класса, берём их имена и записываем результат их применения в соответствующее поле датафрейма. На Питоне это реализуется в несколько строк кода: https://github.com/BraginIvan/vkcup2019/blob/master/analysis/utils.py#L8. Мой подход достаточно ленивый: первым сабмитом, после 4–5 часов работы, я получил скор 0,843 плюс легко масштабируемое решение. Это было в первый день соревнования, поэтому конкуренции ещё не было, а соответственно, и мотивации улучшать результат. Через какое-то время меня начали догонять, что придало сил тщательнее разобраться в данных. Я просто час смотрел на данные и выписывал заметки «заглавная/не заглавная первая буква», «пробел перед вопросом в конце»... Потом реализовал все эти функции и получил 0,867. Через какое-то время всё повторилось, и я пришёл к скору 0,887. На платформе ML Boot Camp можно скрывать свои решения, и я был уверен, что многие пробили 0,9, просто не показывают. Но тот факт, что этих скоров не было на лидерборде, не давал достаточной мотивации. В последний вечер, за час до окончания конкурса, я решил глазами посмотреть на свои предсказания, около часа потратил на то, чтобы проставить нолики вопросам, в которых есть мат и другие нелегко выделимые особенности, но это добавило лишь в четвёртом знаке. Отчаянная попытка пробить 0,9 провалилась, и меня сместили с первого места. Вроде денег я не проиграл, а всё равно как-то расстроился. Не считая попыток что-то поправить руками и некорректных сабмитов, я отправил всего четыре решения, поэтому я догадывался, что не заоверфитился на лидерборд. Так и оказалось, скор на привате практически совпал со скором на паблике и вернул меня на первую позицию. Так что же зашло, скажете вы? А я и не знаю. Я генерил фичи десятками, запускал обучение, удалял фичи с низкой важностью и не думал о том, что даёт прирост. Все фичи можно найти в классах https://github.com/BraginIvan/vkcup2019/tree/master/analysis, а важность фичей в Jupyter https://github.com/BraginIvan/vkcup2019/blob/master/training2.ipynb. Из оригинального могу отметить несколько идей. Особые кавычки «», которые использовали редакторы, должны не просто присутствовать в тексте, но и быть сбалансированными. CatBoost со своим встроенным обработчиком фичей неплохо обрабатывала такие признаки как «первое/последнее слово в тексте», «самое популярное слово в тексте»... Также важно то, что при метрике AUC желательно не иметь одинаковых скоров, а в данных повторялись вопросы. Я решил их отсортировать по индексу (надеясь, что он сортирован по времени) и пронумеровать, и, по-моему, это немного улучшило результат. Ждём второго этапа. Думаю, конкуренция возрастёт — туда прошло как минимум два Kaggle Grandmasters. Источник: m.vk.com Комментарии: |
|