Разработка модели анализа настроений для твитов о вакцине против Covid-19 с помощью Amazon Kinesis Data Firehose и PySpark

В декабре 2020 года несколько правительств разрешили вводить вакцину Pfizer-BioNTech COVID-19 и вакцину Moderna COVID-19. Десятки тысяч людей по всему миру написали о своих впечатлениях от вакцины в Твиттере. По поводу вакцины возникли смешанные чувства.

Я решил собирать данные прямых трансляций Twitter с помощью Amazon Web Services (AWS) Kinesis Data Firehose и разработать модель анализа настроений, используя PySpark для твитов о вакцине COVID-19.

Конвейер данных

Здесь представлена ​​диаграмма, поясняющая конвейер данных для моего проекта.

Сбор и хранение данных

Я использовал Twitter API + Python Script + Kinesis Firehose, чтобы собрать твиты с поисковой фразой «вакцина» и сохранить их в корзине Amazon S3.

Приведенный ниже скрипт python показывает логику, которую я реализовал для сбора твитов о вакцинах.

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

Разработка модели анализа настроений

Данные обучения были загружены из Amazon S3 в Databricks и проанализированы с помощью PySpark.

Твиты были очищены, чтобы удалить URL-адреса, специальные символы и начальные / конечные пробелы с помощью pyspark.sql.functions.regexp_replace

Ярлыки настроения были созданы с помощью TextBlob.

  • Если полярность = 0, тогда метка настроения = нейтральная.
  • Если полярность> 0, тогда метка настроения = положительная.
  • Если полярность

Важное примечание: визуально изучив метки настроения, созданные для нескольких твитов, я пришел к выводу, что Textblob не может четко различать положительные и отрицательные настроения. Использование Amazon Mechanical Turk для получения меток настроения, вероятно, лучший вариант, но MTurk довольно дорогой.

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

Модель конвейера ()

  • Твиты были предварительно обработаны с помощью нескольких преобразователей функций, таких как Tokenizer, Stopword Removal, CountVectorizer, TF-IDF Vectorization, VectorAssembler.
  • Логистическая регрессия Модель классификатора была построена.
  • Показатели тренировки: показатель точности = 0,93 и показатель ROC AUC = 0,81.

Этот скрипт показывает код PySpark, который я реализовал для конвейера обучения модели.

Обученная модель настроений сохранена в Amazon S3.

Предварительно обученная модель и тестовые данные были загружены из S3 в Databricks. Модель соответствовала тестовым данным для получения прогнозов. Прогнозы были загружены в S3.

► Данные прогнозов из S3 были загружены в базу данных Athena для анализа.

► Таблица Athena была подключена к QuickSight, где было сгенерировано wordcloud.

Облака слов, созданные с помощью Python

Следующим шагом я решил сгенерировать облака слов с помощью python и сравнить сгенерированные облака слов для положительных, отрицательных и нейтральных настроений.

  • Данные прогнозов из Amazon S3 были загружены на локальный диск и проанализированы с помощью Python.
  • Твиты были отфильтрованы на предмет игнорируемых слов, а отдельные облака слов были созданы для положительных, отрицательных и нейтральных настроений.

Выводы из Wordclouds

  • Облака слов, обозначающие положительные, отрицательные и нейтральные настроения, содержат общие слова, такие как вакцина, covid, доза и ожидаемая дозировка. Эти слова также встречаются чаще всего.
  • В трех облаках слов есть несколько отличительных слов.
  • Похоже, что отношение к вакцине неоднозначное.

Надеюсь, вам понравилось читать мой пост. Как всегда, приветствую конструктивную критику и отзывы.