Разработка модели анализа настроений для твитов о вакцине против 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, доза и ожидаемая дозировка. Эти слова также встречаются чаще всего.
- В трех облаках слов есть несколько отличительных слов.
- Похоже, что отношение к вакцине неоднозначное.
Надеюсь, вам понравилось читать мой пост. Как всегда, приветствую конструктивную критику и отзывы.