Веб-парсинг, Программирование, Обработка естественного языка

Моделирование темы твита: очистка и предварительная обработка твитов

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

Отказ от ответственности: эта статья предназначена только для образовательных целей. Мы не призываем кого-либо очищать веб-сайты, особенно те веб-ресурсы, которые могут иметь положения и условия, запрещающие такие действия.

Вступление

Тематическое моделирование - это подход машинного обучения без учителя, цель которого - найти «скрытые» темы (или кластеры) внутри коллекции текстовых документов (корпуса). Его реальная сила в том, что вам не нужны помеченные или аннотированные данные, вместо этого он принимает необработанные текстовые данные только в качестве входных данных, и, следовательно, он не контролируется. Другими словами, модель не знает, каковы темы, когда видит данные, а производит их, используя статистические отношения между словами во всех документах.

Одним из наиболее популярных подходов к тематическому моделированию является Скрытое распределение Дирихле (LDA), который представляет собой алгоритм генеративной вероятностной модели, который выявляет скрытые переменные, которые управляют семантикой документа, эти переменные представляют абстрактные темы. Типичное использование LDA (и тематического моделирования в целом) - это применение его к коллекции новостных статей для определения общих тем или тем, таких как наука, политика, финансы и т. Д. Однако одним из недостатков LDA является то, что он не работает. хорошо работает с более короткими текстами, такими как твиты. Именно здесь подходят более свежие модели короткого текстового моделирования тем (STTM), некоторые из которых основаны на LDA, пригодятся и работают лучше!

Эта серия публикаций предназначена для демонстрации и объяснения того, как использовать Python для выполнения и применения определенного подхода STTM (Модель смеси Дирихле с выборкой Гиббса или GSDMM) к твитам о здоровье из Twitter. . Это будет комбинация очистки / очистки данных, программирования, визуализации данных и машинного обучения. Я рассмотрю все темы в следующих 4 статьях по порядку:

Часть 1. Сбор твитов из Twitter

Часть 2. Очистка и предварительная обработка твитов

Часть 3: Применение моделирования коротких текстовых тем

Часть 4: Визуализация результатов тематического моделирования

Эти статьи не будут углубляться в детали LDA или STTM, а скорее объяснят их интуицию и ключевые концепции, которые необходимо знать. Читателю, заинтересованному в более глубоком и статистическом понимании LDA, рекомендуется ознакомиться с этими замечательными статьями и ресурсами здесь и здесь.

Обязательно убедитесь, что на вашем компьютере установлены Jupyter Notebook, Python и Git.

Хорошо, продолжим!

ЧАСТЬ 2: Очистка и предварительная обработка твитов

В нашей предыдущей статье мы извлекали твиты из Twitter с помощью Twint и объединили все необработанные данные в один файл csv. Ничего не было удалено или изменено из формата данных, которые были переданы нам парсером. CSV предоставляется здесь для справки, если вы только присоединяетесь к нам во второй части.

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

Как не практиковать эмоциональное дистанцирование во время социального дистанцирования. @HarvardHealth «https://t.co/dSXhPqwywW #HarvardHealth https://t.co/H9tfffNAo0 '

Например, приведенные выше хэштеги, ссылки и ссылки @ handle могут не понадобиться для нашего подхода к тематическому моделированию, поскольку эти термины на самом деле не обеспечивают значимого контекста для обнаружения неотъемлемых тем из твита. Кроме того, если мы хотим сохранить хэштеги, потому что они могут служить еще одной аналитической цели, мы вскоре увидим, что в наших необработанных данных уже есть столбец hashtags, содержащий их все в списке.

Удаление ненужных столбцов и повторяющихся твитов

Для начала мы загрузим наши очищенные твиты во фрейм данных. Исходные извлеченные данные, предоставленные Twint, содержат множество столбцов, некоторые из которых содержат значения null или NaN. Мы отбросим их и посмотрим, какие столбцы останутся с фактическими значениями для всех твитов.

import pandas as pd
tweets_df = pd.read_csv(‘data/health_tweets.csv’)
tweets_df.dropna(axis='columns', inplace=True)
tweets_df.columns

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

tweets_df = tweets_df[['date', 'timezone', 'tweet', 
                       'hashtags', 'username', 'name', 
                       'day', 'hour', 'retweet', 'nlikes', 
                       'nreplies', 'nretweets']]

И в качестве проверки работоспособности - я всегда люблю удалять любые дубликаты на случай, если один и тот же твит был опубликован несколько раз или случайно скопирован несколько раз!

tweets_df.drop_duplicates(inplace=True, subset="tweet")

Предварительная обработка реальных твитов

Затем нам нужно очистить фактический tweet для каждой записи во фрейме данных и удалить лишний «шум», который нам не нужен. Первое, что нам нужно сделать, это импортировать (и при необходимости установить) некоторые модули Python. Мы также определим строку из punctuation символов; это любые символы или символы, которые мы захотим удалить из твита, поскольку нас интересуют только слова.

import pandas as pd
import re
import gensim
from nltk.stem import WordNetLemmatizer
punctuation = ‘!”$%&\’()*+,-./:;<=>?[\\]^_`{|}~•@’

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

Чтобы удалить любые ссылки, пользователей, хэштеги или аудио / видео теги, мы можем использовать следующие функции, которые используют регулярные выражения (Regex).

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

Токенизация - это процесс разбиения документа (твита) на слова, знаки препинания, числовые цифры и т. д. Лемматизация - это метод преобразования слов в их лемма или словарная форма с использованием словарного и морфологического анализа слов. Например, слова учусь, учусь и учусь будут преобразованы в учусь.

В рамках процесса токенизации рекомендуется удалить стоп-слова, которые в основном представляют собой набор часто используемых слов, которые сами по себе не обеспечивают значимого контекста. Это позволяет нам вместо этого сосредоточиться на важных словах. Примером могут служить слова как, и среди многих других. Мы используем предварительно определенный список из Gensim, указанный выше, и исключаем любые слова, содержащие менее 3 символов.

Затем наша основная функция preprocess_tweet применяет все функции, определенные выше, помимо применения строчных букв и удаления знаков препинания, лишних пробелов или чисел в твите. Он возвращает список чистых токенов, которые были лемматизированы для данного твита. Кроме того, мы также определили basic_clean функцию, которая только очищает твит без применения токенизации или лемматизации для случаев использования, которые могут требовать, чтобы все слова были тактичными.

Чтобы упростить задачу и иметь возможность повторно использовать функции по мере необходимости в любом файле, с которым вы работаете, я создал отдельный файл для хранения всех функций, которые мы можем легко импортировать и использовать для возврата предварительно обработанного фрейма данных за один запуск кода. . И самое лучшее в нем то, что его можно использовать для любого набора текстовых данных, таких как сообщения Reddit, заголовки статей и т. Д.!

Полный код препроцессора твита

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

from tweet_preprocessor import tokenize_tweets
tweets_df = tokenize_tweets(tweets_df)
tweets_df.head(5)

Мы видим, что был добавлен новый столбец tokens , который выглядит неплохо!

Прежде чем мы подведем итоги, давайте сохраним наш предварительно обработанный набор данных в CSV-файл. Вы также можете найти его здесь.

tweets_df.to_csv(r’data/preprocessed_tweets.csv’, index = False,   
                 header=True)

В следующей части серии мы начнем делать забавные вещи и начнем анализировать твиты и запускать наш алгоритм моделирования коротких текстовых тем, чтобы увидеть, какие тенденции и тематические проблемы со здоровьем присутствуют в нашей коллекции твитов!



Ссылки и другие полезные ресурсы