Улучшение интерпретации тематических моделей

В моем последнем сообщении в блоге я использовал алгоритмы неотрицательной матричной факторизации (NMF) и латентного распределения Дирихле (LDA), реализованные в замечательной библиотеке Python для машинного обучения Scikit Learn, чтобы найти темы в коллекции документов. Вывод производных тем включал присвоение теме числовой метки и распечатку первых слов в теме. Обычной практикой является просто печатать главные слова для каждой темы - многие браузеры, визуализации и примеры тематических моделей делают это! Однако простое отображение самых популярных слов в теме может не помочь пользователю понять, о чем идет речь, или определить контекст, в котором используются эти слова. Отображение только ключевых слов темы не позволяет использовать все данные, возвращаемые обоими алгоритмами. В этом сообщении блога я объясню матрицы, которые возвращают как NMF, так и LDA, включая код для распечатки основных документов в теме и обсудим идеи, которые я должен улучшить интерпретацию производных тем, особенно когда в набор данных включены длинные документы. .

Матрицы, возвращенные NMF и LDA

И NMF, и LDA принимают на вход матрицу пакетов слов (без документов * без слов). В матрице «мешок слов» документы представлены в виде строк, а слова - в виде столбцов. Оба алгоритма также требуют количества тем (k), которые должны быть получены в качестве параметра. Результатом, созданным алгоритмами моделирования тем, будут две матрицы: матрица документ по темам (без документов * k тем) и матрица от тем к словам (k тем * нет слова). В большинстве выходных данных тематической модели используется только матрица «темы в слова» и отображаются слова с наибольшим весом в теме. Лучшее понимание темы можно получить, также отобразив основные документы в теме, что относительно просто сделать с помощью Scikit Learn.

Отображение как основных слов, так и документов в теме

Начнем с написания нового метода display_topics (), который принимает в качестве аргументов как матрицу слов в тему (H), так и матрицу тем в документы (W). Метод также должен принимать коллекцию документов (документы) и количество верхних документов (no_top_documents) для отображения в дополнение к словам (feature_names) и количеству верхних слов (no_top_words) для отображения в качестве аргументов. Метод display_topics распечатывает числовой индекс в качестве названия темы, печатает первые слова в теме, а затем печатает первые документы в теме. Верхние слова и верхние документы имеют наивысший вес в возвращаемых матрицах. Метод argsort () используется для сортировки строки или столбца матрицы и возвращает по порядку индексы для ячеек с наибольшим весом.

Нам нужно получить матрицу слов для тем (H) и матрицу тем для документов (W) из алгоритмов NMF и LDA. Матрица «слово для темы» (H) может быть получена из атрибута component_ модели после вызова .fit (). Получение тем в матрицу документов - это немного сложно, но после прочтения документов API Scikit Learn для каждого алгоритма все это будет иметь смысл. Вызов метода transform () в модели алгоритма вернет тему в матрицу документа (W). Полный код, который получает матрицы H и W из NMF и LDA, а затем вызывает метод display_topics (), приведен ниже:

Наглядный пример игрушки

Крошечный, я имею в виду действительно крошечный набор данных, используется для иллюстрации печати основных слов и документов в теме. В крошечном крошечном наборе данных есть 2 темы, посвященные пользовательским интерфейсам и графикам / деревьям. Набор данных состоит из 9 действительно коротких предложений. В приведенном ниже коде используются NMF и LDA, чтобы найти 2 темы, распечатать 4 основных слова и 4 основных документа в теме:

Темы, полученные из NMF и LDA, показаны ниже. И NMF, и LDA хорошо справляются с поиском известных нам тем.

Темы NMF
Тема 0:
Обзор второстепенных элементов графа деревьев
- Миноры графиков IV: Ширина деревьев и квазиупорядочение
- Граф пересечений путей в деревьях
- Генерация случайных, бинарных, неупорядоченных деревьев
- Миноры графа: обзор

Тема 1:
Интерфейс времени отклика пользователя
Изучение мнения пользователей о времени отклика компьютерной системы
Связь воспринимаемого пользователем времени отклика с измерением ошибок
Система управления пользовательским интерфейсом EPS
Человеко-машинный интерфейс для компьютерных приложений Lab ABC

Темы LDA:
Тема 0:
время отклика пользователя компьютера
- обзор мнения пользователей о времени отклика компьютерной системы
- Связь воспринимаемого пользователем времени отклика с измерением ошибок
- Система управления пользовательским интерфейсом EPS
- Человеко-машинный интерфейс для компьютерных приложений Lab ABC

Тема 1:
несовершеннолетние деревья графа человека
- Второстепенные графы IV: Ширина деревьев и квазиупорядочение
- Второстепенные графы: обзор
- граф пересечений путей в деревьях
- Человеко-машинный интерфейс для компьютерных приложений Lab ABC

Идеи для браузера тематического моделирования

Отображение полных документов при распечатке темы нецелесообразно, если размер документов большой. Этот метод полезен только для коротких документов (например, твитов) или документов с одним абзацем. Решением было бы отображать только те фрагменты документа, которые включают любое из первых слов. В одном из будущих постов блога я опубликую некоторый код Python, который реализует эту идею и обеспечивает представление производной темы в контексте ключевых слов. Объединение этой идеи с инструментом визуализации, таким как LDAVis, сделает действительно полезный браузер тематической модели, который поможет пользователям интерпретировать и исследовать производные темы.