Мини ML Соревнование
Александр Вейсов (@snakers41)Что это и зачем:
Для того, чтобы сделать процесс онбординга молодых сотрудников более интерактивным, интересным и веселым, мы хотели бы оформить его в виде небольшого микро-соревнования на Kaggle in class.
Цель соревнования - с нуля сделать максимально простой классификатор аудио-файлов на 3 категории:
- Речь;
- Музыка;
- Шум;
Соревнование будет на платформе kaggle in class, и оно будет доступно по этой ссылке - https://www.kaggle.com/c/silero-audio-classifier.
Игрушечный датасет:
Не секрет, что многие ML соревнования вызывают смешанные чувства не в последнюю очередь из-за кривой валидации и отсутствия понимания собственного домена у организаторов. Мы отчасти абстрагируемся от этих проблем и очень сильно упрощаем домен решаемой задачи следующим образом:
- Мы нивелируем чисто инженерную часть задачи, выкладывая все файлы в одном формате, с одним sampling rate;
- Все данные анонимизированы и одинаковой длины;
- По меркам toy соревнований, мы планируем выложить довольно большой датасет - 10 GB на 1 класс;
- По этой же причине, задача одновременно является и очень простой, но не отдаленной от реальности;
- Мы априори убираем почти все сложности, связанные с инженерной работой и просим решить просто задачу классификации целого файла, а не каждого фрейма (что значительно сложнее!);
- Мы приветствуем максимально ясные и простые решения, на что нацелены правила ниже;
Правила (если ты претендуешь на трудоустройство в нашей компании):
- PyTorch 1.0+, Python 3.6+. Если вы используете другой фреймворк, это очень большой плюс, но но мы используем PyTorch;
- Можно участвовать только соло. Нельзя обмениваться кодом. Но обмен идеями в чатике на уровне "такой алгоритм работает с такими-то параметрами" активно приветствуется;
- Нельзя использовать pre-trained модели и внешние данные;
- Нельзя использовать стекинг, блендинг, ансамбли моделей;
- Нельзя блендить кернелы, решения других участников;
- Финальное решение должно состоять из одного алгоритма или одного семейства алгоритмов;
Предпочтение скорее будет отдаваться решениям с более качественным / логичным / простым / минималистичным кодом. Код лучше сразу оформлять в виде отдельного репозитория.
CI, 999% покрытие тестами, 100 пре-коммит хуков не нужны. Нужен чистый, простой, лаконичный читабельный код на питоне с тестами там, где ты их писал в процессе отладки кода. Если это сложно для начала подойдут и ноутбуки, но с такими же требованиями.
Мы также активно готовы помогать участникам, которые покажут какой-то traction следующим образом (если нужно):
- Стартовые скрипты и идеи на форуме;
- Помощь в настройке своего окружения;
- Окружения с видеокартами;
У нас нет фиксированного числа ставок, скорее некое понимание что это может быть от 1 до 6 человек разного уровня квалификации (но нас интересуют в первую очередь начинающие специалисты). Предполагается, что ты сможешь научиться многому в процессе и нас интересуют не твои регалии на входе, а твой рост и реальный прогресс в решении реальной задачи и инсайды, которые ты найдешь в процессе.
Критерии успеха в конце забега:
Как оказалось, задача вообще не является сложной и по сути решение задачи просто является лакмусовой бумажкой твоей готовности работать у нас.
Поэтому, если вдруг задача покажется тебе слишком простой, то попробуй решить ее взяв 1% или 5% данных из трейна (или какие-то экзотические или наоборот сильно простые методы). Заодно можно получить интересный бенчмарк разных методов.
- Ты должен решить задачу на уровне хотя бы 85 - 90% от лучшего результата;
- Ты должен сделать это самостоятельно, следуя критериям выше;
- Чем большему ты научишься в процессе и чем больше будет разница твоего уровня до и после - тем лучше;
- Чем более простое, изящное, production-ориентированное и простое в поддержке твое решение и чем лучше ты понимаешь пройденный путь - тем меньше вообще какую-то роль играют остальные критерии. Но оно, естественно, должно работать;