我试图通过Gensim使用python实现潜在的狄利克雷分配(LDA),我也从网站上引用了LDA代码,但对于LDA python代码还是不太清楚。知道LDA的人可以根据下面给出的代码以清晰的方式向我解释。我也在这里上传了LDA公式,这是维基百科的图片。在这种情况下,LDA被用于分析文本文档的集合。
lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,
id2word=id2word,
num_topics=4,
random_state=100,
update_every=1,
chunksize=10,
passes=10,
alpha='symmetric',
iterations=100,
per_word_topics=True)
答案 0 :(得分:2)
LDA是主题建模者。它要做的是需要一个看起来像这样的语料库:
# the words become numbers and are then counted for frequency
# consider a random row 4310 - it has 27 words word indexed 2 shows up 4 times
# preview the bag of words
bow_corpus = [dictionary.doc2bow(doc) for doc in processed_docs]
bow_corpus[4310]
[(3,1), (13,1), (37,1), (38,1), (39,1), (50,1), (52,2)]
# same thing in more words
bow_doc_4310 = bow_corpus[4310]
for i in range(len(bow_doc_4310)):
print("Word {} (\"{}\") appears {} time.".format(bow_doc_4310[i][0],
dictionary[bow_doc_4310[i][0]],
bow_doc_4310[i][1]))
单词3(“辅助”)出现1次。 单词13(“付款”)出现1次。 Word 37(“帐户”)出现1次。 单词38(“卡片”)出现1次。 单词39(“贷方”)出现1次。 单词50(“联系人”)出现1次。 单词52(“比率”)出现2次。
Id2word将字典中的单词映射到索引,因此3 ='assist',因此以后可以打印主题。它使用数字ID,因为python更好,更快地处理了数字。因此,句子对单词,单词对数字,频率进行计数,然后将每个单词与语料库中的所有其他单词进行比较,并对它们在一起出现的频率进行评分。它需要最强的关联性,并将其变成一个主题。
num_topics是您要生成的主题数。 update_every是一种使lda设置为动态运行的方法,这意味着它将在指定的时间间隔内重新运行。 Chuncksize仅占用数据集的一部分,如果您需要测试集和验证集,这将很有用。通过是您的算法寻求分配的次数-在两遍通过后,我希望维基百科语料库中的较高数量会收敛到单个主题,这一点很小心。 Alpha是一个超参数,通常.1迭代是它通过数据集的次数。 per_word_topics告诉您的LDA根据需要选择要放入一个主题中的单词数,例如一个主题可能有70个单词,另一个主题可能包含200个单词。默认情况下,它会打印10个单词,但是您可以更改它。我希望这会有所帮助:)