使用LDA模型时,每次都会得到不同的主题,我想复制相同的集合。我在Google搜索了类似的问题,例如this。
我修正了num.random.seed(1000)
文章中所示的种子,但它不起作用。我阅读了ldamodel.py
并找到了以下代码:
def get_random_state(seed):
"""
Turn seed into a np.random.RandomState instance.
Method originally from maciejkula/glove-python, and written by @joshloyal
"""
if seed is None or seed is numpy.random:
return numpy.random.mtrand._rand
if isinstance(seed, (numbers.Integral, numpy.integer)):
return numpy.random.RandomState(seed)
if isinstance(seed, numpy.random.RandomState):
return seed
raise ValueError('%r cannot be used to seed a numpy.random.RandomState'
' instance' % seed)
所以我使用代码:
lda = models.LdaModel(
corpus_tfidf,
id2word=dic,
num_topics=2,
random_state=numpy.random.RandomState(10)
)
但它还没有用。
答案 0 :(得分:1)
由corpora.Dictionary
生成的字典可能与同一语料库不同(例如相同的单词但顺序不同)。因此,每次应该修复字典和种子以获得相同的主题。下面的代码可能有助于修复字典:
dic = corpora.Dictionary(corpus)
dic.save("filename")
dic=corpora.Dictionary.load("filename")
答案 1 :(得分:0)
我同意@ Marcel.Shen的观点,应该将输入字典保存一次并重新使用,而不是每次都重新生成,从而将输入字典修复为LDA模型。这也可能是您获得不同结果的可能原因。
但是我认为获得不同结果的主要原因是,您每次运行时都将random state
随机设置在0-10之间。只需将随机种子值设置为1这样的常数即可。