请教一下,做LDA时,每次运行得出的结果都不一样。如何才能得到稳定结果呢?

from gensim import corpora

from gensim.models import LdaModel

from gensim import models

from gensim.corpora import Dictionary

import pandas as pd

import jieba.posseg as jp, jieba

#import opencc


 

#读取数据

texts=pd.read_excel(r'data-total.xlsx',header=None).astype(str)
#通过jieba进行切词生成词袋

text = [jp.cut(i) for i in texts.values.ravel()]

#添加停用词性

flags = ('n', 'nr', 'v', 'ns', 'nt', 'd')

#停用词列表,这里“cn_stopwords.txt”使用百度停用词表

stoplist = open('stopwords-master/HIT_stopwords.txt', 'r',encoding='utf-8-sig').read().split('\n')

#将于停用词性中相同词性的词和停用词表中的词剔除,并剔除长度为1的词

data = [[w.word for w in words if (w.word not in stoplist and w.flag in flags and len(w.word) > 1)] for words in text]
#print(data)

#将清洗后的数据转化为 Corpora_Dictionary

dictionary = corpora.Dictionary(data)

#压缩词向量,去掉出现的文章小于2的词,和在80%的文章都出现的词,整体长度限制在500
dictionary.filter_extremes(no_below=5, no_above=0.6)
corpus = [dictionary.doc2bow(text) for text in data]
#print(dictionary)


#进行TF/IDF编码, 这一步是用来调整语料中不同词的词频,将那些在所有文档中都出现的高频词的词频降低

tfidf = models.TfidfModel(corpus)

corpus_tfidf = tfidf[corpus]


#主题个数

num_topics = 5

#训练LDA模型,passes为迭代次数

lda = LdaModel(corpus=corpus, id2word=dictionary,
               num_topics=num_topics, passes=100)


#打印主题

for topic in lda.print_topics(num_words=15, num_topics=num_topics):

    print(topic)

代码如上

因为LDA在训练和推理步骤中都使用随机性。通过每次训练模型或执行推理时将numpy.random种子重置为相同的值,使用numpy.random.seed

SOME_FIXED_SEED = 42

# before training/inference:
np.random.seed(SOME_FIXED_SEED)

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632