无法在gensim中修复LDA模型中的种子值

时间:2016-09-21 11:33:46

标签: python numpy gensim

使用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)
)

但它还没有用。

2 个答案:

答案 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这样的常数即可。