Автор статьи: Жанна Боташева

Выпускница курса Machine Learning. Professional

Всем привет! Хочу поделиться своей проектной работой, которую написала в рамках курса OTUS «Machine Learning. Professional».

Повсеместное распространение смартфонов позволяет людям сообщать о чрезвычайной ситуации, которую они наблюдают, в режиме реального времени. По этой причине все больше агентств (например, организации по оказанию помощи при стихийных бедствиях и информационные агентства) заинтересованы в программном мониторинге социальной сети X (бывший Twitter). Но не всегда ясно, действительно ли слова человека объявляют о катастрофе.

В данной работе я хотела бы рассказать, как с помощью обработки естественного языка (NLP) можно разработать систему, способную точно определять контекст твита.

Цель работы — создать модель, которая будет обрабатывать серию твитов и выявлять, относится ли твит к реальной катастрофе.

Для данной работы я использовала набор данных из 10 000 твитов, которые были классифицированы вручную. Набор данных включал в себя:

  • id — уникальный идентификатор для каждого твита;

  • text — текст твита;

  • location — место, откуда был отправлен твит;

  • keyword — определенное ключевое слово из твита;

  • target — информацию посвящен ли твит реальной катастрофе (1) или нет (0).

Предоработка и анализ

Столбец location содержит много пропусков, исходя из этого, делать какие-то выводы о вероятности катастрофы с местом, откуда был отправлен твит, некорректно.

Полагаться на ключевые слова (столбец keyword), такие как «взрыв» или «пожар» не стоит, так как не всегда слова человека объявляют о катастрофе, и они могут нести переносный смысл. Столбец id для дальнейшей работы не пригодится, так как не содержит никакой важной информации. После проведенного анализа, я удалила данные столбцы и оставила для дальнейшей работы только text и target. Приступим к очистке текста.

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

Датасет был очищен от нерелевантных символов (любые символы, не относящиеся к цифро-буквенным) с помощью регулярных выражений, были удалены стоп-слова (слова, которые не несут смысловой нагрузки, например, артикли, союзы и т.д.,), проведена лемматизация (процесс приведения словоформы к лемме — её нормальной (словарной) форме) и токенезация (процесс разделения предложений на слова-компоненты).

После предоработки получилось, что:

  • всего слов — 66587, при объеме словарного запаса — 14236;

  • максимальная длина предложения — 23 слова .

Векторные представления

Естественным способом представления текста для компьютеров является кодирование каждого символа по отдельности. Для преобразования входных данных из их исходного формата в векторы действительных чисел я использовала следующие техники:

1. Bag of Words (мешок слов) —  модель представляет собой неупорядоченный набор слов, входящих в обрабатываемый текст. Модель представляют в виде матрицы, в которой строки соответствуют отдельному тексту, а столбцы — входящие в него слова.

2. TF-IDF (Term Frequency-Inverse Document Frequency) —  статистическая мера, используемая для оценки важности слова в контексте документа, являющегося частью коллекции документов или корпуса.

3. Word2Vec —  это искусственная нейронная сеть, которая обрабатывает текст, преобразуя его в числовые «векторизованные» слова. Векторы слов расположены в пространстве векторов таким образом, что слова с общим контекстом располагаются в этом многомерном пространстве в непосредственной близости друг от друга. Проще говоря, слова, близкие по значению, будут помещены рядом. Эта модель фиксирует синтаксическое и семантическое сходство между словами.

Для визуализации оптимальности разделения твитов и их причастности катастрофам (класс `Катастрофа` - target=1 и класс `Не катастрофа` - target=0) был использован метод главных компонент (PCA).

По графикам видно, что классы не очень четко разделены, возможно, это просто эффект сокращения размерности.

Обратимся к топу-10 слов, которые модель считает наиболее важными при классификации причастности к катастрофе: имеет ли твит отношение к бедствию или нет.

Выбранные топ-10 слов для каждого векторного представления выглядят релевантными. Можно увидеть, что некоторые слова такие как «bombing», «typhoon», «wildfire» присутствуют в разных эмбеддингах.

Моделирование

Для сравнения были использованы модели LogisticRegression и CatBoostClassifier.

BertForSequenceClassification
BertForSequenceClassification

Также была обучена BertForSequenceClassification, модель из Huggingface, которая позволяет легко настроить предварительно обученный режим BERT для задачи классификации. Для данной модели, сохраняются все стоп-слова для предоставления достаточной контекстной информации, например, слова отрицания (not, nor, never), которые считаются стоп-словами.

Для оценки эффективности моделей я использовала матрицу ошибок. Несмотря на то, что F1 Score практически одинаковый для данных моделей, предсказание False Negative намного меньше у BertForSequenceClassification, что в данной работе имеет большое значение.

По итогам проекта делаем следующие выводы:

  1. Сложность не всегда лучше: в этой работе простая модель логистической регрессии превзошла по производительности очень сложные нейронные сети, причем за короткое время.

  2. Для улучшения оценки f1 можно попробовать другие нейросетевые модели, но для определения показателя успешности в задачах классификации необходимо использовать матрицу ошибок.

Код по данной работе можно найти здесь.

Спасибо за внимание :)

Комментарии (0)