Тематическое моделирование комментариев Soundcloud.com с использованием PyCaret

Введение

Ранее я разработал структуру для выявления продавцов рекламы запрещенных наркотиков на Soundcloud.com. Эта структура извлекала комментарии и выявляла комментарии, рекламирующие наркотики, с помощью простого поиска по ключевым словам. Хотя эта структура хорошо себя зарекомендовала из-за схожей структуры комментариев, я хотел попытаться улучшить ее, используя скрытое распределение Дирихле.

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

Данные

Данные, используемые в этой модели, были ранее собраны для анализа в Tableau. Три лучшие песни на Soundcloud в то время были отобраны: @MEH от Playboi Carti, Find My Way от Baby Jesus и Blueberry Faygo от Lil Mosey. Набор данных содержит 17 048 комментариев с функциями comment и isDrugs. Функция comment представляет собой текст извлеченного комментария, а функция isDrugs содержит 1 для сообщений, рекламирующих продажу наркотиков, и 0 для других сообщений. Более подробную информацию о сборе этих данных можно увидеть здесь.

Реализация модели

Для разработки модели LDA использовалась библиотека Python PyCaret. PyCaret имеет множество модулей для алгоритмов машинного обучения, но использовался модуль NLP. Более подробную информацию о PyCaret можно найти здесь.

Сначала были импортированы модуль PyCaret nlp и Pandas.

from pycaret.nlp import *
import pandas as pd

Затем набор данных был считан в фреймворк Pandas.

data = pd.read_csv('ldaData.csv')

После считывания данных была запущена функция настройки PyCaret. Эта функция инициализирует среду PyCaret. Идентификатор сеанса 123 использовался для простого воспроизведения среды.

dataSetup = setup(data = data, target = 'comment', session_id = 123)

При создании модели LDA необходимо пропустить количество тем. Поскольку цель этой модели - точно классифицировать сообщения, рекламирующие продажу наркотиков, по одной теме, настройка модели PyCaret использовалась в сочетании с функцией isDrugs для определения оптимального количества тем. Оптимальное количество тем - 32 с точностью 98,9%.

tuned_classification = tune_model(model = 'lda', supervised_target = 'isDrugs')

Затем была создана модель LDA с использованием 32 тем.

lda = create_model('lda', num_topics = 32)

Затем модель назначается данным.

lda_results = assign_model(lda)

Комментарии, рекламирующие продажу наркотиков, были отнесены к теме 30. Некоторые не относящиеся к теме комментарии были отнесены к теме 30, но их обычно можно отфильтровать, отфильтровав, где свойство Perc_Dominant_Topic больше 18% . Мы можем просмотреть некоторые комментарии в этой теме с помощью Pandas. Имена пользователей Snapchat или Instagram подверглись цензуре.

lda_results.loc[(lda_results['Dominant_Topic'] == 'Topic 30') & (lda_results['Perc_Dominant_Topic'] > 0.18)]

Затем был построен график частоты для темы 30.

plot_model(lda, plot = 'frequency', topic_num = 'Topic 30')

Тема 30 также может быть представлена ​​в виде облака слов.

plot_model(lda, plot = 'wordcloud', topic_num = 'Topic 30')

Обсуждение

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