LDA算法的python代码不是很清楚
Not very clear with python code of LDA algorithm
我正在尝试使用 python 和 Gensim 来实现 Latent Dirichlet Allocation (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 是一个主题建模器。它所做的是它需要一个看起来像这样的语料库:
# 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 ("assist") 出现 1 次。
单词 13 ("payment") 出现 1 次。
单词 37 ("account") 出现 1 次。
单词 38 ("card") 出现 1 次。
单词 39 ("credit") 出现 1 次。
单词 50 ("contact") 出现 1 次。
单词 52 ("rate") 出现了 2 次。
Id2word 将字典中的单词映射到一个索引,因此 3 = 'assist' 这样它就可以稍后打印主题。它使用数字 id,因为 python 可以更好更快地处理数字。因此,句子到单词,单词到数字,计算频率,然后将每个单词与语料库中的所有其他单词进行比较,并根据它们一起出现的频率对它们进行评分。把最强的相关性变成话题。
num_topics 是您希望它生成的主题数。 update_every 是一种可以将 lda 动态设置为 运行 的方法,这意味着它将在指定的时间间隔内重新 运行 自身。 Chuncksize 只需要数据集的一部分,如果你想要一个测试集和一个验证集,它很有用。 Passes 是你的算法寻求分配的次数 - 我会小心维基百科语料库中的更高数字在两次通过后收敛到一个主题。 Alpha 是一个超参数,通常 .1 迭代是它通过数据集的次数。 per_word_topics 告诉你的 LDA 选择它认为合适的主题,比如一个主题可能有 70 个词,另一个 200 个词。它默认打印 10 个,但你可以更改它。我希望这会有所帮助:)
我正在尝试使用 python 和 Gensim 来实现 Latent Dirichlet Allocation (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 是一个主题建模器。它所做的是它需要一个看起来像这样的语料库:
# 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 ("assist") 出现 1 次。 单词 13 ("payment") 出现 1 次。 单词 37 ("account") 出现 1 次。 单词 38 ("card") 出现 1 次。 单词 39 ("credit") 出现 1 次。 单词 50 ("contact") 出现 1 次。 单词 52 ("rate") 出现了 2 次。
Id2word 将字典中的单词映射到一个索引,因此 3 = 'assist' 这样它就可以稍后打印主题。它使用数字 id,因为 python 可以更好更快地处理数字。因此,句子到单词,单词到数字,计算频率,然后将每个单词与语料库中的所有其他单词进行比较,并根据它们一起出现的频率对它们进行评分。把最强的相关性变成话题。
num_topics 是您希望它生成的主题数。 update_every 是一种可以将 lda 动态设置为 运行 的方法,这意味着它将在指定的时间间隔内重新 运行 自身。 Chuncksize 只需要数据集的一部分,如果你想要一个测试集和一个验证集,它很有用。 Passes 是你的算法寻求分配的次数 - 我会小心维基百科语料库中的更高数字在两次通过后收敛到一个主题。 Alpha 是一个超参数,通常 .1 迭代是它通过数据集的次数。 per_word_topics 告诉你的 LDA 选择它认为合适的主题,比如一个主题可能有 70 个词,另一个 200 个词。它默认打印 10 个,但你可以更改它。我希望这会有所帮助:)