Руководство по классификации настроений в Twitter

Twitter - популярная платформа социальных сетей, которой пользуются сотни миллионов людей по всему миру. Фактически, текущая оценка пользователей Twitter составляет примерно 330 миллионов активных пользователей в месяц и 145 миллионов активных пользователей в день в Twitter. 63 процента всех пользователей Твиттера во всем мире находятся в возрасте от 35 до 65 лет. На протяжении всей этой статьи я буду ссылаться на свой проект, чтобы объяснить, как построить модель, которая анализирует твиты на основе ценности настроения. Эксперты оценили это мнение в более чем 9000 твитов о продуктах Apple и Google.

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

ОБЗОР ПРОЦЕССА

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

ПОДГОТОВКА ТЕКСТА

Проверка значений NA - довольно очевидное решение, так как может отсутствовать много или мало значений данных, что может повлиять на вашу оценку моделирования в долгосрочной перспективе. После проверки их необходимо включить в набор текстовых данных удаление стоп-слов. Стоп-слова - это в основном слова, которые часто встречаются в любом предложении, например есть и я. NLTK имеет встроенный метод, который фиксирует все стоп-слова в английском словаре. Цель исключения стоп-слов - сделать так, чтобы менее часто встречающиеся, но потенциально очень информативные слова имели большее значение на этапе моделирования. Давайте возьмем это предложение в качестве примера: Сегодня будет прекрасный день. Стоп-слова будут включать такие слова, как is и a. Если бы ваша задача заключалась в том, чтобы определить настроение / эмоцию, стоящую за этим предложением, вы, вероятно, сказали бы, что слово красивый дает наиболее положительное значение в предложении. Если вы не удалите стоп-слова, то таким словам, как is и a, по существу будет придано такое же значение, как и у слова beautiful, чего вы не хотите при выполнении анализа классификации текста. Другие варианты удаления стоп-слов, которые вы должны включить, состоят из знаков препинания и цифр. Кроме того, вы должны также строчными буквами все свои слова, чтобы обеспечить единообразие. Ваша машина будет рассматривать что-то вроде USA и usa как два разных слова, но на самом деле они имеют одно и то же значение. Последнее, что вы можете сделать, это настроить список удаления стоп-слов и выполнить регулярное выражение для удаления других нежелательных слов / символов / символов. В моем проекте было множество странных символов, таких как ‰ ûï, которые выглядели полнейшей чепухой. Regex - чрезвычайно полезный инструмент, но может показаться очень сложным для новичков. Вот статья, которая мне очень помогла, когда я впервые пытался ее изучить: https://regexone.com.

После того, как вы удалите все выбранные стоп-слова, вы можете рассмотреть возможность выделения / лемматизации текста. И стемминг, и лемматизация похожи в том, что они используются для возврата сокращенной версии корпуса слов. Например, эти методы сократят слово «бег» до «бег». Разница между основанием и лемматизацией заключается в том, что основание не учитывает контекст слов в такой степени, как лемматизация. Например, слово «пони» будет сокращено до «пони». Как видите, основание просто удаляет окончание слова, чтобы обеспечить «укоренившуюся» версию слова. Однако лемматизация покрывает этот недостаток выделения корней за счет встроенных методов для обнаружения корневых слов в английском словаре и правильного определения корня слова. Лемматизация слова «пони» приведет к «пони». Преимущество стемминга в том, что он дает результаты намного быстрее, но лемматизация дает более точные результаты, хотя и требует больше времени для завершения.

После того, как вы закончите это, у вас есть возможность продолжить очистку всего, что вы считаете ненужным для вашего набора данных. Что касается моего набора данных, я взял на себя смелость просмотреть большинство твитов, чтобы проверить наличие каких-либо странных символов, о которых я упоминал ранее.

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

ИССЛЕДОВАТЕЛЬСКИЙ АНАЛИЗ ДАННЫХ

Следующий раздел - это все, что вам нужно. Не существует формулы для создания наилучшего набора визуализаций, но я кратко покажу некоторые фрагменты того, что я создал для своего проекта. Для начала я реализовал коробчатую диаграмму, чтобы проиллюстрировать длину твитов и длину токенизированных слов на основе трех эмоций продукта. Как упоминалось ранее, я преобразовал эмоции в целые числа, где 0 - положительное, 1 - отрицательное, а 2 - нейтральное.

После этого я разделил свою целевую переменную на 3 эмоции продукта, чтобы увидеть, какие слова встречаются чаще всего. Я использовал модуль WordCloud, чтобы визуализировать это. Кроме того, я использовал гистограмму, чтобы увидеть 20 наиболее часто встречающихся слов, а также 20 наиболее часто используемых хэштегов.

Функциональная инженерия

Этот раздел по сути является продолжением этапа EDA. В этом разделе я использовал токенизированную версию своего набора текстовых данных и исследовал самые популярные пары слов и трехсловные комбинации. Во фрагменте, показанном ранее, показаны только самые популярные отдельные слова. Знание частот отдельных слов в некоторой степени информативно, но на практике некоторые из этих лексем фактически являются частями более крупных фраз, которые следует рассматривать как единое целое. Именно здесь вступают в игру биграммы и n-граммы, поскольку NLTK имеет встроенный метод BigramAssocMeasures (), который может выполнять работу по выводу наиболее часто встречающихся пар слов. Ниже приведен фрагмент желаемого результата.

Вы также можете изучить другие комбинации n-граммов, например, трехзначные комбинации.

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

После того, как вы закончите изучение всех комбинаций слов, вы должны векторизовать свои тексты для целей моделирования, потому что машины могут распознавать только числовые значения, но не текстовые данные. Для этого существует несколько различных методов, включая CountVectorization, TF-IDF и word2vec. В этом сценарии я выберу TF-IDF. Счетная векторизация подсчитывает, сколько раз слово соответствует слову в словаре английского языка, но не принимает во внимание контекст, стоящий за словами. Например, если бы мы смотрели на предложение Сегодня прекрасный день, контекст, стоящий за предложением, был бы счастливым / позитивным настроением. Какие слова порождают это позитивное настроение? Вы, наверное, сказали бы красиво. В векторизации графа слово а будет обрабатываться с таким же значением, как и слово красивый. TF-IDF решает эту проблему, присваивая оценку словам путем их нормализации. По сути, TF-IDF подчеркивает важность каждого слова во всем документе. После использования встроенного в sklearn метода TFidfVectorizer я преобразовал векторизованные текстовые данные в массив для целей моделирования. Для получения дополнительной информации о том, как работает TF-IDF, щелкните эту ссылку: https://www.kdnuggets.com/2018/08/wtf-tf-idf.html.

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

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

Вы также можете использовать другие алгоритмы, такие как Ada Boosting или XG Boosting, но для ограниченных по времени целей я остановился на этих 6. Я не буду вдаваться в подробности о том, как работают эти алгоритмы, но если вам интересно, я предоставил вам куча ссылок ниже, чтобы проверить.

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

И вот оно! Это конец урока! Спасибо за внимание!