Классификация субреддита с помощью API PushShift и обработки естественного языка

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

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

Из-за тонких различий между ними социализм и коммунизм могут послужить отличным примером для изучения возможностей обработки естественного языка. Для этого я провел эксперимент с использованием текста из Subreddits r / Communism и r / Socialism. Используя следующие шаги, я мог бы превратить эти сообщения в корпус, который можно использовать для обучения случайного леса или другого алгоритма классификации типов:

  1. Запрос API PushShift для получения отправленных материалов
  2. Очистить и предварительно обработать текст
  3. Анализировать векторизованный / токенизированный текст
  4. Gridsearch для оптимизации гиперпараметров с помощью двух алгоритмов классификации

Шаг 1. Запросите API PushShift

Вместо того, чтобы получать материалы напрямую из Reddit (что ограничивает до 1000 запросов), я использовал API PushShift, который создал исторический архив большинства субреддитов. С помощью этого API я смог получить название, текст, автора и дату отправки.

Шаг 2: очистка и предварительная обработка текста

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

Кроме того, я удалил все теги для удаленных / удаленных сообщений или автоматических сообщений модератора (которые относятся к субреддиту и могут смещать обучающий набор):

Шаг 3. Анализ векторизованного / токенизированного текста

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

Шаг 4: поиск по сетке для оптимизации гиперпараметров

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

Хотя случайный лес генерировал сопоставимую оценку точности для данных обучения, я хотел сравнить модели, чтобы увидеть, какие из них будут более надежными при среднем значении пороговых значений, путем сравнения оценок ROC / AUC: