2016-09-21 3 views
0

При использовании модели LDA каждый раз я получаю разные темы, и я хочу реплицировать один и тот же набор. Я искал аналогичный вопрос в Google, например this.Не удалось исправить начальное значение в модели LDA в gensim

Я фиксирую семена, как показано в статье, 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) 
) 

Но это все еще не работает.

ответ

1

Словарь, созданный corpora.Dictionary, может отличаться от того же самого (например, такие же слова, но различный порядок). Поэтому каждый должен исправить словарь, а также семя, чтобы каждый раз получать то же самое. Код ниже может помочь исправить словарь:

dic = corpora.Dictionary(corpus) 
dic.save("filename") 
dic=corpora.Dictionary.load("filename")