Вы когда-нибудь задумывались, как «на самом деле» дела у вашей любимой технологической компании? Хотите отслеживать созданные вами или чужие хэштеги в Твиттере? Что ж, оказывается, есть простой способ получить доступ и запустить очень мощное НЛП с минимальным обучением алгоритмам машинного обучения. Мы собираемся использовать Python, но мы можем вообще отказаться от пакета nltk!

Итак, с чего начать? Что ж, во-первых, давайте выберем одну из самых распространенных проблем в Твиттере - негативные комментарии и публикации. Как мы можем отследить негативное течение времени в том, что нас интересует? В рамках этой статьи я собираюсь исследовать #Google. Первый шаг - получить данные из Twitter в Google Cloud Platform (GCP).

Работать с потоковой передачей данных на GCP легко, если вы напишете небольшой конвейер в Dataflow. К счастью, этот процесс конвейера был недавно опубликован сервианцами Грэмом Полли по адресу: https://medium.com/weareservian/tweets-pipelines-gcp-and-poetry-how-did-it-get-to-this-2a6e47fb3f6a

Как мы будем строить наш трубопровод? Следуя приведенной выше статье Грэхэма, мы можем обратиться к общему решению по GCP (ниже).

Мы извлекаем данные из твиттера, выбирая несколько инструментов, показанных выше, и используем их для достижения наилучшего эффекта. В частности, мы концентрируемся на Dataflow и BigQuery. Конвейер Dataflow - это тот же конвейер, который использовал Грэм, он написан на Java и использует Cloud Build для развертывания. Данные JSON могут поступать прямо в наше хранилище данных BigQuery. Сначала необходимо создать учетную запись разработчика в Твиттере, поэтому, если вы начинаете с нуля, обязательно сделайте это сразу же, так как получение одобрения может занять несколько дней.

Как только наши данные Twitter будут размещены в GCP, мы можем сразу же начать пользоваться преимуществами архитектуры GCP. Наши данные попадают в BigQuery, один из моих любимых инструментов для работы с данными в GCP, и это лучшее место для доступа к данным для аналитики. Очень быстрый запрос PetaBytes данных - это именно то, что нам нужно, чтобы легко обрабатывать твиты, которые получает наш конвейер. Подробнее о BigQuery см: https://cloud.google.com/bigquery/

Ну что теперь? Что ж, прототипирование любого машинного обучения на GCP очень просто, и мы переходим к моему второму любимому инструменту за все время, Google Cloud DataLab. Иногда он настолько хорош, что даже связан с BigQuery. DataLab предлагает интерфейс записной книжки Pythonic в среде GCP, построенной на Jupyter. У него есть интерфейсы, которые упрощают SQL-запросы к данным BigQuery, легкий доступ к bash и множество специальных команд, о которых мы не будем здесь рассказывать, но посмотрите диаграмму %%, если у вас есть свободное время.

Запустив Datalab, мы можем сразу погрузиться в обработку естественного языка (NLP). НЛП использует алгоритмические подходы к тексту для выявления настроений, извлечения информации и иного анализа текста. Эти алгоритмы обычно требуют большого количества обучения и могут быть громоздкими для построения с использованием традиционных методов. Однако мы обойдем все это с помощью Google NLP API: https://cloud.google.com/natural-language/

NLP API - это предварительно обученный алгоритм машинного обучения, который стоит за такими технологиями, как Google Assistant, Google Translate и другими. Мы будем использовать его для извлечения полярности и величины из твитов в наших данных. Полярность - это то, насколько отрицательным или положительным является утверждение, а величина - насколько «сильным» является то же самое утверждение: «Я люблю Google Cloud Platform!» было бы строго положительным заявлением, т. Е. высоким величина и положительная полярность . «Иногда, но не всегда, я чувствую некоторое разочарование, когда пытаюсь установить ключи строк в Bigtable. . » будет слабо отрицательным утверждением, т. Е. низкой величиной и отрицательной полярностью.

Так что в первую очередь? Внутри DataLab мы смотрим на наши данные BigQuery:

После считывания наших данных в фрейм данных в Python мы видим, что #Google встречается в 582/11030 твитах. Мы могли бы подождать, пока поступят новые данные, но для наших целей этого достаточно. Мы называем наш фрейм данных "google" и для извлечения полярности и величины для всех твитов #Google мы просто импортируем build и запускаем .analyzeSentiment для каждого твита.

Обратите внимание: если вы делаете это впервые, вам необходимо настроить ключ API в своей учетной записи GCP для использования NLP API. Теперь, когда у нас есть все данные, мы можем посмотреть на величину и полярность с течением времени для #Google.

Сначала это выглядит очень запутанным, но, к счастью, если мы хотим увидеть, сколько «любит» и «ненавидит» #Google за этот период, мы на самом деле ищем только резко отрицательные или положительные твиты (высокие абсолютная полярность и высокая величина). Наш набор данных показывает разброс по полярности и величине для нашего хэштега.

Похоже, что у нас есть более полярные (положительные) твиты при более высоких значениях (более сильные утверждения), что приятно видеть для нашего #Google. Может быть, не все ненавидят наш хэштег! Мы можем заглянуть дальше, разделив наши твиты на любовь и ненависть с помощью простого Python и используя Dataframes для упрощения построения графиков.

Если посмотреть на общее количество твитов, мы сразу увидим проблему с #Google.

Во-первых, кажется, что преобладают слабые твиты, и мы не получаем столько любви (численно), сколько ненависти. Все ненавидят наши твиты?

К счастью, если мы исследуем любовь и ненависть, мы сможем увидеть в наших твитах искупительную особенность. В частности, теперь, когда у нас есть любовь и ненависть, мы можем видеть, как они ведут себя с течением времени.

Так все ненавидят твиты #Google? К счастью, нет! Любовь, выделенная зеленым цветом выше, имеет наивысшую величину, то есть самые сильные чувства. Ненависть в черном в целом имеет более низкие, по сравнению с нашим порогом, значения. Итак, есть много любви и ненависти, сильных твитов, но они действительно сильно колеблются в данных, которые нам удалось собрать. Несмотря на то, что у нас численно больше ненависти, наибольшую величину имеет любовь.

«В любви всегда есть какое-то безумие. Но в безумии всегда есть причина ».
- Фридрих Ницше

Что дальше?

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

Хочу увидеть больше? Код этого расследования находится в моей учетной записи Github по адресу: https://github.com/AstroHyde/gcp-tweets-streaming-pipeline