Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы

в 6:27, , рубрики: python, Блог компании Mail.Ru Group, инфопоиск, образование в ит, поисковые технологии, Учебный процесс в IT

В наших технопроектах преподают более 200 коллег. Но многие этим не ограничиваются и проводят мастер-классы, курсы и лекции и на других образовательных платформах. Один из таких энтузиастов — Роман Васильев, который этой весной провел курс по инфопоиску в Зимней Пущинской Школе. Под его руководством всего за шесть занятий школьники 7-11 классов (!) написали свой поисковик и защитили проект. Как им это удалось, что это за поисковик и для чего проводится ЗПШ — в философской, вдумчивой, легкой, с изрядной долей юмора статье Романа Васильева.

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 1

Вступление. Куда идет наше образование, und was können wir dagegen tun?

Наблюдая за системой школьного образования вот уже более 20 лет, сначала изнутри в качестве ученика, потом — извне, общаясь с сегодняшними школьниками, я вижу, что мир уже давно не такой, каким был раньше. Несмотря на скачок в развитии информационных технологий, которые призваны улучшить нашу жизнь, я не завидую тем, кто учится в современных российских школах. Спросите, почему? Вспомните свое детство. Наверняка вы хотели поскорее стать взрослыми, искали возможность проявить самостоятельность, и вам нравилось чувствовать свободу выбора и действий в эти моменты. Когда я шел из школы домой, ходил на рынок за продуктами — именно тогда я и был маленьким взрослым. В те минуты никто меня не контролировал, мобильных телефонов у нас не было, я гулял с друзьями или думал о чем-то наедине с собой, этот глоток свободы был для меня жизненно важен.

А теперь что? Часто родители обязаны провожать детей в школу и забирать обратно, ученики теперь как на привязи. Говорят, что времена другие стали. Да неужели? Спорю, какими были люди, такими по сути и остались, маньяков больше не стало, и волков бояться — в лес не ходить. Вводится все больше и больше средств контроля и измерения уровня успеваемости: электронные дневники, экзамены нового типа. Но как говорит мой учитель физики Алексей Иннокентьевич, если ты с утра не положил копейку в карман, то, как ни крути, в обед у тебя ее там не окажется. Этим я хочу выразить свою точку зрения, что упор необходимо делать на то, как передать ученикам знания, а не проверить имеющиеся, и самое главное — привить им способность думать, критически мыслить и находить решения в нестандартных ситуациях.

На деле я часто слышу от учителей о том, что ученики просто не хотят учиться, а от учеников — что иногда выпадают целые дисциплины, например, программирования в некоторых школах не было как такового. Да-да, вот приходит ко мне группа студентов-геологов, мне нужно учить их информатике, а уровень знаний у них у всех "как повезет", при этом очень трудно адаптировать курс. Или, например, расхожее явление, что на уроках литературы ученикам снижают отметки лишь за то, что они не согласны с мнением учителя и отражают это в своих сочинениях. Понимают ли учителя свой предмет досконально, интересуются ли им искренне? Увы, не все. И неудивительно, если учесть, что старшее поколение учителей неизбежно уходит из жизни, а после распада СССР жизнь учителя стала скорее выживанием, в результате сильные абитуриенты просто обходили педагогические вузы стороной. Разве можно заинтересовать ребенка чем-то, когда сам этим не "горишь"?

А уж если говорить о том, что в школах иногда складываются нездоровые взаимоотношения как внутри класса, так и между учителем и учеником, так вообще грустно становится. Захочешь ли тут учиться? Многое зависит от того, в какую школу попадешь. Так как же быть, если тебе не фортануло, и денег на частную школу и репетиторов у твоих родителей нет? А ведь часто именно в таких, самых обычных школах у нас учатся одаренные дети, олимпиадники. По себе знаю, что для этих детей социализация может стать проблемой, например, сверстники завидуют им и не понимают их. А что, если таких детей у нас больше, чем кажется, но их таланты зарываются в землю, не очень-то плодородную? Как дать ребенку почувствовать пьянящий вкус познания, овладения новым материалом? Поместить его в тот коллектив, где он будет чувствовать себя свободно и естественно, как рыба в воде, где он встретит единомышленников, друзей, свою любовь, наконец?

ЗПШ. Идея

Оказывается, есть остров, где мир знаний играет всеми красками, где уроки — это общение и сотворчество, куда ученики приезжают даже издалека и проводят там каникулы. Это Зимняя Пущинская Школа. Ах, знать бы мне о ней 15 лет назад! Расположенная в небольшом городе Пущино, на берегу Оки и неподалеку от Серпухова, она существует с 1990-го года. В конце марта прошел ее 28-ой сезон. Одна из основных целей школы — дать возможность ученикам взглянуть на учебный процесс под другим углом, погрузить их в другую атмосферу, предоставить им самим выбирать то, что интересно. Более 15 лет общее руководство проектом осуществлял Михаил Абрамович Ройтберг, д. ф.-м. н., заведующий лабораторией прикладной математики ИМПБ РАН, заведующий кафедрой алгоритмов и теории программирования ФИВТ МФТИ. К сожалению, прошлым летом он ушел из жизни, и сейчас руководство школы коллегиальное, в оргкомитет входят, в основном, ученые и преподаватели ВУЗов.

Преподаватели — молодые учителя, студенты-энтузиасты, аспиранты, выпускники лучших университетов России. Более ста добровольцев, желающих зажечь школьников любовью к науке и к своему делу. Без колебаний я решил использовать эту возможность рассказать о том, что интересно, актуально и чего не преподают ни в одной школе.

Cтруктура школы. Активности

В ЗПШ, как в Хогвартсе, есть четыре департамента: точный, естественный, гуманитарный и психологический. Свобода как выбора темы курса, так и способа подачи материала не ограничена практически ничем, кроме размеров аудитории и наличием тех или иных технических средств. В каждый из пяти дней проходит три ленты курсов, по часу каждая. Это время можно как угодно распределять на лекции и практикумы, мастер-классы. А вечером проходят студии. Этот формат идеально подходит для занятий искусством, тренингов, где создается творческая атмосфера. На ЗПШ можно, к примеру, провести как курс по ядерной физике, так и студию по изготовлению оригами-цветов или игре на укулеле. Каждый курс должен иметь некий итог, который его участники представляют в виде плаката на конференции в конце недели. А потому важно продумать план занятий так, чтобы было логическое завершение и видимый результат.

Регистрироваться в школе в качестве сотрудника, т.е. преподавателя, нужно примерно за месяц, указав, по возможности, два варианта названия курса — стандартное и поэтическое. Есть возможность выбрать, на учащихся каких классов рассчитан курс, и ограничить размер аудитории слушателей. Еще каждый курс должен иметь аннотацию, которая печатается в буклете, и афишу. Быть при этом художником не обязательно, большинство преподавателей присылают изображения и наброски, которые организаторы доводят до ума. После завершения регистрации новые сотрудники приезжают в гимназию «Интеллектуал», где делают небольшой доклад минут на десять о своем курсе. Оргкомитет принимает решение о проведении курса (как правило, положительное) и может дать рекомендации.

Поскольку Школа чем-то напоминает лагерь, куда дети приезжают чуть более, чем на неделю, есть возможность быть вожатым. Всем сотрудникам компенсируется проезд и проживание в Пущино. Мне приходилось ездить туда на автобусе 6 дней подряд, потому что работу никто не отменял. Было довольно тяжело: в 9 часов утра выдвигался, к полудню успевал на третью ленту, проводил занятие, обедал и возвращался в Москву, в офисе оказывался примерно в половине пятого. Работал, сколько было сил, после полуночи возвращался домой и перед сном готовился к следующему занятию. В следующем году, наверное, возьму отпуск, к тому же сам бы посетил некоторые курсы, особенно по психологии, а вставать в 5:30 утра к первой ленте — это просто убийство.

Мои первые впечатления. Место, атмосфера, люди

Да, это длится всего неделю, но заряда, который там получаешь, хватает надолго. Воскресенье, утро, через заснеженные поля и лес автобус приносит меня в Пущино. Гимназия расположена на въезде в город, в микрорайоне с загадочным названием «АБ». В здании из красного кирпича, раскинувшемся буквой «П», все были приглашены в Красный зал на торжественное открытие Школы. Когда я там оказался, взглянул на лица людей вокруг, на меня накатила ностальгия: я вспомнил, как ездил на олимпиады по математике и физике. Только на этот раз я был в другом качестве, когда не нужно решать задачи и соревноваться.

Теперь главная задача — заинтересовать ребят, потому что в воскресенье проходит представление курсов. В коридорах повсюду были развешаны афиши, занятия проводились везде: не только в кабинетах, но и в рекреациях. Вообще, атмосфера, которая царит в ЗПШ, пропитана добротой, заботой и доверием. Формализм был сведен к минимуму, всё было направлено на то, чтобы дать волю фантазии и никак не ограничивать в творчестве ни учеников, ни сотрудников. Например, эта белка стала не только всеобщей любимицей, но и… полноправной участницей Школы.

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 2

На первом этаже рядом со штабом было оборудовано «Африканское кафе», где всегда можно было выпить чаю, кофе и полакомиться фруктами.

Три раза ровно по 10 минут ты рассказываешь о курсе. В конце дня ученики делают свой выбор. Всего около 200-300 школьников выбирают для себя по 3 курса из нескольких десятков. Курсы по анализу данных и нейросетям, как я посмотрел, оказались популярнее, а ко мне на информационный поиск записалось 6 человек. Надо сказать, это хорошо: не слишком мало, и не слишком много, удобно вести диалог. Боялся, что будет меньше.

Жемчужиной ЗПШ являются лекции так называемых мамонтов — крупных ученых, которые посещают Школу и вселяют интерес к науке. Кстати, сам план построения курсов повторяет работу ученого, которая совмещает исследования и общение на конференциях, публикацию полученных результатов.

Одна из проблем ЗПШ — нехватка компьютерных классов. Мне достался кабинет русской словесности. Проектор нашелся, WiFi в том месте ловил так-сяк, пришлось использовать мобильный. Ноутбуки были не у всех, и я брал с собой два: с одного — показывал презентацию, другой — отдавал для практикумов.

Дни занятий. Как выстроился курс инфопоиска: темы, учебный процесс

Итак, я поставил перед собой задачу создать курс информационного поиска, который будет одновременно интересным, доступным и интерактивным. Я убежден, что в школах не хватает наставничества, личного участия и глубокого погружения в учебный процесс. Мне хотелось, чтобы курс был похож на увлекательное путешествие, куда я поведу ребят, зная все тропы, как опытный лесничий. И ни в коем случае курс не должен походить на нудное выступление партийного чиновника на съезде КПСС. Значит, одними лекциями тут не отделаешься.

На первом занятии я сразу же понял настроения ребят. В большинстве своем они хорошо знали Python и хотели — если не страстно желали — писать код. Более того, всем хотелось написать целый поисковик, пусть и маленький. Такое желание заразительно, и я решил, что не создать поисковик по итогам курса — значит сдаться. А сдаться — это не про нас, мы не из таких! Встала большая проблема: времени всего 5 часов плюс еще какое-то время в пятницу, которое отводится на подготовку к конференции. Поэтому я решил рассказать сначала о тех частях, без которых поисковая система немыслима, и попутно писать код, а там — как пойдет. И поскольку написать проект с нуля за такое время практически невозможно, я решил принести заготовки и отдельные части, в которых следовало разобраться, доработать их и собрать воедино. Это уже посильная задача.

Так вышло, что в курсе было две лекции, три смешанных занятия и хакатон. Материалы, по которым можно было быстро и легко подготовиться, я позаимствовал у своих коллег, за что им большое спасибо. Еще удобно то, что любопытных и интересующихся можно отправлять на наш канал Технострим, где все те же темы освещены подробнее.

На первом занятии я рассказал об общей архитектуре поисковых систем, о проблемах, с которыми мы сталкиваемся, и как их решаем. Ко второму занятию я ночью набросал какой-никакой, а краулер, запустил его и выкачал 2000 страниц с портала lenta.ru. Сначала рассказал ребятам о том, как устроен паук, а в конце занятия дал им заготовленный код. Мы вместе выявили недочеты, которые я физически не успел устранить (спать когда-то надо), и на третий день мне принесли дополненную версию, уже на Python 3. О приоритезации краулера я упомянул только в том духе, что она есть и базируется на кликовой информации. Конечно же, нельзя обойтись без анализатора запроса и индекса, и, как бы это ни было трудоемко, разобраться в методах бинарного представления индекса и словаря. Это вошло в курс и стало темой третьего и четвертого занятия.

Насколько успели, разобрали код индексатора. К этому времени парни уже запилили красивый веб-интерфейс для поисковика, который только и ждал, пока его прикрутят к бэкенду. На четвертый день после занятия мы с Даней (один из моих учеников) нарисовали эмблему курса. На последнем занятии по просьбам радиослушателей я рассказывал о методах поиска дубликатов. Ребята узнали, что такое шинглы, как работает алгоритм Minshingle. А с алгоритмом Бродера проблем не возникло, потому что на курсе по обработке больших объемов данных объяснили, как работает MapReduce. И под конец — небольшой хакатон, где мы настроили индексатор на те данные, что нам навыкачивал краулер, и самым топорным способом реализовали генерацию сниппетов.

Часам к шести вечера все критические баги пофиксили, web-интерфейс прикрутили, и на конференцию вышли с каким-никаким, а работающим поисковиком. Это был успех! Страшно уставший, но счастливый, я поехал в Москву. На следующий день спокойно отсыпался, будучи уверенным, что мои ученики обязательно справятся.

Герои курса. Пара слов от меня, интервью с ребятами: Даня Горлов, Артем Брустовецкий, Катя Хватова

А как же им-то — и не втащить? "If we can't get it all, then nobody will."

Такой энергии, неукротимого энтузиазма, такого сияния талантов я не видел еще ни в одной аудитории, где мне доводилось ранее преподавать. А выучил я, ни много ни мало, пять групп геологов-горючников в МГУ. Как виделось с моей стороны, занятия были похожи на диалог, а если внимание и рассеивалось, то это означало, что все смотрят в код. Здесь мне хочется сказать многое, и я сталкиваюсь с той трудностью, что можно точно передать мысль словами, но чувства не всегда поддаются. Отец спросил меня в воскресенье: «И вот не лень тебе было мотаться каждый день за сто километров? Заняться тебе, что ли, больше нечем? Когда диссер, наконец, напишешь?»

Ради вас, мои ученики, — не лень, пусть даже было бы не сто километров, а все двести. Глядя на вас, самому вдвойне хочется развиваться, двигаться вперед и вверх. Всегда буду рад пообщаться. И мне было очень приятно под конец узнать, что курс понравился и получился удачным.

Кто же они — мои ученики?

Даниил Горлов

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 3

Учится в 7-ом классе школы-пансиона «Дубравушка» г. Обнинска, интересуется web-программированием, IT в целом и технологиями информационного поиска в частности. И особенно — программированием микроконтроллеров, на базе которых он разработал систему управления теплицей через Интернет. Система умеет считывать данные об уровне воды в баке, влажности и температуре воздуха, и осуществляет автоматический климат-контроль. Еще один проект Дани — реализация сетевого протокола под Arduino, созданного в противовес HTTP, в том числе на низком уровне. Главной отличительной особенностью протокола является модульность и расширяемость. Его основной язык программирования — Python, в область интересов попадают фреймворк Flask, распределенные вычисления в парадигме MapReduce с помощью Hadoop. В планах — освоить технологии обработки больших объемов данных, машинное обучение, deep learning. А затем создать операционную систему для нейроинтерфейса. Уверен, у него получится.

Артем Брустовецкий

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 4

Ученик 11-го класса из Пущино, посещает ЗПШ уже шестой год подряд и безумно увлечен программированием. Его выбор пал на курс по инфопоиску, поскольку эта дисциплина связана с web- и backend-разработкой, которыми он интересуется, а еще — потому что здесь была отличная возможность писать код. Опасения Артема по поводу понимания материала не оправдались, и под конец он научился программировать поисковые системы, чему был очень рад. Самым лучшим и самым любимым языком программирования для Артема является Python, к написанию кода на нем он относится с особым тщанием и стремится довести его качество до совершенства. Больше всего Артему нравится сетевое программирование, многопоточность, сокеты и разработка игр. Сейчас он создает игру на Unity, основной упор делает на реализацию серверной части и производительность при передаче данных. Планирует развиваться в таких отраслях, как машинное обучение, нейросети, и далее повышать свой уровень в web-разработке. Одна из идей, которые ему хочется воплотить в жизнь, это преобразование Веба в децентрализованную систему, в которой каждый участник хранил бы свой кусочек данных. Впечатления от Школы у Артема самые светлые, и всем школьникам он советует обязательно попасть сюда и погрузиться в эту неповторимую атмосферу.

А теперь дадим несколько слов Кате Хватовой, ученице 11-го класса из Москвы.

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 5

«Я оптимист по жизни, увлечения достаточно разнообразны, но основные — это биология и программирование. Выбрала этот курс, так как мне понравилась сама тема, я очень интересуюсь принципами работы поисковиков типа Поиска Mail.ru Для меня эти занятия были очень необычными и интересными за счет достаточной сложности. Иногда было слишком сложно, ведь я пришла на курс, почти не зная языка. Несмотря на это, сами принципы работы мне стали понятны сразу, так как способ преподавания был очень удобен. Если смотреть со стороны, я была самым слабым программистом, но мне понравилось. Я узнала очень многое — например, как можно давать более понятные для поисковика запросы, а это может очень помочь в будущем. У нас было достаточно мало практики, но мне это понравилось, ведь я больше хотела научиться не программированию (хотя и этому тоже), а самим принципам. Меня интересуют самые разные языки, но больше всего Java и C++, потому что в последнее время используются в основном они. Также это одни из самых удобных языков. Но, несмотря на это, в данный момент я использую Паскаль, на нем у меня есть несколько проектов. Сам мир программирования очень разнообразен, для меня интересны отрасли, граничащие с биологией, например, нейросети и биоинформатика. На самом деле я научилась всему, чему хотела, и очень радуюсь, что выбрала этот курс».

Итоги курса. Поисковик. Что получилось у ребят

И теперь настал самый торжественный момент: показать результаты того, что мы сделали в течение курса и еще двух недель после него. А это, пусть небольшой и немного урезанный, но всё же работающий web-поисковик. Он сейчас развернут на сервере по адресу http://alphase.ru/, ссылка на исходники здесь. Вот его архитектура:

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 6

Зеленым цветом обозначены те компоненты, которые могут работать периодически для поддержания индекса в актуальном состоянии. Оранжевым — те, которые несут постоянную нагрузку и служат для обработки поисковых запросов в реальном времени. Голубым цветом показана база web-документов, в нашей реализации они просто хранятся в файловой системе.

С одной стороны, краулер обходит Интернет-страницы, учитывая содержание файлов robots.txt и обрабатывая возможные ошибки протокола HTTP, скачивает их и сохраняет на диске. В настоящий момент получена небольшая коллекция веб-документов с портала habrahabr.ru. Исходная HTML-разметка обрабатывается утилитой Boilerpipe, которая используется как внешняя система, «черный ящик». В результате остается только текстовый контент страниц без обвязки (header, footer), меню сайта и рекламы. Индексатор перед началом работы запускает утилиту удаления дубликатов, а затем обрабатывает текст документов и формирует индекс и словарь. Для обнаружения дубликатов документов используется алгоритм Minshingle. Размер индекса на текущий момент небольшой, порядка нескольких десятков тысяч документов, но мало-помалу увеличивается за счет новых поступлений от краулера.

С другой стороны, на фронтенд поступает запрос от пользователя, он разбивается на отдельные слова — термы, и по ним строится дерево запроса. Оно передается серчеру, который обращается к словарю, находит в нем номера блоков, соответствующих всем термам в дереве. Далее серчер извлекает необходимые блоки из индекса и вычисляет пересечение множеств документов из каждого блока. Для найденных документов генерируются сниппеты (в нашем случае — первые попавшиеся фрагменты документов, содержащие одно из ключевых слов запроса), определяются URLы — из этого, собственно, и состоит выдача. Она передается фронтенду и отображается пользователю, который (мы надеемся) остается доволен результатом. Сам фронтенд был написан с использованием фреймворка Flask.

Все компоненты написаны на Python 3.6, за исключением Boilerpipe, который использован в виде jar (Java-приложение). Индекс и словарь представлены в бинарном виде для быстрого поиска в больших коллекциях. В настоящий момент создается подсистема ранжирования результатов на основе простых текстовых признаков.

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 7

В качестве небольшого дополнения мы добавили страницу с прогнозом погоды, которая обращается к публичным API для определения местоположения пользователя и загрузки актуальных данных о погоде для него.

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 8

И самое классное здесь вот что: оно работает!

Курс инфопоиска на Зимней Пущинской Школе: учим старшеклассников создавать поисковые системы - 9

Автор: WishmasterRW

Источник

Поделиться

* - обязательные к заполнению поля