Введение проблемы

Интернет — это огромная вселенная практически всего, что вы можете себе представить или вообразите в будущем, и одним из мест, где сходятся многие вещи, является Reddit. Этот веб-сайт работает как гигантский форум с различными пространствами для самых разных интересов. Один из самых больших сабреддитов называется r/AmITheAsshole (AITA), где люди ежедневно приходят к другим Redditors и спрашивают, являются ли они мудаками в конкретной ситуации или неправа ли другая сторона. Затем люди комментируют пост, вынося один из следующих вердиктов:

  • YTA (Ты мудак)
  • NTA (не мудак, а другой человек)
  • ESH (здесь все отстой)
  • НЕТ (Здесь нет дырочек)

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

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

Стратегия и показатели

Все детали и файлы для этого проекта можно найти в этом репозитории GitHub.

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

Все данные будут получены с помощью двух Reddit API Wrappers: Pushshift для массовой загрузки постов и PRAW для атрибутов постов. Первая — отличная, но ограниченная библиотека, но она может вытягивать более 1000 постов, чего не может сделать PRAW, поэтому вместе они представляют собой самый удивительный инструмент для получения постов!

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

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

Исследовательский анализ

Было получено 150 000 сообщений с их атрибутами (от 31 декабря 2021 года или ранее), обработано и очищено с помощью Pandas для создания исходного DataFrame, с более чем 100 000 недействительных сообщений, содержимое которых было удалено модами, и чистым DataFrame с действительными вердиктами чутья. и неудаленный контент. Оба использовались для анализа, а последний использовался для построения модели. Были исследованы несколько атрибутов сообщений, таких как распределение сообщений по времени суток или неделе года, среднее количество комментариев для каждого вердикта и другие. Все визуализации графиков были сделаны с помощью matplotlib. Облака слов были созданы для сообщений YTA и NTA с использованием библиотеки wordcloud для визуального представления наиболее часто встречающихся слов. Детали исследовательского анализа можно найти в Jupyter Notebook в репозитории GitHub.

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

После слишком большого количества итераций был построен конвейер машинного обучения с использованием тела сообщений в качестве функций (которые были токенизированы, нормализованы и лемматизированы) и вердикта, полученного из сообщений, в качестве целей с использованием преобразования TD-IDF и дерева решений. классификатор. Поскольку в наборе данных были несбалансированные классы, F-показатель оценивался как признак улучшения производительности. Модель была сохранена и может быть протестирована из репозитория.

Настройка гиперпараметров

GridSearch помог найти лучшие параметры для классификатора, который перебирал значения критерия и min_samples_split.

Полученные результаты

Если вы спрашиваете Reddit, вы, вероятно, НТА (согласно Reddit)

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

Есть много поводов для обсуждения этих результатов: люди обычно называют сабреддит эхо-камерой проверки, где люди публикуют истории в явно выгодном свете по отношению к себе, как это сделал бы любой, рассказывая историю по-настоящему, а затем просто хотят, чтобы незнакомцы рассказали им. они сделали хорошо. Другая дискуссия сосредоточена вокруг того факта, что люди на Reddit, кажется, оправдывают ВСЕ, особенно если это связано с личными свободами, частной собственностью или семейными проблемами. Много разбрасываются некоторые утверждения, вроде «Ваш дом (или любой другой объект), ваши правила», «Вы не обязаны по закону что-либо делать для кого-либо» и многие другие, над которыми обычно смеются, но они это основная часть взаимодействий, если вы начнете просматривать любой случайный раздел комментариев. С другой стороны, кажется любопытным, что из всех 4 вердиктов люди меньше всего решают YTA. Очевидно, лучше всего называть всех ТА, а не только ОП. Какой-то дерьмовый поступок, не правда ли?

Судят на часах

При рассмотрении распределения действительных сообщений в зависимости от того, когда они были опубликованы, некоторые вещи выделяются на первый взгляд. Распределение, основанное на часах дня (UTC), достигает своего пика в дневные часы и медленно снижается до самой низкой точки в 6 часов утра. Даже при рассмотрении часовых поясов мы видим, что люди публикуют гораздо больше сообщений в школьные/рабочие часы, а не в ночное время, чего можно было ожидать, если принять во внимание типичный стереотип «ночных сов» в отношении интернет-подглядываний. По-видимому, сплетни более сочны, когда вы знаете, что ваш босс может подойти к вашему столу в любое время, и даже больше, если он является главным героем вашего поста!

Это сезон, чтобы быть веселым

Этот набор данных охватывает диапазон дат с конца августа до конца 2021 года, поэтому мы охватываем два основных праздника, которые, как известно, являются временем семейных драм и неловких ужинов: День Благодарения (неделя 47) и Рождество (неделя 51). Для тех, кто, как и я, долгое время был скрытником AITA, вы должны знать, что оба праздника обычно являются фоновым контекстом для некоторых из самых популярных сообщений в течение последней трети года. Неудивительно, что это две недели с наиболее актуальными сообщениями за этот период времени. Я надеюсь, что ОП получили больше, чем древесный уголь после всех этих семейных распрей!

Я должен защищать этого незнакомца в Интернете!

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

О чем они вообще так много говорят?

Честно говоря, я так смеялся, когда были сгенерированы изображения облака слов, и, может быть, вы тоже понимаете, почему. Если вы посмотрите на достаточное количество сообщений, вы увидите общую тенденцию в популярных сообщениях, где люди обычно освобождаются от всего, что они делают со своими семьями, поскольку их считают безответственными, неуместными, требовательными или даже откровенно оскорбляющими. . Можно утверждать, что в зависимости от контента люди будут защищать ситуации, которые были бы полностью перевернуты, если бы некоторые из персонажей были заменены, но часто обсуждается то, насколько Reddit поддерживает женщин, и особенно жен. Облака слов ясно показывают, что плакаты NTA больше говорят о своих мужьях и семье, в то время как плакаты YTA больше говорят о своих женах и детях. Это многое говорит о восприятии семьи реддиторами, учитывая все разнообразие постеров, и на это действительно забавно смотреть.

Заключение

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

Набор данных был получен с нуля с использованием API-интерфейсов Reddit, которые представляли собой целый мир, который можно было исследовать самостоятельно, и потребовалось много тестов, чтобы получить информацию в желаемом формате и с использованием правильных фильтров. Благодаря этому набор данных требовал минимальных шагов по очистке, в основном для проблем с форматированием, поскольку он был разработан, а затем извлечен из API с учетом проекта. Этот процесс потребовал некоторой итерации в отношении размера набора данных, потому что более 3/4 исходных сообщений были удалены, поскольку они имели недопустимый или нулевой вид, поэтому сценарий был изменен до тех пор, пока не был собран лучший размер выборки для меньших классов.

Конвейер машинного обучения был похож на то, что было рассмотрено в ходе курса, но оказался еще более полезным при использовании исходных данных и итерации сценария для улучшения его показателей для лучшей модели. Исходный набор данных был смещен в сторону определенного вердикта, поэтому перед окончательной версией было протестировано несколько вещей, которые улучшили свои показатели по сравнению с первой. Было реализовано несколько вещей, таких как учет несбалансированных классов с параметром class_weight, проба разных размеров наборов данных, проба двух классификаторов (AdaBoostClassifier и RandomForestClassifier) ​​и просмотр различных параметров для тестирования с помощью GridSearch. Окончательный F-показатель с учетом всех реализаций достиг 0,6, что улучшилось по сравнению с предыдущими испытаниями (AdaBoostClassifier дал самый низкий F-показатель из всех тестов). Эта метрика была выбрана как лучшая для измерения производительности модели, так как мы имели дело с несбалансированными классами. Это не идеально (пока) из-за сложности этой задачи, которая может быть немного амбициозной из-за желания классифицировать на основе морального компаса пользователей Интернета, что само по себе является проблемой.

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

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

Эта характеристика была действительно приятной для меня, как скрытника Redditor и поклонника интернет-драмы, поскольку она играет в пользу нескольких тропов Reddit, о которых обычно говорят без подтверждающих данных, а также поднимает некоторые новые идеи, которые я не замечал раньше в моем просмотр, но я определенно обращу больше внимания. Что касается модели, вам придется опробовать ее самостоятельно и сыграть роль судьи и жюри в своих собственных историях. Вы даже можете попробовать опубликовать его на Reddit и посмотреть, является ли прогноз точным или нет. Модель, пытающаяся предсказать моральное суждение, довольно амбициозна (а от незнакомцев из интернета и того больше!), но я считаю, что «мой проект, мои правила». Так скажи мне Medium, AITA за то, что ты мечтатель?