Такая полезная теорема Байеса! :)
In [1]:
from gensim import corpora, models
In [2]:
# Импортируем данные в формте UCI Bag of Words
data = corpora.UciCorpus("docword.xkcd.txt", "vocab.xkcd.txt")
dictionary = data.create_dictionary()
In [4]:
data
Out[4]:
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)
Эти люди не знают про тематические модели: