Ich kann nicht finden, oder wahrscheinlich mein Wissen über Statistiken und ihre Begriffe sind hier das Problem, aber ich möchte etwas ähnliches wie die Grafik auf der unteren Seite der LDA lib from PyPI finden und beobachten die Einheitlichkeit/Konvergenz der Linien . Wie kann ich dies mit Gensim LDA erreichen?Wie überwacht man die Konvergenz des Gensim LDA Modells?
3
A
Antwort
1
Sie haben das Recht, die Konvergenz Ihrer Modellanpassung grafisch darzustellen. Gensim scheint dies leider nicht sehr geradlinig zu machen.
Führen Sie das Modell so aus, dass Sie die Ausgabe der Modellanpassungsfunktion analysieren können. Ich möchte eine Protokolldatei einrichten.
import logging logging.basicConfig(filename='gensim.log', format="%(asctime)s:%(levelname)s:%(message)s", level=logging.INFO)
Stellen Sie den
eval_every
Parameter inLdaModel
. Je niedriger dieser Wert ist, desto besser ist die Auflösung. Allerdings kann die Berechnung der Ratlosigkeit Ihre Passform stark verlangsamen!lda_model = LdaModel(corpus=corpus, id2word=id2word, num_topics=30, eval_every=10, pass=40, iterations=5000)
Analysieren Sie die Protokolldatei und machen Sie Ihre Handlung.
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()