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

Допустим, одновременно ведутся два разговора: один между капиталистами (людьми, которые активно поддерживают и предпочитают капитализм) и один между социалистами. Если обе пары обсуждают экономику, можно предположить, что они используют одни и те же слова и фразы. Например, они могут говорить о том, как «президент», «Джо Байден», работает над принятием «закона о стимулах» и как это может повлиять на «средний класс». Могут быть моменты, когда они выражают совершенно противоположные чувства, но все еще используют одни и те же фразы, такие как «регулирование», «фондовый рынок» или «налоги». Несмотря на перекрывающиеся словари, человек с поверхностными знаниями об этих идеологиях, представленных расшифровками этих разговоров, вероятно, мог бы довольно легко определить, кто был кто. Может ли алгоритм сделать то же самое?

Для моего проекта по обработке естественного языка в рамках учебного курса по науке о данных на Генеральной Ассамблее я решил ответить на этот вопрос. Используя API Pushshift, я запросил несколько тысяч содержательных сообщений Reddit от r/Socialism и r/Capitalism и начал работу. В данном случае под существенным подразумевается, что текст поста не был «удален» или «удален» или просто пуст. В итоге я получил около 2800 постов с каждого субреддита.

Получив данные, я разработал множество функций, чтобы включить их в свою окончательную классификационную модель. Я начал с извлечения синтаксической информации; после создания столбцов для отслеживания более базовой информации я использовал spaCy, чтобы найти пропорциональное использование различных частей речи. Затем, используя VaderSentiment, я создал столбцы с положительными, отрицательными, нейтральными и составными оценками для каждого сообщения. Наконец, я создал столбцы для отдельных «стеблей», используемых в сообщениях, чтобы понять, как часто упоминаются различные концепции.

Чтобы создать эти базовые столбцы, я использовал CountVectorizer sklearn, чтобы найти частоту использования каждого уникального слова во всех сообщениях. PorterStemmer от Nltk помог мне сократить словарный запас уникальных слов с 26 000+ уникальных слов до примерно 17 000, объединив разные версии одного и того же слова (социализм, социалист) в одну основу (социалис). В этом случае основы были лучшим вариантом, чем отдельные слова, потому что у меня уже была синтаксическая разбивка, и я хотел получить представление о том, как часто упоминаются понятия, а не считать каждую форму слова как отдельные вхождения. Получив основы, я применил TfidfVectorizer от sklearn, чтобы определить наиболее важные основы из каждого субреддита, и сузил окончательный список до 1197 основ. Загляните в мой репозиторий, чтобы увидеть больше моих рассуждений и процессов!

Теперь, когда у меня были все мои данные и функции, я был обеспокоен результатами моего исследовательского анализа. Ни одна из моих функций не имела особенно сильной корреляции с моей целевой переменной, а субреддиты имели очень похожие словари и оценки настроений. Но тем не менее я устояла! Я попытался классифицировать эти посты практически с каждым типом модели классификации, с которой я был знаком, и извлек десять наиболее важных функций из пяти самых эффективных моделей (логистическая регрессия, случайный лес, дополнительные деревья, повышение Ada и повышение градиента). . Я добился наибольшего успеха, когда использовал классификатор голосования с этими пятью моделями и сузил функции только до самых влиятельных, которые я извлек ранее. Он все еще был значительно переоснащен моими тренировочными данными, но с этой моделью я получил наивысший результат тестирования 0,774 (базовый уровень был 0,510).

Так что это была сложная задача, но я чувствую, что моя модель показала себя довольно хорошо, учитывая сложность анализа экономической идеологии из довольно похожих текстов. Я полагаю, что более опытные специалисты по данным, особенно специалисты по обработке естественного языка, могли бы легко классифицировать подобные сообщения. Кроме того, самые влиятельные функции, которые я получил, были довольно логичными и удивительно забавными. Например, р/социализм ассоциировался с такими словами, как «товарищ» и «класс», а также с более частым использованием имен собственных и местоимений. С другой стороны, r/Capitalism чаще всего ассоциировался со словом «глупый», а затем такими словами, как «рынок», «Венесуэла» и «налог». Поэтому я хотел бы услышать от экспертов по обработке естественного языка: можем ли мы использовать машинное обучение для оценки идеологии и было ли это успешным применением этого инструмента?