<style> .reveal { font-size: 22px; } </style> # Команда Hat Dog ![](https://i.imgur.com/zcqwt2w.jpg) <!-- Каждая команда должна подготовить рассказ о своем решении на 3-5 минут. Пример создания слайдов https://hackmd.io/s/slide-example --> [TOC] --- ## Предобработка текстов - Выкидывали email, цифры, знаки препинания, мусорные слова - Лемматизация WordNet - прикрутили после отборочного этапа - Использовали два корпуса с цитатами (для отгадывания) и без цитат (для объяснений) - Не получилось: - Попробовали объединять все предложения одного поста в одно большое и учиться на нем (не дало эффекта) - Не сделали тестирования корпусов после препроцессинга (пропустили ошибку в финальном корпусе) --- ## Обучение эмбеддингов - Модель для эмбедингов: FASTTEXT - выбрана экспериментальным путем еще до отборочного. Далее только параметры меняли - Эмбединги для EXPLAIN: CBOW dim=30 на корпусе без цитат - Эмбединги для GUESS: SKIPGRAM dim=30 на корпусе с цитатами (+30% объемы текста) - Подбор параметров: по соревновательным играм между моделями с разными параметрами обученными на разных корпусах - Мы учитывали частотность слов в словаре корпуса текста - Подтягивали наверх (меняли порядок) для более популярных слов и использовали параметр TEMPERATURE для регулировки силы подтягивания. - Для каждой из моделей использовался свой словарь частотности (т.к. входные тексты были разными для моделей EXPLAIN и GUESS). Для Explain частотное усиление **стоп-слов** не использовалось. --- ## Обучение эмбеддингов (не зашло) - Пробовали Gensim - незашел. Glove не смогли завести. - Не успели попробовать StarSpace - В FastText пробовали отключить ngramm посимвольный - ухудшало качество на валидации - Пробовали LSTM - на обученных эмбедигах от fasttext по последовательности предсказывать слово - модель не сходилась и не обощалась для моделей других участников. - Не хватило времени на GAN-архитектуру. Скорее всего получилось бы не очень хорошо в данной постановке зададчи. --- ## Принцип загадывания/отгадывания слова - 2 разных модели н объяснение и угадыввание - Объяснение: Взять модель попроще CBOW - дать ей ограниченный корпус (без цитат): - Слов из модели брали побольше, чистили то что не прошло бы проверки ведущего, использовали температуру частотности что бы скорректировать порядок выдачи по формуле: $$ L_n = {L_n(1 + T\times log({f_n}))} $$ $L$ - мера близости $n$ - номер слова, $T$ - коэффициенты температуры, $f$ - частота слова в корпусе. - Угадывание: Взять модель поумнее SKIPGRAMM - на расширенном корпусе (с цитатами): - Забирать из модели больше слов. Процессить. Убирать повторы из предыдущих раундов (здесь у нас была сложность из-за мультипроцессорного подхода - решали с помощью redis) - Узнали что в fasttext есть метод get_nearest_neighbors (он не ставится через pip только из GIT). Отдельная боль поставить его под Windows (Нужен VC C++ 15.0). Он существенно удобнее метода из baseline. --- ## Валидация созданного решения * Сравнивали модели между собой. Выбирали голосованием всей командой * Написали класс игры, который получал логи и мог проводить игры между реальными моделями других команд и новыми моделями обученными локально - это хорошо помогало настроить GUESS * Не сделали таку же штуку для тренировки объяснения слов (можно было учиться у лучших моделей) * Не сделали онлайновй парсер логов - что бы обрабатывать все игры онлайн * Не проанализировали логи своего сервера глубоко. Хотя и собирали их --- ## Деплой сервиса с моделью * GITLAB - репозиторий (3 бранча + merge) * Package repository на GITLAB - собираем образы локально и пушим в репозиторий. На прод. сервер их можно затащить через ```docker pull``` * В качестве сервера AWS t2.large 4cpu + 16Gb (сначал у нас текла память и t2.micro не справлялся) * Для управления докерами использовали ```docker-compose``` * У нас было 4 контейнера * uwsgi+flask - в 5 потоков (даже если один отваливался - остальные жили) * nginx - проксирование запросов в uwsgi * redis - Для обеспечения передачи словарей между потоками * mongo - записывали логи из всех потоков сразу в виде словарей * Разобрались c CI/CD gitlab (после комита решение само выносилось на прод сервер - по не обходимости собирались новые контейнеры см .gitlab-ci.yml) --- ## Организация работы * Доска с задачами (понятно что и кто делает. Туда же писали идеи) ![](https://i.imgur.com/1JC5jMB.jpg) * Созвон каждый день (hangout.google.com) --- ## Выводы - Лучше понимать конечную задачу, которую решаем (валидация на локалььных моделях не дает объективной картины). - Метрики оценки качества - сразу выстраивать процесс валидации на моделях конкурентов как по guess так и по explain на логах от ведущего. - Тестирование результата препроцессинга - нехватило времени настроить - в результате ошибки - Распределение работ между участниками команды (увы, не все задачи были интересные) - Регламент выкладки на прод (не надо делать в последнюю минуту). Лучше выложить за час и протестировать, что все работает как ожидалось. ---
{"metaMigratedAt":"2023-06-15T02:32:31.070Z","metaMigratedFrom":"YAML","title":"Рассказ о решении соревнования по игре в шляпу","breaks":true,"description":"View the slide with \"Slide Mode\".","slideOptions":"{\"theme\":\"white\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"38b0f324-6648-4b08-b1c3-8bc762b8ab7b\",\"add\":7989,\"del\":3240},{\"id\":\"fb127df7-7722-46d9-8aa2-d872786b134f\",\"add\":528,\"del\":56}]"}
    237 views