Анна Сенина: «Программу легко встроить в занятия по цифровой грамотности и Python»
Преподаватель кафедры гуманитарных дисциплин Анна Сенина выступила на «Teacher's Day – 2023» в рамках программы «Фонд образовательных инициатив» с проектом «Создание сети персонажей в проектной работе: чтение кода на Python с нуля». В разработке представлены современные методы для работы с текстом: выявление именных сущностей и социально-сетевой анализ. Мы поговорили с Анной о разработанной программе.
Немного о марафоне
Я в четвертый раз подряд выступала на преподавательском марафоне! Очень важно регулярно слышать отзывы коллег из всех кампусов Высшей школы экономики. А еще получать предложения о сотрудничестве. Например, на одном из преподавательских марафонов меня спросили: «Разве историкам нужно программирование?». Сейчас вопросы совершенно другие: всем стало интересно как преподавать программирование так, чтобы студентам гуманитарных направлений курс был полезен в их профессиональной деятельности. Если рассказывать историю с самого начала, это первая моя разработка, в которую внесло свой вклад такое число людей.
Разработка программы
Запрос впервые сформулировали магистранты программы «Цифровые методы в гуманитарных науках». В рамках задания к курсу «Анализ текстов и дальнее чтение» им нужно было подготовить данные для сетевого анализа. Для всех, кто когда либо занимался сетевым анализом, очевидно – это самый длительный этап, как правило, связанный с ручным подсчетом. Например, вам нужно посчитать сколько раз персонажи встречаются на страницах книги в одном предложении, абзаце или главе. Если речь идет о структурированном тексте, например, драматическом произведении, готовые размеченные тексты на разных языках уже подготовлены в рамках проекта DraCor. Однако для научных монографий или даже художественных текстов далеко не всегда можно найти готовый вариант с разметкой. Тогда подсчет становится более сложной задачей, и обычно для создания сети вам нужно «всего лишь» перечитать книгу еще раз с самого начала. Однако это достаточно рутинная операция — и именно это делает ее идеальной задачей для программирования.
Поскольку я веду семинарские занятия по курсу «Введение в Digital Humanities» на программе «История», где одна из лабораторных работ связана с сетевым анализом, задача для меня тоже стала остро актуальной. Мы с магистрантами сформулировали первые требования к программе, можно сказать, техническое задание:
-
Текст нужно лемматизировать, чтобы минимизировать разные варианты упоминания одного и того же персонажа;
-
Все варианты наименования персонажа нужно извлекать автоматически. В компьютерной лингвистике эти задачи решают библиотеки для распознавания именованных сущностей (Named entity recognition или NER). Важно, что таким образом можно извлекать также наименования организаций, географические локации, что позволяет сделать работу программы более универсальной;
-
Проводить поиск в предложении/абзаце/главе текста с минимальными правками;
-
На выходе получать csv-файл с подсчетом всех взаимодействий, готовый для работы в программе Gephi.
Уже на встречах с магистрантами мы пришли к необходимости промежуточного этапа: ручной чистки ошибочно извлеченных персонажей. При работе с NER требуется проверять, не попали ли в список персонажей (организаций, локаций) ошибочные значения. Этап ручной чистки позволяет удалить их до подсчета совместной встречаемости в тексте. Например, для текста большого объема из более чем 150 персонажей у вас останется около 100 — удаление ненужных строк в промежуточном файле занимает, как правило, не более 5 минут. Тем не менее, здесь не обойтись без исследователя, который определять целесообразность дальнейшей работы с этими объектами. Другими словами, мы заранее очищаем нашу сеть от лишних объектов, случайно попавших в поле зрения библиотеки для распознавания NER. В конечном итоге, мы использовали стандартный набор Python-библиотек для обработки текстов на естественном языке: NLTK, spaCy, natasha.
Внедрение в курс
Если магистранты с таким кодом после семинара могут отправиться в самостоятельное научное плавание, то использование кода на семинарах с бакалаврами требует большой поддержки со стороны преподавателя. Однако эксперимент оказался удачным — все проекты дошли до завершения, хотя программу тестировали еще не программирующие студенты! Например, на семинаре меня попросили поработать также с английским языком — мы нашли соответствующую модель из библиотеки spaCy, подгрузили ее в код, а значит, теперь студенты смогут при необходимости использовать и тексты на других языках.
Среди очевидных преимуществ этой разработки: экономия времени студента, возможность перенаправить его ресурс и мотивацию на содержательную часть лабораторной работы — интерпретацию полученных зависимостей, выявление главных действующих лиц в сети, выполняющих взаимодействия, поиск главных посредников, которые связывает между собой самых отдаленных персонажей, разделение сети на кластеры, анализ ее структуры.
Вместо подготовительного этапа с полностью ручным скучным подсчетом, студенты осваивают важнейший навык, полезный для обучения Python на 2 курсе (в следующем учебном году), — чтение чужого кода и внесение в него изменений.
Такой способ взаимодействия с программированием является «мягким» погружением в эту сферу: студент на лабораторной работе в классе находится в ситуации, когда существует работающий код, однако нужно разбираться в ключевых операциях с позиции исследователя: проверять, что код корректно решает задачу студента, формулировать запрос к «программисту», самостоятельно вносить правки и т. д.
Во многом непрограммирующие самостоятельно гуманитарии, в особенности исследователи из области Digital Humanities, работают в таких командах: от них требуется контроль за задачей, которая решается автоматически. Внесение минимальных правок в код помогает подготовиться к курсу Python, расширяет возможности самостоятельного поиска готовых разработок (например, на платформе GitHub), адаптации их под свои исследовательские задачи. Не говоря уже о том, что работающий код в целом сегодня может написать и ChatGPT — однако для его использования пользователю требуется разбираться в основных шагах в ходе выполнения программы.
Отдельно хотелось бы упомянуть и работу с возникающими ошибками. Поскольку язык программирования Python — очень дружелюбный к начинающим программистам, он явно указывает на возникающую ошибку. Чтение сообщений об основных ошибках является одним из важнейших способов прохождения заданий с автопроверкой на независимом экзамене по Python, обязательном для всех программ бакалавриата в НИУ ВШЭ. Таким образом, использование готового кода готовит студентов к следующему шагу — освоению Python и написанию программ на курсах следующих учебных годов.
Масштабируемость разработки
Выражаю благодарность экспертам Фонда образовательных инноваций, работавших с заявкой, а также специалистам проекта Data Culture, коллегам, ведущим курсы цифровой грамотности, Python и анализа данных. Во многом именно их комментарии и советы помогли сделать разработку такой гибкой.
На текущий момент программу легко встроить в занятия по цифровой грамотности и Python — для программирующих и непрограммирующих студентов. Программа может работать с заранее заданным словарем объектов — например, в тех случаях, когда мы хотим построить сеть терминологии. В этом случае в качестве узлов сети будут выступать категории, выделенные исследователем, по аналогии с контент-анализом. Заявку я дополнила банком проектов — небольшим набором кейсов с исходными данными и описанием задач для студента.
Особую благодарность выражаю Светлане Силаевой из департамента государственного администрирования (НИУ ВШЭ – Санкт-Петербург). Мы объединились в группу для работы на курсах повышения квалификации Data Culture, однако у нас очень разные образовательные программы, что и позволило продвинуться в расширении разработки для гуманитарных и социальных областей научного знания, соответствующих им исследований и образовательных программ. Коллеги, работающие с курсами проекта Data Culture, оставили большое количество отзывов и комментариев, предложили идеи для дальнейшей самостоятельной работы студента после семинара по сетевому анализу, а главное, подтвердили возможность встраивания разработки в свои курсы, применения в проектной работе. Готовый вариант сети, реализованный на интересном студенту кейсе, впоследствии может стать частью проекта по курсу.
Анна Сенина стала победителем осеннего конкурса образовательных инноваций 2022 года. В рамках программы она предложила технологию по вовлечению студентов гуманитарных специальностей в процесс изучения языка программирования Python. Подробности проекта представлены в данной статье.