用LDA算法的python代码不太清楚

时间:2019-04-02 13:54:59

标签: python-3.x lda

我试图通过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)

LDA formula from wikipedia

1 个答案:

答案 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个单词,但是您可以更改它。我希望这会有所帮助:)