Сравнение r/wallstreetbets и r/stocks на Reddit с обработкой естественного языка

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

Однако я хотел использовать НЛП, чтобы удовлетворить экспоненциально менее последовательноелюбопытство, может ли НЛП (и некоторое классификационное моделирование) предсказать, из какого субреддита пришла запись?

Чтобы выяснить, какой уровень нюансов НЛП смог уловить, я решил изучить разницу между двумя относительно похожими субреддитами, r/stocks и r/wallstreetbets. Они идеально подходят для этого анализа, так как охватывают схожие тематические материалы и являются наиболее близкими среди инвестирующих сабреддитов с точки зрения общей пользовательской базы и совпадения ключевых слов, согласно данным и статистике, доступным на subredditstats.com/r/wallstreetbets. . Очевидно, что текст в одном из этих сабреддитов очень похож на текст в другом, и в обоих местах пишут одни и те же пользователи. Так что же НЛП и классификация могут рассказать нам о различиях между этими двумя субреддитами? Если вы знакомы с особенно гомофобной и подростковой манией r/wallstreetbets, вы знаете, к чему это ведет, но будет ли такой вывод сделан на основе модели НЛП?

Сбор данных

Я получил все свои текстовые данные для соответствующих сабреддитов, используя pushshift API (и некоторый код на Python для написания функции для очистки 5000 сообщений за последние 70 дней для каждого сабреддита. Я получил много информации о постах, включая автора, когда он был создан, оценка, количество комментариев и т. д., но данные, которые я действительно искал, были текстовыми данными заголовка и основным текстом самого поста.Что касается фактического НЛП, я использовал векторизатор TF-IDF, так как он выполнял много лучше, чем Count Vectorizer во всем экспериментальном моделировании.

Векторизация подсчета очень проста, слова векторизируются в числа в зависимости от того, сколько раз они появляются в данном документе. Более полезным является то, что векторизация TF-IDF (Term Frequency-Inverse Document Frequency) — это оценка, которая говорит нам, какие слова важны для одного документа по сравнению со всеми другими документами. Слова, которые чаще встречаются в одном документе, но не встречаются во многих документах, обладают большей предсказательной силой.

Моделирование и результаты

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

Окончательная модель оказалась векторизатором TF-IDF и логистической регрессией со следующими гиперпараметрами для любопытных:

Векторизатор TF-IDF: max_features=2000, max_df=1.0, n_gram_range= (1, 3), пользовательские стоп-слова

Логистическая регрессия: max_iter=100, Penal=’l2’ (регуляризация лассо), Solr=’lbfgs’, C=3

Стоит отметить, что в отношении этих параметров диапазон n_gram (1, 3) работал лучше всего, что означает, что векторизатор векторизовал отдельные слова и комбинации из 3 слов. Я подозреваю, что смогу еще больше улучшить эту модель, расширив диапазон n_gram, просто это потребует больших вычислительных ресурсов. Также я не могу сказать достаточно, как использование пользовательских стоп-слов и их постоянное улучшение по мере того, как я итерировал модели, помогло повысить точность прогнозирования этой модели. Большинство стоп-слов по умолчанию в НЛП довольно ужасны, но они являются хорошей отправной точкой для тщательной разработки ваших собственных стоп-слов, чтобы ваша модель могла правильно количественно определить как можно больше смысла. Наконец, я не стемматизировал или лемматизировал перед тем, как передать данные в векторизатор TF-IDF, поскольку язык на Reddit отходит от научного к литературному языку, и я не хотел изменять исходное значение текста.

Окончательная модель показала превосходные результаты с точностью прогнозирования 82% на данных обучения и 83% на данных тестирования. Я был довольно доволен этой оценкой, несмотря на то, что пропорция оценок, вероятно, сигнализирует о том, что с этой моделью все еще есть некоторая погрешность/дальнейшая оптимизация, поскольку я не давал ей очень простой задачи классификации. Для дополнительной справки: чувствительность и специфичность окончательной модели составляли 0,837 и 0,827 соответственно.

Выводы и анализ

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

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

Вынос?

Даже после удаления самых отвратительных слов становится ясно, как модель смогла обнаружить разницу между r/stocks и r/wallstreetbets. Один из этих субреддитов характеризуется попыткой структурированного, продуктивного дискурса об акциях, а другой представляет собой абсолютный улей подонков и подлости, характеризующийся в первую очередь случайной гомофобией, дискурсом мемов, обильными шутками о самоубийстве, поклонением тенденциям и ненавистью. финансовой компании Robinhood.

Если вы вообще знакомы с r/Wallstreetbets, это не удивительно. Самый быстрый способ охарактеризовать постеры r/WSB — это то, что они представляют собой нечто среднее между Картманом в пародийных эпизодах World of Warcraft в Южном парке и персонажем Кристиана Бэйла в «Американском психопате». Однако он разделяет большую часть своей пользовательской базы с r/stocks, и они обсуждают одни и те же ключевые слова в обоих сабреддитах, поэтому я хочу подчеркнуть, что это не такая простая проблема классификации, как может показаться, когда вы смотрите в ужасающую бездну, которой является этот субреддит.

Идти вперед/Опираться на это

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

Если вас интересует код, который я использовал для этой модели, вот ссылка на репозиторий Github: https://git.generalassemb.ly/wesmiller22.