Pull to refresh

Инфоинженер. Как я делал курс по NLP для МГТУ им. Баумана

Reading time5 min
Views6.2K
Новый кампус Бауманки. Нарисовано нейросетью.
Новый кампус Бауманки. Нарисовано нейросетью.

Пандемия. Осень. Друг и бывший одногруппник, работающий на кафедре прикладной математики, попросил меня сделать курс по обработке естественного языка для МГТУ имени Баумана. Курс подразумевался быть коротким, около 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-проектом по созданию параллельных книг на иностранных языках.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 20: ↑19 and ↓1+23
Comments1

Articles