В последнее время я активно работаю с тематическим моделированием в качестве специалиста по данным. Ресурсы по созданию тематических моделей с использованием алгоритмов (например, LDA, LSI, NMF) многочисленны и полезны. Однако мне не хватало хороших способов визуализации моих тематических моделей и их понимания, пока я не наткнулся на библиотеку Python umap-learn.
В этом посте я постараюсь рассказать о процессе создания интерактивных визуализаций, чтобы разобраться в неструктурированных данных с помощью тематических моделей. Я предполагаю базовое знакомство с тематическими моделями, поскольку здесь я сосредоточусь только на визуализации.
Проецирование распределения тем на более низкие измерения
После того, как вы подогнали модель тем к своим данным, вы можете использовать модель для прогнозирования распределения тем для отдельных документов.
# The variable 'nmf' is my Scikit-learn based NMF topic model. # Get Document-wise Topic Distributions X_topics_nmf = nmf.transform(tfidf) #Assign Topics to Documents Based on Maximum Coefficient max_topics = np.argmax(X_topics_nmf, axis = 1)
После оценки распределения тем для отдельных документов мы готовы спроецировать распределение в более низкое измерение. С более интуитивной точки зрения, предположим, что у вас есть 10 тем. Таким образом, каждый документ будет иметь всего 10 коэффициентов. Таким образом, невозможно присвоить точку этому документу во время построения, поскольку мы можем рисовать не более чем в трех измерениях. (Однако для наших целей мы будем рисовать в двух измерениях.) Таким образом, прежде чем мы приступим к построению графика, нам придется уменьшить размерность этих 10-мерных вложений для каждого документа в два измерения. Теперь у нас есть несколько вариантов на выбор — PCA, t-SNE и UMAP являются наиболее популярными. В этом посте мы будем использовать UMAP. Вы можете прочитать больше о библиотеке Python umap-learn по ссылке ниже.
https://umap-learn.readthedocs.io/en/latest/plotting.html
import umap # Use the handy plotting tools from the umap-learn Python package mapper = umap.UMAP(n_neighbors=20, min_dist=0.5, random_state=12).fit(X_topics_nmf)
Интерактивные графики с использованием BokehJS
Теперь, когда мы подогнали наши данные с помощью UMAP и получили проекцию меньшего размера, мы готовы построить ее. Для этого потребуется установить несколько зависимостей, которые вы можете найти в документации umap-learn.
from bokeh.plotting import show, save, output_notebook, output_file output_notebook() # We create a supporting dataframe that will contain labels and # other information we want to show in the interactive plot hover_data = pd.DataFrame({'Title':data[title_column_name].tolist(), 'Topic_Number':max_topics}) # Finally, we create the plot p = umap.plot.interactive(mapper, labels=max_topics, hover_data=hover_data, point_size=8) show(p)
Вот так получается визуализация с другой стороны! Он интерактивен в том смысле, что вы можете наводить курсор на точки и получать необходимую информацию. Вы также можете передать больше полей в фрейм данных, который мы создали, чтобы отслеживать их, когда вы наводите курсор на точки. Вы также можете прокручивать и увеличивать/уменьшать масштаб. Довольно удобно, не так ли?
Есть и другие отличные возможности, которые библиотека umap-learn предоставляет для визуализации. Смело исследуйте их!