Как указать random_state в модели LDA для моделирования topi c - PullRequest
0 голосов
/ 22 апреля 2020

Я прочитал документацию по модели LDA gensim о random_state, в которой говорится:

random_state ({np.random.RandomState, int}, optional) 

- Либо объект randomState, либо начальное число для его генерации. Полезно для воспроизводимости.

Я пытался поставить random_state = 42 или

random_seed=42
state=np.random.RandomState(random_seed)
state.randn(1)
random_state=state.randn(1) 

, который не работал. Может кто-нибудь предложить, что я должен делать

модель = ldaModel (корпус = корпус, id2word = словарь, num_topics = num_topics, random_state = нет)

Я привязал использовать его без random_state функции, она работает но с random_state я получил сообщение об ошибке, в котором говорится, что модель LDA не определена

def compute_coherence_values ​​(словарь, корпус, тексты, лимит, random_state, start = 2, step = 3):

coherence_values = []
model_list = []
for num_topics in range(start, limit, step):
    #model=LdaModel(corpus=corpus, id2word=dictionary, num_topics=num_topics)
    model=ldaModel(corpus=corpus, id2word=dictionary, num_topics=num_topics, 
                                                  random_state)
    model_list.append(model)
    coherencemodel = CoherenceModel(model=model, texts=texts, dictionary=dictionary, coherence='c_v')
    coherence_values.append(coherencemodel.get_coherence())

return model_list, coherence_values

1 Ответ

0 голосов
/ 23 апреля 2020

Ошибка в вашем коде здесь:

 model=ldaModel(corpus=corpus, id2word=dictionary, num_topics=num_topics, 
                                                  random_state)

Вы не можете просто передать переменную random_state без указания метки. Простая передача переменной в метод с целым числом ничего не значит для метода ldaModel, так как метод не принимает позиционный параметр. Метод принимает именованные параметры. Так должно быть так:

model=ldaModel(corpus=corpus, id2word=dictionary, num_topics=num_topics, 
                                                  random_state = random_state)

У меня есть реализация LDA, которая использует LatentDirichletAllocation из sklearn.decomposition, а для random_state требуется целое число. Вот пример:

lda_model = LatentDirichletAllocation(n_components=10,        
                                  max_iter=10,               
                                  learning_method='online',   
                                  random_state=100,          
                                  batch_size=128,            
                                  evaluate_every = -1,       
                                  n_jobs = -1 )

Вот хороший учебник о том, как реализовать и LDA

...