Вам понадобится 5 минут, чтобы понять и внедрить LDA в Python.
Введение
Мы живем в эпоху, когда мы окружены большим объемом текстовой информации, такой как ответы на опросы, комментарии в социальных сетях, твиты и т. д. Поиск подходящей информации для своих нужд может быть сложной задачей, особенно при работе с большим, но разнообразным массивом информации. данные.
Благодаря тематическому моделированию — эпохе обработки естественного языка, используемой для эффективного анализа больших неразмеченных текстовых данных путем их группировки/кластеризации по темам. Мы постараемся охватить технику тематического моделирования под названием LDA с помощью Python.
LDA — Как это работает
LDA означает скрытое распределение Дирихле. Этот метод пытается обнаружить темы из корпуса документов, используя распределение вероятностей, основанное на следующих предположениях:
- Предположение 1. В документах с похожими темами используются похожие группы слов, а это означает, что все документы представляют собой распределения вероятностей по скрытым темам.
- Предположение 2. Скрытые темы можно найти путем поиска групп слов, которые обычно встречаются вместе в документах по всему корпусу, что означает, что темы представляют собой распределения вероятностей по словам.
Реализация LDA
Основные шаги
- Выберите фиксированное количество K тем для изучения.
- Для каждого документа в корпусе случайным образом назначьте каждое слово в документе одной из тем. Этот шаг дает как тематические представления всех документов, так и словесные распределения всех тем.
- Начиная с предыдущего шага, повторите слова в каждом документе, чтобы улучшить эти темы.
- В процессе каждому документу будет присвоена тема
О данных
- Это новости Австралийской радиовещательной корпорации, опубликованные за восемь лет, доступные на Kaggle. Эти данные имеют два основных столбца:
- дата_публикации: дата публикации статьи в формате ггггММдд.
- headline_text: текст заголовка на английском языке.
- Набор данных имеет
Загрузка данных и выбор подмножества
Строка 6 показывает (1226258, 2), что означает 1226258 строк и 2 столбца. Поскольку у нас много строк, я решил выбрать подмножество из 20 000 строк, чтобы ускорить обработку. Эта операция выполняется в строках 9 и 10. При желании вы можете изменить номер наблюдения.
Строка 13 показывает 5 случайных строк из выбранной выборки, как показано ниже.
Подготовка данных для LDA
Создайте матрицу терминов Document X
Нас не интересует столбец publish_data, так как мы будем использовать только данные headline_text.
Определяя объект CountVectorizer, как показано ниже, мы игнорируем:
- все термины, которые встречаются более 95% раз в нашем корпусе документов. Поскольку пороговое значение
max_df
(0,95) означает, что термины, превышающие это значение, не являются значимыми. В данном конкретном случае большинство из них будетstopwords
. - все термины, которые встречаются менее трех раз (
min_df = 3
) во всем корпусе.
Строка 9 показывает следующий вывод, означающий, что у нас есть 20 000 документов и 6425 различных слов.
<20000x6425 sparse matrix of type '<class 'numpy.int64'>' with 89645 stored elements in Compressed Sparse Row format>
Давайте посмотрим на некоторые из тех слов/функций, которые были извлечены из документов.
В строке 5 показаны следующие слова:
['zimbabwe', 'zimbabwean', 'zone', 'zones', 'zoo']
Построить модель LDA
Теперь из нашей матрицы DTM мы можем построить модель LDA для извлечения тем из подчеркнутых текстов. Количество извлекаемых тем — это гиперпараметр, и мы будем использовать 7 тем.
Поскольку LDA — это итеративный алгоритм, в нашем случае у нас будет 30 итераций, но значение по умолчанию — 10. Значение случайного состояния может быть любой цифрой, и он стремится воспроизвести тот же результат.
Показать самые популярные слова в теме
Теперь из модели LDA мы можем сгенерировать лучшие слова по каждой из семи тем.
Предыдущий код генерирует следующий вывод.
THE TOP 10 WORDS FOR TOPIC #0 ['weather', 'election', 'labor', 'urged', 'qld', 'act', 'council', 'nsw', 'new', 'govt'] THE TOP 10 WORDS FOR TOPIC #1 ['report', 'indigenous', 'country', 'rural', 'charged', 'accused', 'new', 'health', 'calls', 'says'] THE TOP 10 WORDS FOR TOPIC #2 ['queensland', 'charges', 'hospital', 'case', 'guilty', 'child', 'sex', 'murder', 'man', 'court'] THE TOP 10 WORDS FOR TOPIC #3 ['face', 'england', 'years', 'win', 'australian', 'talks', 'wins', 'final', 'cup', 'world'] THE TOP 10 WORDS FOR TOPIC #4 ['probe', 'dead', 'woman', 'killed', 'dies', 'car', 'crash', 'man', 'interview', 'police'] THE TOP 10 WORDS FOR TOPIC #5 ['live', 'return', 'care', 'residents', 'test', 'australia', 'new', 'change', 'workers', 'day'] THE TOP 10 WORDS FOR TOPIC #6 ['news', 'search', 'west', 'market', 'coronavirus', 'national', 'gold', 'farmers', 'sydney', 'coast']
Наблюдение: похоже,
- Тема 1 больше ориентирована на правительство
- Тема 3, кажется, больше о спорте, чем о чем-то другом
Прикреплять ярлыки обнаруженных тем к исходным документам
Строка 5 кода показывает: (20000, 7), что означает, что final_topics содержит для каждого из наших 20 000 документов оценку вероятности насколько вероятно, что документ относится к каждой из 7 тем.
В строке 11 показаны первые 5 документов и соответствующие им темы.
Согласно нашей модели LDA:
- первый и второй документ относятся к 4-й теме.
- третий и четвертый документы относятся к 4-й теме.
- пятый документ относится к 6-й теме.
- и т. д.
Небольшая визуализация
Из следующей визуализации мы можем динамически получить для каждой темы набор слов, с которым она связана.
На этой панели показаны темы, представленные кружками слева, и их набор слов справа. На этом графике мы видим, что тема 3 представлена словами суд, мужчина, убийство, секс, ребенок, виновный и т. д. Из этих слов мы можем сделать вывод, что эта тема связана с чем-то драматическим.
Заключение
Ты сделал это! Переход от неразмеченных данных к созданию окончательной модели, которая графически связывает каждый документ с темой. При тематическом моделировании мы не знаем заранее правильные темы, поэтому, возможно, лучше иметь бизнес-знания, которые могут облегчить интерпретацию слов, сгенерированных моделью. Я надеюсь, вам понравилась эта статья, и вы можете узнать больше из следующих ресурсов.
Дополнительные ресурсы
Извлечение темы с неотрицательной матричной факторизацией и скрытым распределением Дирихле