我似乎无法找到它,或者我对统计数据及其术语的了解可能是问题所在,但我希望实现与LDA lib from PyPI底页上的图表相似的内容并观察线的均匀性/收敛性。如何使用Gensim LDA实现此目的?
答案 0 :(得分:4)
您希望绘制模型拟合的收敛性是正确的。 不幸的是,Gensim似乎没有这么做。
以这样一种方式运行模型,即您可以分析模型拟合函数的输出。我喜欢设置日志文件。
import logging
logging.basicConfig(filename='gensim.log',
format="%(asctime)s:%(levelname)s:%(message)s",
level=logging.INFO)
在eval_every
中设置LdaModel
参数。该值越低,您的绘图将具有更好的分辨率。然而,计算困惑可能会减慢你的适应性!
lda_model =
LdaModel(corpus=corpus,
id2word=id2word,
num_topics=30,
eval_every=10,
pass=40,
iterations=5000)
解析日志文件并制作你的情节。
import re
import matplotlib.pyplot as plt
p = re.compile("(-*\d+\.\d+) per-word .* (\d+\.\d+) perplexity")
matches = [p.findall(l) for l in open('gensim.log')]
matches = [m for m in matches if len(m) > 0]
tuples = [t[0] for t in matches]
perplexity = [float(t[1]) for t in tuples]
liklihood = [float(t[0]) for t in tuples]
iter = list(range(0,len(tuples)*10,10))
plt.plot(iter,liklihood,c="black")
plt.ylabel("log liklihood")
plt.xlabel("iteration")
plt.title("Topic Model Convergence")
plt.grid()
plt.savefig("convergence_liklihood.pdf")
plt.close()