Инфоинженер. Как я делал курс по NLP для МГТУ им. Баумана
Новый кампус Бауманки. Нарисовано нейросетью.
Пандемия. Осень. Друг и бывший одногруппник, работающий на кафедре прикладной математики, попросил меня сделать курс по обработке естественного языка для МГТУ имени Баумана. Курс подразумевался быть коротким, около 10 занятий, аудитория — студенты с первого по четвертый курс. Студенты хотели больше знать о том, что их ждет после окончания факультета и чем реально могут заниматься его выпускники. Я вспомнил, что и сам не до конца понимал, в какую сферу податься после диплома, поэтому подумал и согласился.
NLP (Natural Language Processing, обработка естественного языка), — область на стыке машинного обучения и компьютерной лингвистики. Мы сталкиваемся с ней ежедневно, — при просмотре заголовков новостей и общаясь с чат-ботами, при набирании текста в телефоне и пользуясь программами-переводчиками. Генеративные сети умеют сочинять стихи и пишут книги. Поиск информации в сети и голосовые помощники, все это тоже тесно связано с NLP.
Нужен план
Для начала нужно было определиться с планом занятий. Студенты — люди занятые, вдобавок ближе к сессии не хотелось их напрягать дополнительной учебой. Поэтому договорились провести 10 занятий по одному в неделю, — 5 лекций и 5 семинаров. Студенты были инженерами-математиками, и теорию должны были знать получше меня. Больше времени нужно было уделить знакомству с практической стороной машинного обучения и новыми моделями. Хотелось убедить их, что это не какая-то магия, а вполне себе обычная работа, которую может освоить каждый, если у него появится должный интерес.
Я выделил несколько тем, которые мне показались наиболее важными:
• Представление текста в векторном виде (многим в начале не понятно, как текст и другие данные подавать на вход моделям).
• Что можно с такими представлениями делать. Как подойти к задаче классификации, классические алгоритмы и метрики.
• Рассказать про нейросети. Что такое transfer learning и как использовать уже предобученные модели.
• Нужно было упомянуть механизм внимания и то, как он повлиял на современное состояние дел в машинном обучении.
• Немного рассказать про инфраструктуру и организацию кода.
• Машинный перевод. Один из основных двигателей NLP, очень важная тема, её тоже решил осветить.
Предварительно я создал канал в телеграм, в который начали добавляться студенты. По результатам опроса я выяснил, чего люди ожидают и еще раз скорректировал план на основе их пожеланий. По этим заметкам я и начал делать занятия.
Старт курса был запланирован через две недели, поэтому стоило поторопиться.
Процесс
Чтобы проведение курса не шло в ущерб основной работе, нужно было максимально упростить процесс по выкладванию материалов. Занятия велись по Zoom’у, для записей я завел канал на YouTube. В местном редакторе можно довольно удобно вырезать паузы («эканья», «аканья» и слова паразиты, которые иногда закрадывались в мою речь), делая видео удобней для просмотра.
Для артефактов (слайдов, ссылок и остального) — репозиторий на GitHub. Для практических занятий — Colab.
Очень пригодились заметки, которые я делал, когда сам осваивал ту или иную тему последние два-три года. Могу уверенно порекомендовать делать такие заметки каждому. На мой взгяд, это ведет к более системным знаниям и дает возможность быстро повторить уже изученное.
Тратил я в основном по три-четыре часа в выходные и полчаса-час с утра по будням. Много времени уходило на банальное редактирование слайдов.
Первая лекция была вводной, — рассказать про предметную область, какие в ней есть направления, какие задачи она решает и почему это может быть интересно. Я накидал несколько страниц, щедро сдобрил их различными демо и начал мысленно рассказывать себе лекцию. В моем воображении студенты часто поднимали руки и задавали каверзные вопросы. Я, конечно, не мог на них ответить, поэтому снова и снова перечитывал материал и делал новые заметки.
И вот пришло время давать первую лекцию.
Поехали
Волновался я очень сильно, но на стриме внезапно оказалось несколько бывших одногруппников, чему я был очень рад. Всего пришло около 25–30 человек, то есть практически обычная аудитория.
Так как лекцию я прокручивал у себя в голове раз десять, то рассказывал довольно бодро. Так бодро, что рассказал все, что хотел, где-то за полчаса. Планировал занятие на 45 минут, плюс время на вопросы.
Вопросов, вопреки моим ожиданиям, оказалось не так много, буквально 2–3. Люди либо поняли все очень хорошо, либо нет. Кстати, один из минусов проведения онлайн мероприятий в том, что ты не видишь практически никого в лицо, только пару смельчаков. Да и просто общение с аудиторией тоже требует опыта.
Канал в телеграме давал большие плоды, — люди в нем охотней задают и отвечают на вопросы.
В общем, оказалось все не так страшно и я более уверенно стал готовить семинар.
Семинары отнимали еще больше времени чем лекции, так как нужно было не просто сконструировать какие-то упражнения, но для начала понять, что и на каком уровне будет полезным, а что лишним. Здесь мне снова помогли заметки, — удалось вспомнить больше вещей, которые были для меня полезны в работе. К тому же я вел заметки и по курсам, которые сам когда-то проходил. Это тоже помогло.
Семинары шли живей, чем лекции. Практическое применение интересует людей посильнее теории. Не обходилось и без курьезов, — иногда что-то отваливалось посреди демо и приходилось дебажить на ходу. А однажды в середине семинара мне удалось свернть все ячейки Colab ноутбука неведомой комбинацией клавиш и перезапустить его. Почему-то такие вещи происходят гораздо чаще именно во время демонстраций.
Так, шаг за шагом, проходил наш маленький курс. По выходным я говотил материалы, в течение недели репетировал занятие и в пятницу проводил стрим. В канале шло общение со студентами, которые начинали сами общаться между собой и обсуждать темы. Возможно, это и стало самым главным достижением.
В конце
В конце я бы выделил несколько моментов, которые вынес для себя из этого небольшого приключения.
• Очень полезно вести заметки и периодически к ним возвращаться. Это чем-то похоже на интервальные повторения при изучении иностранного языка.
• Объяснять что-то другому — очень хороший способ лучше понять тему самому.
• Нужно готовить какие-то приемы на случай «тихой» аудитории. Проводить опросы или задавать простые вопросы для разогрева.
• Людям нравятся крутые демо. Здорово, если получается удивить аудиторию, — сразу появляется интерес к теме, хочется делать так же.
• Всю побочную повторяющуюся работу по записи видео, редактированию материалов и прочее нужно упростить до максимума. Желательно до начала занятий.
• Что-то всегда может пойти не так. Наверное, это нормально, и нужно отнестись к себе с пониманием.
• Преподавать — это сложный навык и большой труд, а учитель — это очень недооцененная профессия.
Думаю, что курс в целом получился средненький, хоть я и старался. Студенты пошли на сессию, а я, по своим ощущениям, эту сессию сдал.
Ссылки
⚡ Градиент обреченный — завел канал про рабочие моменты программиста и ML заметки.