Напоследък работя усилено с Тематично моделиране в работата си като Data Scientist. Ресурсите за създаване на тематични модели с помощта на алгоритми (напр. LDA, LSI, NMF) са изобилни и полезни. Въпреки това останах да искам добри начини да визуализирам моите модели на теми и да ги осмисля, докато не попаднах на библиотеката umap-learn Python.

В тази публикация имам за цел да премина през процеса на създаване на интерактивни визуализации, за да осмисля неструктурираните данни с помощта на тематични модели. Предполагам основно запознаване с тематични модели, тъй като тук ще се съсредоточа само върху визуализацията.

Проектиране на разпределение на теми в по-ниски измерения

След като напаснете модел на теми към вашите данни, можете да използвате модела, за да предвидите разпределенията на теми за отделни документи.

# 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 коефициента. По този начин не е възможно да се присвои точка на този документ, докато чертаем, тъй като можем да чертаем в най-много 3 измерения. (За нашите цели обаче ще чертаем в 2 измерения.) По този начин, преди да стигнем до чертане, ще трябва да намалим размерността на тези 10-D вграждания за всеки документ в 2 измерения. Сега съществуват множество опции, от които да избираме - PCA, t-SNE и UMAP са най-популярните. Ще използваме UMAP в тази публикация. Можете да прочетете повече за библиотеката umap-learn Python в връзката по-долу.

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 предоставя и за визуализация. Чувствайте се свободни да ги изследвате!