Пример использования библиотеки gensim для тематического моделирования

Такая полезная теорема Байеса! :)


In [1]:
from gensim import corpora, models


Couldn't import dot_parser, loading of dot files will not be possible.

In [2]:
# Импортируем данные в формте UCI Bag of Words
data = corpora.UciCorpus("docword.xkcd.txt", "vocab.xkcd.txt")
dictionary = data.create_dictionary()

In [4]:
data


Out[4]:
<gensim.corpora.ucicorpus.UciCorpus at 0xadde1eec>

In [ ]:
# обучение модель
%time ldamodel = models.ldamodel.LdaModel(data, id2word=dictionary, num_topics=5, passes=20, alpha=1.25, eta=1.25)

In [ ]:
# Сохранение модели
ldamodel.save("ldamodel_xkcd")

In [ ]:
# Загрузка модели
ldamodel = models.ldamodel.LdaModel.load("ldamodel_xkcd")

In [ ]:
# выводим топы слов
for t, top_words in ldamodel.print_topics(num_topics=10, num_words=10):
    print "Topic", t, ":", top_words

In [ ]:
# Вычисляем логарифм перплексии и немного преобразуем, чтобы привести к общепринятому виду
perplexity = ldamodel.log_perplexity(list(data))
print 2**(-perplexity)

In [ ]:
perp = ldamodel.bound(data)
2**(-perp/float(87409))

In [ ]:
# Добавление в модель новых документов, содержащихся в новом корупсе data2
ldamodel.update(data2, passes=10)

In [ ]:
# Получение распределения тем для конкретного документа
doc = list(data)[0]
ldamodel.get_document_topics(doc)

Эти люди не знают про тематические модели:

|