Reddit — это сайт социальной сети, где пользователи могут делиться своими увлечениями в сообщениях. Существуют сообщества под названием «субреддит» для любой интересующей вас темы. Reddit — это веб-сайт типа форума, где пользователи могут делиться новостной информацией, задавать вопросы, обсуждать и комментировать. Каждому сообщению в Reddit присваивается тег, основанный на содержании сообщения. Эти теги называются «чутье».
В этом посте я расскажу, как обнаружить/предсказать тег, связанный с постом, с помощью глубокого обучения. Для этого проекта я решил собрать данные с официального сабреддита Индии — «r/india».
Сбор данных —
Для сбора данных я использовал API, предоставленный pushshift.io, чтобы каждый день получать 100 лучших сообщений в сабреддите, ранжированных по количеству голосов за последние 6 лет. API разрешает только 100 сообщений за вызов. Чтобы убрать предвзятость относительно недавности, я решил собрать посты за последние 6 лет. Хотя этот метод в конечном итоге даст несбалансированный набор данных, он, по крайней мере, гарантирует, что у нас будут посты хорошего качества. Всего с помощью этого процесса было собрано 213721 сообщение. Каждый пост содержал заголовок, имя автора, текст и количество голосов.
Очистка и предварительная обработка данных —
Сырой грязный очень грязный. Я удалил сообщения, у которых не было заголовка и текста. Затем я выполнил базовую обработку текста, такую как удаление смайликов, удаление сообщений, содержащих тексты на хинди, и удаление сокращений. После тщательного наблюдения я объединил некоторые таланты, такие как «Наука» и «Технология», в «Науку/Технологию». Я объединил таланты, такие как «Демонетизация» и «CAA-NRC», в «Политика/экономика». Всего было более 100 флеймов. Однако количество постов для большинства из них было очень меньше. Следовательно, я выбираю десятку лучших талантов. Из-за неоднозначности в классе «Неполитический» я удалил все образцы из этого класса. Теперь проблема представляет собой задачу классификации 9 классов с 116308 выборками.
Используемая модель BERT —
Для классификации я использовал предварительно обученную модель трансформатора в корпусе bert-base-case, доступную на Huggingface. Эти веса не были точно настроены. Архитектура включает в себя эту модель, за которой следуют два полностью связанных слоя, содержащих 128 и 64 нейрона каждый. Затем следует слой активации softmax, содержащий 9 выходов, по одному для каждого из классов.
Обучение —
Перед обучением все образцы были токенизированы с помощью токенизатора «bert-base-case», также предоставленного Huggingface. Максимальная длина последовательности была выбрана равной 50.
Для испытаний было использовано 20% от общего количества образцов. Остальные 80%, что составляет 93046 образцов, использовались для обучения. Поскольку набор данных несбалансирован, я указал веса классов. Модель обучалась на 20 эпохах с использованием графического процессора Tesla K80. Модель достигла точности обучения 64%.
Тестирование —
На тестовом наборе модель достигла точности 66%. Учитывая, что набор данных был несбалансированным, Precision, Recall и F1-Score являются лучшими показателями для оценки модели. Модель достигла точности 0,65, отзыва 0,66 и F1-показателя 0,64.
Вот ссылка на репозиторий Github — https://github.com/sm823zw/Reddit-Flair-Detection