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