Смотрим на Санкт-Петербург сквозь призму публикаций в соцсетях — базовый анализ популярных локаций
Магистры, аспиранты и сотрудники Института дизайна и урбанистики ИТМО рассказывают, как можно изучить публичный образ той или иной локации. Для Санкт-Петербурга они проанализировали более пяти млн публикаций из популярной в России соцсети с соответствующими геотегами за 2018, 2019 и 2020-й.
В рамках проекта определили: (а) о каких объектах пишут чаще всего, (б) какие организации и достопримечательности наиболее популярны, (в) какие тематики можно выделить и как они распределены по территории, (г) к каким тематикам относятся популярные объекты. Поговорим о первой половине вопросов (а, б), а сопоставление с тематической окраской обсудим в следующий раз.
Подготовка данных
Исследование ограничили публикациями в Instagram. Для работы с ними использовали сервис унифицированного сбора данных с разнородных источников, построенный с помощью платформы DataMall. Она отвечает за поддержку жизненного цикла интеллектуальных объектов на основе больших данных и является проектом Национального центра когнитивных разработок Университета ИТМО.
Анализировали содержание текстовых подписей к фотографиям и координаты. По геометкам публикации упорядочили по сетке из ячеек 100 на 100 метров. Для города их число приблизилось к десяти тысячам — около ста «доминантных» ячеек включили в себя по пять тысяч постов и более, почти шесть тысяч ячеек — по одной сотне публикаций или менее. Далее — диаграмма с распределением:
На этапе предварительной обработки с помощью методов Natural Language Processing и компьютерной лингвистики произвели следующие манипуляции с датасетом:
Из текстов исключили эмодзи из-за потенциальной неоднозначности интерпретации, в частности фактора сарказма, что не входило в задачу.
Провели работу по нормализации хештегов — они несли большой объем информации. Еще их разделили на отдельные слова (#впитережить —> «в питере жить») и перевели на русский язык, где это было необходимо.
Удалили ссылки, добавили пробелы после знаков препинания для разбиения текста на предложения. С помощью Google Cloud частично (не все иностранные языки удалось автоматически определить) перевели посты, содержащие иностранные слова на русский. Непереведенный контент — исключили.
Исключили посты, где по итогам выполнения всех предыдущих шагов образовалась «пустота». Например, если они состояли только из эмодзи или непереведенного текста. Еще определили и исключили различные публикации рекламного характера (с использованием подходов классификации и ключевых слов), чтобы снизить «зашумленность» данных.
После предварительной обработки из исходных пяти миллионов публикаций остались примерно два миллиона двести тысяч постов. Они пошли в дальнейшую работу.
Извлечение упоминаний объектов
Здесь применили метод распознавания и классификации именованных сущностей в тексте (Named Entity Recognition and Classification). Он позволяет распознавать имена собственные и предсказывать их классы. Для реализации использовали библиотеку spaCy и модель для русского языка spacy-ru с предобученными компонентами NLP-конвейера. Модель обучили для распознавания именованных сущностей классов ORG (организация), LOC (локация) и PERSON (имена). Этого было достаточно.
Поскольку исходные тексты публикаций — даже после предварительной обработки — были плохо структурированными, содержали грамматические и стилистические ошибки, эффективность модели для них была недостаточной (значение F1-score — менее 50% на тестовой выборке в пять сотен примеров). Помимо этого для целей исследования требовались наименования городских объектов с определяющим словом. Например, из текста «В ресторан «Квартира» я готова ходить каждый день…», нужно было получить именованную сущность «ресторан Квартира», а не просто Квартира. Такой результат облегчил бы анализ всего массива данных.
Для повышения эффективности NER-компонент выбранной языковой модели дообучили на одной тысяче пятисот вручную аннотированных текстов из исходного массива. В результате эффективность модели превысила 75%:
NLP model | precision | recall | F1-score |
ru2_nerus, исходная | 41.6 | 44.4 | 43.0 |
ru2_nerus, дообученная на 1500 текстах | 75.98 | 76.45 | 76.22 |
Однако точность в 75% требовала доработки. Поэтому в качестве объектов выделили организации и локации, о которых больше всего пишут на конкретных территориях, а менее популярные — отнесли к категории шума. В итоге выявление именованных сущностей проводилось отдельно для каждого квадрата (100 на 100 метров) с последующим объединением результатов в итоговый перечень объектов.
Показатели точности сложно сравнивать с аналогичными моделями, поэтому адекватность полученной точности оценивали экспертным путем на основе тестового датасета. Для дополнительного чтения по теме есть работа по анализу публикаций в Twitter. В ней вы найдете сравнение многих NLP библиотек и моделей на данных соцсетей и именно на задаче NER. Однако в статье наших коллег точности значительно ниже тех, что получили мы.
Для последующего анализа выбрали только сущности классов ORG и LOC. Также методом ключевых слов исключили сущности, названия которых соответствовали крупным локациям и не могли быть городскими объектами. Например, названия стран, городов, областей и районов. Полученные списки, соответствующие каждой из ячеек, переработали для уточнения веса каждой уникальной сущности.
Для этого отдельные слова в наименованиях привели к начальной форме путем лемматизации, затем объединили идентичные наименования сущностей и похожие наименования, найденные с использованием библиотеки difflib. Например, для сущности «Исаакиевский собор» были найдены следующие варианты написания, являющиеся ошибочными, но при этом однозначно указывающими на этот объект: исаакиевсёкий собор, исааакиевский собор, исакиевский собор, исаакиевкий собор, исаакивский собор, исаакевский собор, иссакиевский собор.
В итоге — получили взвешенные списки именованных сущностей, потенциально являющихся городскими объектами, расположенными в соответствующих ячейках. Фрагменты результирующих списков лемматизированных наименований выделенных сущностей для нескольких квадратов приведены далее в таблице:
Ячейка | Выявленные именованные сущности с весами |
1 | 'исаакиевский собор': 4404, 'манеж': 1127, 'исаакий': 383, 'исаакиевский площадь': 179, 'эрмитаж': 131, 'цвз манеж': 119, 'невский': 79, 'казанский собор': 62, 'колоннада исаакиевский собор': 52… |
2 | 'эрмитаж': 7285, 'зимний дворец': 591, 'государственный эрмитаж': 411, 'дворцовый площадь': 160, 'главный штаб': 128, 'малое эрмитаж': 119, 'новый эрмитаж': 104, 'эрмитажный театр': 79, 'лувр': 76… |
3 | 'новый голландия': 1929, 'голландия': 246, 'бутылка': 162, 'остров новый голландия': 104, 'павильон': 52, 'адмиралтейский канал': 37, 'двор бутылка': 30, 'невский': 27, 'мойка': 21… |
4 | 'мариинский театр': 593, 'мариинка': 388, 'мариинский': 188, 'новый сцена': 33, 'мариинский-2': 25, 'медный всадник': 22, 'щелкунчик': 18, 'римский-корсаков': 13, 'чайковский': 10… |
5 | 'океанариум': 460, 'питерский океанариум': 27, 'трк планета нептун': 16, 'нептун': 11, 'петербургский океанариум': 10, 'ул марат': 10, 'марат': 9, 'санкт-петербургский океанариум': 9, 'океанариум планета нептун': 8… |
Промежуточные выводы
Такой подход к анализу показал, что именованные сущности с наибольшими весами в квадрате в большинстве случаев находятся в непосредственной близости. Что достаточно адекватно отражает структуру городских объектов.
В большинстве случаев наибольшими весами обладали сущности, соответствующие объектам культурного наследия и городским аттракциям (театры, парки, музеи), что вписывается в представление о российской «культурной столице».
Для получения итогового списка городских объектов из списка для каждой из ячеек был выбран топ N объектов, где значение N зависело от общего количества публикаций в ячейке. Чем больше в ячейке было постов, тем больше ее объектов учитывалось в исследовании. После объединения идентичных и похожих названий получили рейтинг из двух тысяч семи сотен объектов. Далее — топ-25:
Данные объекты являются «лицом» города с точки зрения мнения пользователей Instagram. Наименования, присутствующие в списке, являются «народными» названиями известных городских мест и могут отличаться от официальных.
Еще стоит заметить, что полученный средствами NLP список прошел ручную верификацию — были удалены неочевидные для использованного алгоритма дубли объектов (например, Мариинский театр и Мариинка, Петропавловская крепость и Петропавловка), имена людей, ошибочно отнесенные к организациям и локациям, и другие ошибочно выделенные сущности. Итоговый верифицированный список включал всего 700 объектов. Поэтому стоит отметить, что использованные подходы несовершенны, но они существенно сокращают время работы эксперта.
Помимо музеев, театров, соборов в топе оказались рекреационные зоны (Ботанический сад, Елагин остров, Летний сад, Таврический сад) и общественные пространства (Новая Голландия, Петропавловская крепость, Севкабель). Также в списке присутствуют названия учебных заведений, ресторанов и кафе, жилых комплексов, торговых центров и других типов объектов. Например, наиболее популярным ТЦ является ДЛТ, вокзалом — Витебский, а среди учебных заведений чаще упоминаются Академия Штиглица и Академия художеств.
Во второй части рассказа мы поговорим о том, как тематики распределены по территории и к каким тематикам относятся популярные объекты. А в целом по этому направлению мы рекомендуем почитать книгу «Speech and Language Processing. An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition» и обратить внимание на бесплатные курсы от spaCy и их тематические видео. Плюс — у нас есть собственные специализированные магистерские программы «Цифровые технологии умного города» и «Цифровая урбанистика».
Что еще выходит в нашем блоге на Хабре:
Как устроен инструмент для сравнительного анализа метагеномных данных
Библиотеки для байесовских сетей и идентификации структуры данных